2012/06/26

.NET チェックボックスを読み取り専用にする

フォームにチェックボックスを貼り付けて、読み取り専用にしようとして、プロパティでReadOnlyを探すも見つからず...
Enable を false にするのもなんだかな..ということで調べてみたら

AutoCheck を False

で解決。名前が分かりにくい..

2012/06/15

SQL文 COUNTの凡ミス...

SQLで特定のフィールドがNULLの行を数えようとしてCOUNTを使うときによくやってしまう凡ミス。

select COUNT(Field_Example) from TABLE_A where Field_Example is NULL

これだと0しかかえってこない。正しくは

select COUNT(Field_ID) from TABLE_A where Field_Example is NULL

(※ Field_ID の部分には主キーのフィールドをいれておけば大丈夫)

よくやってしまうミスなので注意しなければ。。。

2012/06/08

VB.NET コントロールなどの色をRGBで指定

コントロールの色などを指定するとき、たとえば以下のように設定できるが、

Object.Style.BackColor = Color.Gray

RGBで指定したいときに、以下のように指定することもできる

Object.Style.BackColor = Color.FromArgb(224, 224, 224)


VB.NET データグリッドビューの指定した位置に行を追加

データグリッドビューの指定した位置に行を追加したいときの処理。

DataGridView1.Rows.Add()

だと、データグリッドの末尾に行が追加されるが、

DataGridView1.Rows.Insert(iIndex)

で iIndex で指定した行の直前に行を挿入することができる。

2012/06/07

VB.NET データグリッドのコンボボックスにDBから選択した複数のデータを格納

データグリッドのセルをコンボボックスにして、そのコンボボックスに文字列だけではなく、複数の値を持たせたいときの処理

たとえば、TALBE_A に以下のようにデータが入っているとする。

TABLE_A: | Field_ID | Field_NAME | | 0001 | あああ | | 0002 | いいい | | 0003 | ううう | | 0004 | えええ | ...

このとき、TALBE_A からデータを取得してコンボボックスには以下のように「Field_NAME」の項目を表示させつつも、項目を選択時には「Field_ID」の値を取得するようにしたい。

コンボボックスのアイテム: | あああ | | いいい | | ううう | | えええ | ...

このとき、TABLE_A からSELECTしたデータを直接コンボボックスに渡して、かつ表示する値と、コンボボックス選択時に取得する値を以下のように設定することができる。

TABLE_A: Dim dt As DataTable 'データの取得 'SelectFromDB ...SQLを実行してDataTableを返す関数をどこかで定義 dt = SelectFromDB("select Field_ID, Field_NAME from TABLE_A order by Field_ID")  'ここでは、DataGridView1 の"ComboCell"という名前の列がコンボボックスになっている Dim comboCol As DataGridViewComboBoxColumn = Me.DataGridView1.Columns("ComboCell") 'データグリッドビューのコンボボックスにデータをバインド comboCol.DataSource = dt 'コンボボックスに表示されるのはTABLE_Aの「Field_NAME」のデータ comboCol.DisplayMember = "Field_NAME" 'コンボボックスの値として扱われるのは「Field_ID」のデータ comboCol.ValueMember = "Field_ID"

データを取得する際は、以下のようになる。

Dim dgvComboBox As DataGridViewComboBoxCell = _ DataGridView1.Rows(iRowNo).Cells("ComboCell") Dim iID As Integer = dgvComboBox.Value Dim strNAME As String = dgvComboBox.FormattedValue

valueとFormattedValueを利用する点に注意。

2012/06/05

エクセルで一行ごとに網掛けにする

エクセルで一行おきに網掛けにしたい場合の書式設定の仕方.


エクセル2003の場合:

①設定したい範囲を選択

②「書式」→「条件付き書式」を選択

③条件で「数式が」を選択

④数式として「=MOD(ROW(),2)=0」と入力

(※行番号を2で割った余りが0のとき,という条件→「偶数の場合」という条件を設定ことになる
奇数行にしたい場合は「=MOD(ROW(),2)=1」と入力すればよい)

⑤「書式」ボタンにて網掛けの設定をする




エクセル2010の場合:

①設定したい範囲を選択

②ホームタブの「条件付き書式」を選択→「新しいルール」を選択

③「ルールの種類を選択してください」の一覧から「数式を使用して,書式設定するセルを決定」を選択

④「次の数式を満たす場合に値を書式設定」の欄に 「=MOD(ROW(),2)=0」を入力

⑤「書式」ボタンにて網掛けの設定をする



以上の設定で選択範囲すべてに対して一度に網掛けの設定ができる.




2012/06/01

SQL 別のテーブルからフィールドの値をコピーしてUPDATEする

別のテーブルからフィールドの値をコピーしてそのテーブルのすべての行を一括でUPDATEしたいときのSQL文。

たとえば、以下のように TABLE_MEMBERDATA(なにかしらのメンバー表) と TABLE_PHONE_NUM (それぞれのメンバーの電話番号の表)にデータが格納されているとする。

TABLE_MEMBERDATA:
| ID | NAME | New_Field | | 001 | aaa | null | | 002 | bbb | null | | 003 | ccc | null | | 004 | ddd | null | ..... .....

TABLE_PHONE_NUM :
| NAME | PHONE_NUM | | aaa | 080-AAAA-YYYY | | bbb | 080-BBBB-YYYY | | ccc | 080-CCCC-YYYY | | ddd | 080-DDDD-YYYY | ..... .....

ここで、TABLE_MEMBERDATAに新しいフィールド 'New_Field ' を追加してそこにそれぞれの'NAME'に対応する電話番号を一括でコピーして以下のような状態にしたい。

TABLE_MEMBERDATA:
| ID | NAME | New_Field | | 001 | aaa | 080-AAAA-YYYY | | 001 | bbb | 080-BBBB-YYYY | | 001 | ccc | 080-CCCC-YYYY | | 001 | ddd | 080-DDDD-YYYY | ..... .....

このときは以下のようにUPDATEすればすべての行を一括で更新できる。

update TABLE_MEMBERDATA
set New_Field =
(select PHONE_NUM from TABLE_PHONE_NUM
where TABLE_PHONE_NUM.NAME = TABLE_MEMBERDATA.NAME)



SQL 重複したデータのSELECT

テーブルからあるフィールドの値が重複している行を取り出したいとき。

たとえば、TABLEAというテーブルの’Field1’,’Field2’に以下のように重複したデータが入っているとする。

 | Field1 | Field2 |  | 001 | aaa |  | 002 | bbb |  | 003 | ccc |  | 004 | ddd |  | 005 | aaa |  | 006 | bbb |

このなかで'Field2'で値が重複している列のみをSELECTしたい。

まず、'Field2'の重複している値のみを取り出すためには以下のように GROUP BY と HAVING を使って SELECT する。

select Field2 from TABLE_A
group by Field2 having COUNT( Field2 ) > 1

結果:  | Field2 |  | aaa | | bbb |

さらに、上記で取得した値を含んでいる列をすべて取得する。このときINを使う

select Field2 from TABLE_A where Field2 in
(select Field2 from TABLE_A
group by Field2 having COUNT( Field2 ) > 1)

結果:  | Field1 | Field2 |  | 001 | aaa |  | 002 | bbb |  | 005 | aaa |  | 006 | bbb |