即効テクニック |
●概要● 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]