Access形式データベースへの接続(2)DBファイルとテーブルの追加
概要
前回確認したMicrosoft.ACE.OLEDB.12.0
を使ってデータベースを操作する。
Access形式のデータベースファイルはMDBとACCDBがある。ここではACCDBを扱う。
データベースを作成し、テーブルを追加する。
ACCDBファイルを作成する
CatalogオブジェクトのCreateメソッドを使って、ACCESSのデータベースファイルを作成することができる。
注) スクリプトファイルはShift_JISの文字コードで保存すること。
方法1: ConnectionオブジェクトをCreateの引数にする
'データベースを作成する
Dim cat 'Catalogオブジェクト
Dim con 'Connectionオブジェクト
Set cat = CreateObject("ADOX.Catalog")
Set con = CreateObject("ADODB.Connection")
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb;"
cat.Create con
方法2: 接続文字列をCreateの引数にする
'データベースを作成する
Dim cat 'Catalogオブジェクト
Set cat = CreateObject("ADOX.Catalog")
cat.Create "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb;"
後者の例ではConnectionオブジェクトが表に登場してないが、裏では作成されており、
Createメソッドの戻り値として取得できる。
'データベースを作成する
Dim cat 'Catalogオブジェクト
Dim con 'Connectionオブジェクト
Set cat = CreateObject("ADOX.Catalog")
Set con = cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb;")
con.Close '接続を閉じる
テーブルを追加する
以上でデータベースファイルtest.accdb
が作成されたが、テーブルは存在してない。
elements
という名前でテーブルを追加してみる。
'テーブルを追加する
Dim cat 'Catalogオブジェクト
Dim tbl 'Tableオブジェクト
Set cat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
'ACCDBファイルに接続する
cat.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb;"
tbl.Name = "elements" 'テーブル名を設定
cat.Tables.Append tbl 'テーブルを追加
テーブルを確認する
データベースに含まれるテーブルの一覧を取得する。先ほど追加したelements
が表示される。
方法1: Catalogオブジェクトで確認する
'テーブルを確認する
Dim cat 'Catalogオブジェクト
Dim tbl
Dim buf
Set cat = CreateObject("ADOX.Catalog")
'ACCDBファイルに接続する
cat.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb;"
For Each tbl In cat.Tables
If tbl.Type = "TABLE" Then
buf = buf & tbl.Name & vbCr '存在するテーブルの名前を取得
End If
Next
Msgbox buf '結果を表示
方法2: ConnectionオブジェクトのOpenSchemaメソッドで確認する
'テーブルを確認する
Dim con 'Connectionオブジェクト
Dim rs, fld, buf
Set con = CreateObject("ADODB.Connection")
'ACCDBファイルに接続する
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb;"
con.Open
Set rs = con.OpenSchema(20) 'スキーマ情報をRecordSetオブジェクトとして取得
rs.Filter = "TABLE_TYPE='TABLE'" 'テーブルタイプでフィルターをかける
Do Until rs.EOF 'レコードの終わりまで繰り返し
buf = buf & rs.Fields("TABLE_NAME") & vbCrLf 'テーブルの名前を格納
rs.MoveNext '次のレコードへ
Loop
Msgbox buf '結果を表示
ADOX.Catalogオブジェクト
Catalogオブジェクトは1個のデータベースに相当する。
オブジェクト | プロパティ | メソッド |
---|---|---|
Catalog | ActiveConnection Tables Views Users Groups Procedures |
Create GetObjectOwner SetObjectOwner |
Tablesコレクション
データベースは一般に複数のテーブルを持つ。
プロパティ | 説明 |
---|---|
Item | 引数で指定したTableオブジェクトを返す |
Count | Tableオブジェクトの数 |
メソッド | 説明 |
---|---|
Append | Tableオブジェクトを追加する |
Delete | Tableオブジェクトを削除する |
Refresh | 変更内容を反映する |
ADOX.Tableオブジェクト
1個のテーブルに相当する。
オブジェクト | プロパティ | メソッド |
---|---|---|
Table | Name Type Columns Indexes Keys ParentCatalog DateCreated DateModified Properties |