2015
2
18

VB.NETでAccessDBテーブルの主キーと各フィールド型を取得する

VB.NET で Access のデータベースを操作したいというのを忘れないようにメモってます。今回は、SQL を書く時に欲しい主キーや型情報などを読み込みの際に一緒に取得しておこう、という内容です。


関連記事

  1. DataGridViewへAccessのデータベースファイルを読み込む
  2. AccessDBテーブルの主キーと各フィールド型を取得する ←NOW!
  3. DataGridViewに読み込んだDB情報を再取得する
  4. DataGridViewをセル編集したときの行数を格納する
  5. Accessのデータベースファイルへ書き込むための接続・切断
  6. Accessデータベースのレコードを削除する
  7. Accessデータベースを更新する

ガッツリ続き物になってしまいました…。過去の分と合わせて順番に読んでいただけると分かりやすいかと思います。

なるべく簡素に書いているので、例外処理は甘いと思われます。ご参考にする際は、ご自分の環境に合わせてご修正ください。

環境

  • Visual Studio 2010
  • .NET Framework 4.0

です。

フォームデザイン

この前はただテーブルの内容を DataGridView に入れただけなので、今後やりたいことも踏まえていろいろ追加しておきます。

Form2.vb [デザイン]

150218-1

ボタンを3つとリストボックスを4つ追加してみます。ボタンは今回は設置しただけですが、ボタン2を押されたらリストボックス3と4を参照して UPDATE と INSERT を行う、というような想定です。

ボタン3(DELETE)は選択されている行を対象にすればいいんじゃないかなと思ってます。

今回は、指定されたテーブルを DataGridView に読み込むときに、主キー情報と型情報を取得して、リストボックス1と2に格納しておくのが目的です。

この情報を格納しておけば、後で SQL を書くときに「主キーはこれだから WHERE 文は…」とか、「ここのフィールドは String だからシングルクォーテーションで括って…」とか、そういう判断が汎用的に出来るようになるかなーと。

150218-2

ちなみにリストボックスは開発段階で見えていて欲しいだけなので、実用の際は Visible を False にするか、図のようにフォームを縮めて隠しちゃえばいいと思います。

コード

Module1.vb

前回は DB の設定あたりを宣言セクションに書いて、あとはDBreadプロシージャに全部入れちゃってたんですが、今後の汎用性を考えて接続文字列の生成も宣言セクションに書いておきます。(ハイライト部)

あと、今後の再読込のときのために「読み込み」と「フォームの表示」を別のプロシージャに分けておきます。それと25~28行目、DataGridView に読み込んだ DB 情報を破棄するというプロシージャも追加します。

Form2.vb

Form2 のコードに、フォームを閉じたときに、さっき書いたプロシージャを呼び出す旨を書いておきます。

Module1.vb

今度は、前回書いたコードにちょっとテコ入れして、主キーと型情報を格納しながら読み込みます。

23~30行が主キーの列番号を格納しているところ、32~40行がフィールドの型を格納しているところです。主キー情報は、15行目で予め読み込んでいないと出てきません。

補足として、せっかくなのでビジュアルでもわかりやすく、DataGridView の主キーヘッダーには色をつけようかなと思って29行目を書いたのですが反映されず…。

150218-3

ぐぬぬと思って調べてたら、プロパティの EnableHeadersVisualStyles を False にしないとダメだったみたいです。

あと、37行目ではオートインクリメントか否かを見ています。あとで SQL を書くとき、オートインクリメントはいじらないようにしたいので、それの判定のために格納しておきます。

Form1.vb

前回はこのように書いていたのですが、読み込み部分とフォームの表示部分を分離させちゃったので、

このように表示のプロシージャも追加。

動作テスト

F5キーでデバッグ開始して、前回同様 table1 と table2 の中身をそれぞれ見てみると、

150218-4
150218-5

リストボックス1と2に、主キーの列番号と、フィールドの型が順番に入ってますね。ヘッダーの色も変わっています。

DataGridView の選択を解除しておく

さて、これでもOKなんですが、左上のセルがデフォルトで選択されてしまっているのが好きじゃないので、フォームを表示するときに選択解除もしておきます。

Module1.vb

先ほどのフォームを表示するところに、これを追記して。

150218-6

選択が解除された状態で表示されます。

今回は以上です。次は再読込かなーと思っています。

  • このエントリーをはてなブックマークに追加
  • follow us in feedly 618
  • RSSを登録

公開日:2015/02/18


コメントを残す




*印は必須項目です。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にですがスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)


back to top