VB.NETでAccessDBテーブルの主キー情報を取得する

VB.NET で Access のデータベースを操作したいというのを忘れないようにメモってます。今回は、SQL を書く時に欲しい主キー情報を読み込みの際に一緒に取得しておこう、という内容です。
関連記事
- DataGridViewへAccessのデータベースファイルを読み込む
- AccessDBテーブルの主キー情報を取得する ←NOW!
- DataGridViewに読み込んだDB情報を再取得する
- DataGridViewをセル編集したときの行数を格納する
- Accessのデータベースファイルへ書き込むための接続・切断
- Accessデータベースのレコードを削除する
- Accessデータベースを更新する
ガッツリ続き物になってしまいました…。過去の分と合わせて順番に読んでいただけると分かりやすいかと思います。
なるべく簡素に書いているので、例外処理は甘いと思われます。ご参考にする際は、ご自分の環境に合わせてご修正ください。
解説のためツギハギしちゃったので、最後の記事(7回め)に全コードまとめてあります。書いたときの環境
- Visual Studio 2010
- .NET Framework 4.0
です。
フォームデザイン
この前はただテーブルの内容を DataGridView に入れただけなので、今後やりたいことも踏まえていろいろ追加しておきます。
Form2.vb [デザイン]

ボタンを3つ追加します。(追加しといてなんですが、今回の記事では使いません。すみません。)
コード
DBtable.vb
前回のコードにハイライト部分を加えます。読み込むときに主キーの情報を取得しておいて、DataGridView の列の色を変えてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
'### DBtable.vb ### Imports System.Data.OleDb Class DBtable 'フィールド Private tableName As Object Private fileName As String Private dgv As DataGridView = Form2.DataGridView1 'コンストラクタ Sub New(tableName_ As Object, fileName_ As String) tableName = tableName_ fileName = fileName_ End Sub '---------------------------------------------------- ' テーブルに関すること '---------------------------------------------------- Private dbCnc As OleDbConnection Private dbAdp As OleDbDataAdapter Private tableData As DataTable Private primaryKeyArray() As DataColumn Public Sub setDataSource() 'テーブルデータ読込 tableData = getTableData("SELECT * FROM " & tableName & ";") 'データグリッドビューへバインド Dim bindingSource1 As New BindingSource() bindingSource1.DataSource = tableData dgv.DataSource = bindingSource1 'フィールド情報 primaryKeyArray = tableData.PrimaryKey '主キー情報を取得 Call setColorPrimaryKey() '主キーのカラムに色つけ End Sub Private Function getTableData(ByVal strSQL As String) As DataTable 'テーブルを接続 dbCnc = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; " & "Data Source=" & fileName) dbAdp = New OleDbDataAdapter(strSQL, dbCnc) dbAdp.MissingSchemaAction = MissingSchemaAction.AddWithKey '既定の情報と共に主キーメタデータも読み込む Dim table As New DataTable dbAdp.Fill(table) Return table End Function Public Sub Dispose() 'コネクション切断(略) End Sub Private Sub setColorPrimaryKey() 'データグリッドビューの主キー列色を変える For i As Integer = 0 To primaryKeyArray.Length - 1 dgv.Columns(i).HeaderCell.Style.BackColor = Color.LemonChiffon '主キーのヘッダー色(.EnableHeadersVisualStyles=False にすること) Next End Sub End Class |
主キー情報は、42行目の記述であらかじめ読み込んでいないと出てきません。
35行目で呼び出している DataGridView の主キーヘッダーに色をつけるプロシージャ、最初反映されず…。

ぐぬぬと思って調べてたら、プロパティの EnableHeadersVisualStyles を False にしないとダメだったみたいです。
こちらを参考にさせていただきました。
動作テスト
F5キーでデバッグ開始して、前回同様 table1 と table2 の中身をそれぞれ見てみると、


主キー情報を自動で取得して、ヘッダーの色が変わっています。
DataGridView の選択を解除しておく
さて、これでもOKなんですが、左上のセルがデフォルトで選択されてしまっているのが好きじゃないので、Form2 を表示するときにセルの選択解除もしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
'### Form2.vb ### Public Class Form2 Private Const FILE_NAME As String = "C:\test.accdb" Private db As DBtable Private dgv As DataGridView '---------------------------------------------------- ' メソッド '---------------------------------------------------- Private Sub setTable() 'DataGridViewにテーブル内容をセット db = New DBtable(Me.Text, FILE_NAME) 'インスタンス生成 db.setDataSource() 'データセット dgv.CurrentCell = Nothing 'DataGridView1の選択解除 End Sub '---------------------------------------------------- ' Formイベント '---------------------------------------------------- Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles Me.Load 'フォームロード時(略) End Sub Private Sub Form2_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed 'フォームが閉じたとき(略) End Sub End Class |
前回書いた Form2 のコードにこれを追記して、

選択が解除された状態で表示されます。
今回は以上です。次は再読込かなーと思っています。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)