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 and
Securityにチェックを入れて下さい。
また、ADOXでのクエリの問題についての詳しい技術内容を知りたければ、
Office Developers Edition CD中の、次のファイルを見てください。
[ODETools\Samples\opg\Appendixes\ADOCreateQueries.doc]
|