VBScriptさんま屋.

VBScriptの個人的なメモです (´・ω・`)

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