パソコン情報

【Access】VBAでパススルークエリのリンク先変更

前回は、VBAでSqlserverのリンクテーブルを作成する方法を行った。

https://pctips.jp/pc-soft/access-sqlserver-tablelink/

 

今回は、

ココがポイント

パススルークエリのリンク先をVBAで簡単に変更する方法

を調べてみました。

 

全クエリを一括変更

過去の記事で、VBAでクエリのODBC情報を一括変更する方法をやりました。

https://pctips.jp/server/stored-detabase-3

 

しかし、その方法では、

ココに注意

普通のクエリもODBC接続設定がされてしまい不具合がでる

 

ODBCの接続設定を行いたいのは、パススルークエリだけなのですが、自分のスキルでは乗り越えることができませんでした。

 

パススルークエリ1個づつリンク先変更方法

Function AttachDSNLessPass_q(Pass_qName As String, stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String)

Dim db As DAO.Database
Dim pass_q As DAO.QueryDef

Set db = CurrentDb

Set pass_q = db.QueryDefs(Pass_qName)

pass_q.Connect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword

End Function

 

上記のコードを標準モジュールに設置して、ボタンをクリックしたアクションで、下記のコードを実行すればパススルークエリのリンク先(ODBC接続情報設定)が設定できました。

 

Private Sub Pass_q_Link_Click()

Call AttachDSNLessPass_q("クエリー名", "サーバー名", "データベース名", "接続ID", "接続PW")

MsgBox "パススルークエリのリンク変更完了しました。"

End Sub

 

パススルークエリが増える毎に、Callで呼び出すことになり、増えていきますが、普通のクエリを壊されるよりマシだと考えています。

 

もっとスマートに、クエリ名に法則を付けて抽出してリンク先を変更するような事も考えましたが、時間がかかりそうなので今回はパスしました。