ADOX を使用してテーブル・フィールド(列)を作成・削除
Table オブジェクト
【書式】
<CreateObject 関数を使用する場合>
Dim tbl As Object
Set tbl = CreateObject(“ADOX.Table”)
<参照設定を行う場合>
Dim tbl As ADOX.Table
Set tbl = New ADOX.Table
参照設定を行うライブラリファイルについて
Microsoft ADO Ext.6.0 for DDL and Security を選択します。ただし、Office 等のバージョンにより、ADOX のバージョンも異なります。参照設定の方法については、ファイルシステムオブジェクト(FileSystemObject)の使い方 を参照してください。
CreatObject 関数 を使用する場合は、参照設定の必要はありませんが、VBE で、自動メンバ表示等のコーディング支援機能が使用できません。また、マクロの実行速度も遅くなります。
Name プロパティ
【書式】
object.Name
引数・戻り値
- object ・・・ 対象となる Table オブジェクトを指定します。
テーブル名を表す文字列型(String)の値を取得および設定します。
Columns コレクション
【書式】
object.Columns
<フィールド(列)を作成>
object.Columns.Append Column [, Type, DefineSize ]
<フィールド(列)を削除>
object.Columns.Delete Column
引数・戻り値
- object ・・・ 対象となる Table オブジェクトを指定します。
- Column ・・・ フィールド(列)名を表す文字列型(String)の値を指定します。(省略不可)
- Type ・・・ フィールド(列)のデータ型を以下の定数または値で指定します。(省略可)
定数 値 データ型 adSmallInt 2 整数型 adInteger 3 長整数型 adSingle 4 単精度浮動少数点型 adDouble 5 倍精度浮動少数点型 adCurrency 6 通貨型 adDate 7 日付時刻型 adBoolean 11 ブール型 adGUID 72 オートナンバー型 adVarWChar 202 テキスト型 adLongVarWChar 203 メモ型 - DefineSize ・・・ フィールド(列)のサイズを表す長整数型(Long)の値を指定します。(省略可) ※ Type がテキスト型やメモ型の場合、サイズを指定します。
Tables コレクション
【書式】
object.Tables
<新規テーブルの作成>
object.Tables.Append Table
<テーブルの削除>
object.Tables.Delete Table
引数・戻り値
- object ・・・ 対象となる Catalog オブジェクトを指定します。
- Table ・・・ 作成または削除するテーブル名を表す文字列型(String)の値を指定します。
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 |
Sub Sample_ADOX_CreateTable1() '参照設定: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 = New ADOX.Table tbl.Name = "Table1" Set tbl.ParentCatalog = cat 'フィールド(列)の設定 tbl.Columns.Append "登録ID", adInteger tbl.Columns.Append "氏名", adVarWChar tbl.Columns.Append "生年月日", adDate tbl.Columns.Append "備考", adLongVarWChar 'テータベースへ登録 cat.Tables.Append tbl ErrHandler: If Err.Number <> 0 Then MsgBox Err.Number & vbCrLf & Err.Description End If Set cat = Nothing Set tbl = 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 |
Sub Sample_ADOX_CreateTable2() Dim cat As Object Dim tbl 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 = CreateObject("ADOX.Table") tbl.Name = "Table1" Set tbl.ParentCatalog = cat 'フィールド(列)の設定 tbl.Columns.Append "登録ID", adInteger tbl.Columns.Append "氏名", adVarWChar tbl.Columns.Append "生年月日", adDate tbl.Columns.Append "備考", adLongVarWChar 'テータベースへ登録 cat.Tables.Append tbl ErrHandler: If Err.Number <> 0 Then MsgBox Err.Number & vbCrLf & Err.Description End If Set cat = Nothing Set tbl = Nothing End Sub |
実行結果
ADOX を使用してテーブル(Access)を削除する例
サンプル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 |
Sub Sample_ADOX_DeleteTable() '参照設定:Microsoft ADO Ext.6.0 for DDL and Security Dim cat As ADOX.Catalog 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 'テーブル「Table1」を削除 cat.Tables.Delete "Table1" ErrHandler: If Err.Number <> 0 Then MsgBox Err.Number & vbCrLf & Err.Description End If Set cat = 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 44 |
Sub Sample_ADOX_CreateFields() '参照設定: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 Dim strTables 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.Columns.Delete "登録ID" tbl.Columns.Delete "備考" ErrHandler: If Err.Number <> 0 Then MsgBox Err.Number & vbCrLf & Err.Description End If Set cat = Nothing Set tbl = Nothing End Sub |