●概要●
Access2000での標準データアクセス方法であるADO(ADOX)を使用した、VBAによるクエリ作成方法を説明します。
●準備●
(1) 以下の構成のテーブル[テーブル1]を作成します。
----------------------------------------
フィールド名 データ型
ID 長整数型
----------------------------------------
適当なレコードをいくつか作っておくこと。
(2) 新規標準モジュールに以下のプロシージャを記述して下さい。
●サンプルコード●
Private Sub MakeQueryADOX()
'初期設定
Dim Cat As New ADOX.Catalog 'カタログオブジェクト
Dim Cmd As New ADODB.Command 'コマンドオブジェクト
'カタログオブジェクトのコネクションを設定
Cat.ActiveConnection = CurrentProject.Connection
'コマンドテキスト設定
Cmd.CommandText = "Select * FROM テーブル1"
'Viewsコレクションに新規View(クエリ)を追加
Cat.Views.Append "新規クエリ_ADO", Cmd
'終了処理
Set Cat = Nothing
End Sub
'クエリの存在チェック
Private Sub QueryExistCheck()
Dim obj As AccessObject
'Viewsコレクションに作成したクエリが存在するかチェック
For Each obj In CurrentData.AllQueries
If obj.Name = "新規クエリ_ADO" Then
MsgBox obj.Name & " はAllQueriesコレクションに存在します"
Exit Sub
End If
Next
MsgBox "新規クエリ_ADOは存在しませんでした"
End Sub
'クエリ削除
Private Sub DelQuery()
Dim Cat As New ADOX.Catalog
Cat.ActiveConnection = CurrentProject.Connection
Cat.Views.Delete "新規クエリ_ADO"
Set Cat = Nothing
End Sub
●動作確認●
サンプルプロシージャMakeQueryADOを実行して下さい。
●詳細●
ADOXでは、クエリはCatalogオブジェクト中のViewsコレクションとして管理されています。サンプルではCurrentProject(=カレントMDB)に接続し、CommandオブジェクトのCommandTextプロパティを使用して、ViewsコレクションのAppendメソッドで新規クエリを作成しています。
しかし、ここで注意しなくてはならない大きな問題点があります。ADOXで作成したクエリは Access のデータベース・ウィンドウには表示されないのです。表示はされませんが、Viewsコレクションの同一名前空間に存在しています。(DAOのQueryDefsコレクション中にも存在することが確認できます。)それを確認するために、サンプルQueryExistCheckを実行して下さい。存在するというメッセージが表示されたはずです。
そして、このようにして作成したクエリは、Access の UI からは実行できず、あくまでVBAから参照することしか出来ません。そのままでは問題があるので、サンプルDelQueryを実行してクエリを削除して下さい。
●備考●
デフォルトではADOX(Microsoft ADO Ext. 2.1 for DDL and Security)には参照設定がなされていません。Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、Microsoft ADO Ext. 2.1 for DDL andSecurityにチェックを入れて下さい。
また、ADOXでのクエリの問題についての詳しい技術内容を知りたければ、Office Developers Edition CD中の、次のファイルを見てください。
[ODETools\Samples\opg\Appendixes\ADOCreateQueries.doc]