VBA:【ADOX】【テーブル操作】Accessのテーブルにインデックスを付ける
◆インデックスの付与
下記コードを実行すると、以下の画像のようにテーブルのフィールド名の「インデックス」部分に「はい(重複あり)」となります。
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 |
Sub Access_インデックス付与() Dim catADOX As ADOX.Catalog Dim tblADOX As ADOX.Table Dim idx As ADOX.Index Dim Constr As String Dim TName As String Dim DBFile As String Dim idxName_Array As Variant Dim idxField_Array As Variant Dim i As Long 'フルパス。作成するAccessのファイル名まで書く' DBFile = "C:\Users\VBA\ADOX\サンプル.accdb" TName = "テーブル1" 'インデックスを付与するテーブル名' Constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBFile Set catADOX = New ADOX.Catalog catADOX.ActiveConnection = Constr Set tblADOX = catADOX.Tables(TName) 'インデックスの付与' idxName_Array = Array("番号_index", "名前_index") '複数のインデックスを付けたい場合' idxField_Array = Array("番号", "名前") For i = 0 To UBound(idxName_Array) Set idx = New ADOX.Index With idx .Name = idxName_Array(i) .PrimaryKey = False '主キーの場合は「True」、このループでやるとエラーになる。' .Columns.Append idxField_Array(i) End With tblADOX.Indexes.Append idx Set idx = Nothing Next i Set tblADOX = Nothing Set catADOX = Nothing MsgBox "完了" End Sub |
◆主キーにしたい場合
このインデックスを主キーとしたい場合は以下の箇所を「True」にします。
また、主キーは複合にもできますが、このやり方では一つにしか付けられないので、フィールド名を1つ指定します。
1 2 3 4 5 |
With idx .Name = "番号_index" .PrimaryKey = True'ここをTrueにする' .Columns.Append "番号" End With |