DAOと比べて学ぶ(?)ADO(データベース作成編)

VB5からVB6にバージョンアップされもう1年が経とうとしています。VBによるデータアクセスの手法もすっかりADOが定着した感があります。
ADOは Microsoft ActiveX Data Object 2.x だけだと思われがちですが、ADO2.1になり、
セキュリティやスキーマ作成および修正のためのオブジェクトである
ADOXや多次元データのへのアクセスを行うADOMDといったオブジェクトが追加されました。
今回はこのADOXオブジェクトを使用して、今まではADOでは行えなかったMDBデータベースの新規作成やテーブルの新規作成を、DAOとADOで行い、 そのコーディングの違いを見てみましょう。

例題
・C:\TESTディレクトリにデータベース(MDB)を作成する。
・このデータベースには以下のテーブルを作成する。
  テーブル名: T_TEST
  フィールド: ID(PrimaryKey) -- 数値型(長整数)
         名前      -- テキスト型(50バイト) 

まずはDAO3.5を使った例です。
ほぼヘルプに掲載されているサンプルコードそのままという感じでしょうか?

Dim dbTest  As Database
Dim tdfTest
As TableDef
Dim idxTest
As Index

' データベースの作成
Set dbTest = DBEngine.CreateDatabase("C:\TEST\DAO.MDB", dbLangJapanese)

' 新規テーブルデフオブジェクトの作成
Set tdfTest = dbTest.CreateTableDef("T_TEST")

' IDフィールドの作成
tdfTest.Fields.Append tdfTest.CreateField("ID", dbLong)

' 名前フィールドの作成
tdfTest.Fields.Append tdfTest.CreateField("名前", dbText, 50)

' 追加したIDフィールドで主キーを作成
Set idxTest = tdfTest.CreateIndex("PrimaryKey")
idxTest.Primary =
True
idxTest.Fields.Append idxTest.CreateField("ID")
tdfTest.Indexes.Append idxTest
Set idxTest = Nothing

' テーブルをデータベースに追加
dbTest.TableDefs.Append tdfTest
Set tdfTest = Nothing

' データベースを閉じる
dbTest.Close
Set dbTest = Nothing

では次にADOを使って書き直してみましょう。
新規プロジェクトを作成し、参照設定にて Microsoft ADO Ext. 2.1 for DDL and Security を組み込んでください。

Dim catTest    As New ADOX.Catalog
Dim tblTest    As New ADOX.Table
Dim idxTest    As New ADOX.Index

Dim
strConnect As String

' ADOコネクション文字列の指定
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

' データベースの作成
catTest.Create strConnect & "C:\TEST\ADO.MDB"

' 新規テーブル名の指定
tblTest.Name = "T_TEST"

' IDフィールドの作成
tblTest.Columns.Append "ID", adInteger

' 名前フィールドの作成
tblTest.Columns.Append "名前", adVarWChar, 50

' 追加したIDフィールドで主キーを作成
idxTest.Name = "PrimaryKey"
idxTest.PrimaryKey =
True
idxTest.Columns.Append "ID"
tblTest.Indexes.Append idxTest
Set idxTest = Nothing

' テーブルをデータベースに追加
catTest.Tables.Append tblTest
Set tblTest = Nothing

' データベースを閉じる
Set catTest = Nothing

見慣れないCatalogというオブジェクトが登場します。このオブジェクトのCreateメソッドを使用することにより、新規カタログ の作成つまりコネクション文字列で指定したデータソースを新規作成します。
後はDAOの例とほとんど同じで、各オブジェクトに対するAppendメソッドを使用します。
違いといえばDAOではFieldというオブジェクトがADOではColumnという表現になっているところでしょうか?このあたりはRDOに近いような気がします。
いかがでしょうか?


おまけ
データベース(MDB)を最適化する。
今まではDAOにてDBEngineのCompactDBメソッドを使用していました。
先ほども触れた通り、ADOは異なるデータソースでもほとんど同じインターフェースでアクセスできるというのが最大の魅力です。
それゆえにMDBの最適化等といったデータエンジン固有の操作(メソッド)というのは当然といえば当然ですが実装されていません。
ではどうすればよいのでしょう?
データエンジン固有の操作を行うにはデータエンジン固有のオブジェクトを使用すればよいのです。
MicrosoftはADOをベースとしてJetエンジンに限定した操作のみを行うシンプルなオブジェクト、
Microsoft Jet and Replication Objects 2.1 Library
を提供しています。
このJetEngineオブジェクトにCompactDatabaseメソッドを実装しています。
以下にコード記述例を示します。

Dim jetTest    As New JetEngine
Dim strConnect As String
' ADOコネクション文字列の指定
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
' データベースの最適化
jetTest.CompactDatabase strConnect & "C:\TEST\ADO.MDB", _
            strConnect & "C:\TEMP\ADOCMP.MDB"

今回の技術情報に関連しているページ
1.ADOの概要
2.DAOを利用した最適化


トップページへ(Home)  頂き物技術情報へ(Back)