Microsoft Access 掲示板

パススールクエリのSQL書き換えに関して

3 コメント
views
4 フォロー

お世話になっております。 SQLServerのデータをODBC経由で
接続しております。 今回、パススールクエリの内容を動的に
書き換えるコードを作成しています。

Accessのリンクテーブル経由のクエリの書き換えは
以下のコードでSQL文の内容の変更は正常にできます。

変数「cat」ADOXのCatalogを
VBエディターで確認するとAccessで作成した
[q2]クエリは、VBエディターの、ViewのItem情報で取得できいます。

パススールクエリの名前に変更するとViewのItemには
存在していない事まではわかりました。

※調査方法はブレークポイントを設けて、デバック時にVBエディターの
「式」の情報から調査しています。

以下Accessのクエリであれば、SQL文の内容を書きかえ可。


Private Sub コマンド46_Click()

    Dim cat As New ADOX.Catalog
    Dim cmd As New ADODB.Command

        cat.ActiveConnection = CurrentProject.Connection      

        Set cmd.ActiveConnection = cat.ActiveConnection
            cmd.CommandText = "SELECT * FROM OnlineData;"     

            cat.Views("q2").Command = cmd

         Set cat = Nothing
         Set cmd = Nothing
         MsgBox ("完了")

End Sub


コードに以下のODBCの接続情報を追加。
しかし、パススールクエリはVBエディターのViewには反映されませんでした。

そこで、アクセス側のクエリを以下のソースで実行したとき、
パススールクエリに更新されました。
SQL文も書き換えられました。

そこで、続けてコードを実行したところ、
パススールクエリはVBエディターのViewには反映されず、
実行時エラー ’3265’
要求された名前、または序数に対する項目はコレクションで見つかりませんでした。
とでます。
---------------------------------------------------------------------------------------- 
Private Sub コマンド46_Click()
   Dim cat As New ADOX.Catalog
    Dim cmd As New ADODB.Command

        cat.ActiveConnection = CurrentProject.Connection
        Set cmd.ActiveConnection = cat.ActiveConnection
            cmd.CommandText = "SELECT * FROM OnlineData;"

   '以下の情報を追加してみましたが、Viewに該当するパススールの
     '情報をデバック時に取得でてきませでした。
       cmd.Properties("Jet OLEDB:ODBC Pass-Through Statement") = True
            cmd.Properties ("Jet OLEDB:Pass Through Query Connect String") = _
                    "ODBC;DSN=test01;database=testProduction;UID=testUser;PWD=*****;
   

             cat.Views("q2").Command = cmd

        Set cat = Nothing
        Set cmd = Nothing
        MsgBox ("完了")

End Sub


VBAからパススールのオブジェクト情報にアクセスする方法が
現在調査中ですが、詳しい情報をお持ちでしたら
ご教示していただければ幸いです。

追記 DAOでのQueryDefsでの記述も検討していますが、将来的に
オラクル、MySQLなどの接続を考えてADOで統一したいと考えております。

みどり
作成: 2023/01/29 (日) 11:56:18
最終更新: 2023/01/29 (日) 12:35:31
通報 ...
1
りんご 2023/01/30 (月) 00:23:11 4d616@0e907

取り敢えずググっただけなので的外れでしたら、ごめんなさい。
Views コレクションおよび CommandText プロパティの例 (VB)

' Get the command.
Set cmd = cat.Views("AllCustomers").Command
これに相当するコードが必要なのかしら。

2

cat.Procedures("q2")

ではいかがですか?

cat をVBEのウォッチ式で観察したところ、

cat.Tables
・システムテーブル
・リンクテーブル
・ローカルテーブル(というのかわかりませんが、Accessのテーブル)

cat.Procedures
・ローカルテーブルのみを参照するクエリ
・パススルークエリ

cat.Views
・リンクテーブルを参照するクエリ

となるようです。

3
みどり 2023/01/30 (月) 22:07:13 a8670@45a76

りんごさん、toneさん
ご教示ありがとうございます。

cat.Procedures("q2").Command = cmd

でパススルークエリのSQL文を書き換えることができました
とても嬉しいです
これでSQLServerなどの
ウィンドウ関数(OLAP関数)がAccess側で
柔軟に使用するとこができます。

お忙しいところお力添えいただき
誠にありがとうございました。
これからもよろしくお願いします。
以上