インデックス、プロパティの設定(ADOX)
2017/10/23
インデックスを作成する
index オブジェクト
<CreateObject 関数を使用する場合>
Dim idx As Object
Set idx = CreateObject(“ADOX.Index”)
<参照設定を行う場合>
Dim idx As ADOX.Index
Set idx = New ADOX.Index
参照設定を行うライブラリファイルについて
Microsoft ADO Ext.6.0 for DDL and Security を選択します。ただし、Office 等のバージョンにより、ADOX のバージョンも異なります。参照設定の方法については、ファイルシステムオブジェクト(FileSystemObject)の使い方 を参照してください。
CreatObject 関数 を使用する場合は、参照設定の必要はありませんが、VBE で、自動メンバ表示等のコーディング支援機能が使用できません。また、マクロの実行速度も遅くなります。
Name プロパティ
object.Name
引数・戻り値
- object ・・・ 対象となる Index オブジェクトを指定します。
インデックス名を表す文字列型(String)の値を取得および設定します。
Columns コレクション
object.Columns
<Append メソッド>
object.Columns.Append Column
引数・戻り値
- object ・・・ 対象となる Index オブジェクトを指定します。
- Column ・・・ インデックスを設定するフィールド(列)名を指定します。
PrimaryKey プロパティ
object.PrimaryKey = boolean
引数・戻り値
- object ・・・ 対象となる Index オブジェクトを指定します。
- boolean ・・・ ブール型(boolean)の値を取得および設定します。True を指定すると主キーを設定し、自動的に、Unique プロパティの値が True に、IndexNulls プロパティの値が adIndexNullsDisallow に設定されます。
Unique プロパティ
object.Unique = boolean
引数・戻り値
- object ・・・ 対象となる Index オブジェクトを指定します。
- boolean ・・・ ブール型(boolean)の値を取得および設定します。True を指定すると重複した値を設定できなくなります。
インデックスを削除する
Indexes.Delete メソッド
object.Indexes.Delete index_name
引数・戻り値
- object ・・・ 対象となる Table オブジェクトを指定します。
- index_name ・・・ 削除するインデックス名を指定します。
フィールド(列)のプロパティ
Properties コレクション
tbl_object.column_object.Properties [.Item] (“item“).Value = boolean
引数・戻り値
- tbl_object ・・・ 対象となる Table オブジェクトを指定します。
- column_object ・・・ 対象となる Column オブジェクトを指定します。
- item,boolean ・・・
item に設定する値 boolean 内容 AutoIncrement True データ型をオートナンバー型に設定 Nullable True 値要求(値を必ず入力する) False 値要求(入力しなくてもよい) Jet OLEDB:Allow Zero Length True 空文字の入力可 False 空文字の入力不可
値要求「はい」「いいえ」の設定
上記の以外に以下の方法で設定が可能です。
tbl_object.column_obj.Attributes = adColFixed … 値要求「はい」
tbl_object.column_obj.Attributes = adColNullable … 値要求「いいえ」
テーブル作成時に、設定します。すでに作成済みのテーブルのフィールド(列)の属性を変更することは出来ません。
ADOX を使用してインデックスを作成する例
サンプルVBAソース その1
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 |
Sub Sample_ADOX_Index1() '参照設定:Microsoft ADO Ext.6.0 for DDL and Security Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim idx As ADOX.Index Dim constr As String Dim DBFile As String On Error GoTo ErrHandler 'データベースのパスと名前 'Access 2007以降(accdb ファイル) DBFile = ActiveWorkbook.Path & "\mydb2.accdb" constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBFile 'Access 2003以前(mdb ファイル) 'DBFile = ActiveWorkbook.Path & "\mydb2.mdb" 'ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBFile 'データベース接続 Set cat = New ADOX.Catalog cat.ActiveConnection = constr 'テーブルの参照 Set tbl = cat.Tables("Table1") 'インデックスの作成 Set idx = New ADOX.Index With idx .Name = "ID_Index" .PrimaryKey = True .Columns.Append "登録ID" End With 'インデックスの登録 tbl.Indexes.Append idx ErrHandler: If Err.Number <> 0 Then MsgBox Err.Number & vbCrLf & Err.Description End If Set cat = Nothing Set tbl = Nothing Set idx = Nothing End Sub |
実行前
実行後
サンプルVBAソース その2
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 |
Sub Sample_ADOX_Index2() Dim cat As Object Dim tbl As Object Dim idx As Object Dim constr As String Dim DBFile As String On Error GoTo ErrHandler 'データベースのパスと名前 'Access 2007以降(accdb ファイル) DBFile = ActiveWorkbook.Path & "\mydb2.accdb" constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBFile 'Access 2003以前(mdb ファイル) 'DBFile = ActiveWorkbook.Path & "\mydb2.mdb" 'ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBFile 'データベース接続 Set cat = CreateObject("ADOX.Catalog") cat.ActiveConnection = constr 'テーブルの参照 Set tbl = cat.Tables("Table1") 'インデックスの作成 Set idx = CreateObject("ADOX.Index") With idx .Name = "ID_Index" .PrimaryKey = True .Columns.Append "登録ID" End With 'インデックスの登録 tbl.Indexes.Append idx ErrHandler: If Err.Number <> 0 Then MsgBox Err.Number & vbCrLf & Err.Description End If Set cat = Nothing Set tbl = Nothing Set idx = Nothing End Sub |
ADOX を使用してインデックスを削除する例
サンプルVBAソース
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 |
Sub Sample_ADOX_IndexDelete() '参照設定:Microsoft ADO Ext.6.0 for DDL and Security Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim constr As String Dim DBFile As String On Error GoTo ErrHandler 'データベースのパスと名前 'Access 2007以降(accdb ファイル) DBFile = ActiveWorkbook.Path & "\mydb2.accdb" constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBFile 'Access 2003以前(mdb ファイル) 'DBFile = ActiveWorkbook.Path & "\mydb2.mdb" 'ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBFile 'データベース接続 Set cat = New ADOX.Catalog cat.ActiveConnection = constr 'テーブルの参照 Set tbl = cat.Tables("Table1") 'インデックスの削除 tbl.Indexes.Delete "ID_Index" ErrHandler: If Err.Number <> 0 Then MsgBox Err.Number & vbCrLf & Err.Description End If Set cat = Nothing Set tbl = Nothing End Sub |
実行前
実行後
ADOX Properties 使用例
サンプルVBAソース
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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
Sub Sample_ADOX_Table_Properties() '参照設定:Microsoft ADO Ext.6.0 for DDL and Security Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim idx As ADOX.Index Dim constr As String Dim DBFile As String On Error GoTo ErrHandler 'データベースのパスと名前 'Access 2007以降(accdb ファイル) DBFile = ActiveWorkbook.Path & "\mydb2.accdb" constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBFile 'Access 2003以前(mdb ファイル) 'DBFile = ActiveWorkbook.Path & "\mydb2.mdb" 'ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBFile 'データベース接続 Set cat = New ADOX.Catalog cat.ActiveConnection = constr 'テーブルの作成 Set tbl = New ADOX.Table tbl.Name = "Table2" Set tbl.ParentCatalog = cat 'フィールド(列)の設定 With tbl .Columns.Append "登録ID", adInteger .Columns.Append "氏名", adVarWChar .Columns.Append "生年月日", adDate .Columns.Append "備考", adLongVarWChar .Columns("登録ID").Properties("AutoIncrement").Value = True 'オートナンバー型 .Columns("氏名").Properties("Nullable") = True '値要求「いいえ」 '.Columns("氏名").Attributes = adColNullable '値要求「いいえ」 .Columns("生年月日").Attributes = adColFixed '値要求「はい」 .Columns("備考").Properties("Jet OLEDB:Allow Zero Length").Value = True '空文字許可「はい」 End With 'テータベースへ登録 cat.Tables.Append tbl 'インデックスの作成 Set idx = New ADOX.Index With idx .Name = "idx_登録ID" .PrimaryKey = True .Columns.Append "登録ID" End With 'インデックスの登録 tbl.Indexes.Append idx ErrHandler: If Err.Number <> 0 Then MsgBox Err.Number & vbCrLf & Err.Description End If Set cat = Nothing Set tbl = Nothing Set idx = Nothing End Sub |
実行結果
関連記事
-
データベースを作成する(ADOX)
ADOX を使用してデータベース(Access)を作成 Catalog オブジェ …
-
レコードを指定した条件で抽出する(ADO)Filter プロパティ
データベースのレコードを指定した条件で抽出する Filter プロパティ 【書式 …
-
SQL文を実行する(ADO)Execute メソッド
Command オブジェクトの Execute メソッドで、SQL文を実行 Co …
-
データベース(MySQL)に接続する(ADO)
MySQL ODBCドライバ Windowsには標準で、いくつかの ODBC ド …
-
Recordset オブジェクトの内容をワークシートにコピーする(CopyFromRecordset メソッド・ADO)
CopyFromRecordset メソッド ADO の Recordset オ …
-
クエリの作成・削除(ADOX)
ADOX を使用してクエリを作成・削除 クエリを作成する手順 【書式】 <参照設 …
-
データベース(Oracle)に接続する(OLE DB を使用)
OLE DB プロバイダ OLE DBには、Oracle 提供の Oracle …
-
Excel VBA のクラスを使ってデータベースへ接続する(ADO)
データベースの処理をクラスモジュールに書く ExcelVBAで、クラス使用する方 …
-
レコードの追加(ADO)AddNew メソッド,Update メソッド
データベースにレコードを追加する AddNew メソッド 新規レコードを追加し、 …
-
Excelファイルに接続(ADO)
ADOでExcelファイルに接続 ADO を使用してExcelファイルを読み込み …
- PREV
- テーブルの作成・削除/フィールドの作成・削除(ADOX)
- NEXT
- クエリの作成・削除(ADOX)