HOME > 即効テクニック > AccessVBA > クエリ・SQL > VBAでクエリを作成する (ADOX)

即効テクニック

クエリ・SQL

VBAでクエリを作成する (ADOX)

(Access 97)

●概要●
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]