|
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を利用した最適化
|