2014/07/16

Access VBAを使ってリンク テーブルのストアド定義(接続情報)を一度に変更する

2014-07-16_134835
Access 2013 リンク テーブルのストアド定義(接続情報)を変更は今までは手動で行っていました。
毎回毎回「面倒だなー」と思っていましたが、msdnで調べていたところ楽できるオブジェクトを見つけました。
今回は、VBAを使ってリンク テーブルのストアド定義をテスト環境から本番環境へ一度に変更する方法をメモ。
VBAを使うため、ワンクリックで切り替えることが出来るので非常に便利です。

サンプル:リンク テーブルを取得する

下記サンプルは、dbo_から始まるリンク テーブルを抽出します。
Sub GetLinkTableInfo()

    Dim daoDB As DAO.Database, daoTBL As DAO.TableDef
    Set daoDB = CurrentDb
    
    For Each daoTBL In daoDB.TableDefs
        If InStr(daoTBL.Name, "dbo_") > 0 Then
            Debug.Print daoTBL.Name, daoTBL.Connect
        End If
    Next
    
End Sub

実行結果は下記のようになります。
 2014-07-16_135043

サンプル:リンク テーブルの接続先を変更する

元に戻せるよう、変更前のストアド定義を保存しておきましょう。
環境によって、「Mid(daoTBL.Name, 5)」を変更する必要があるかもしれません。

ご注意ください。
Sub ChangeLinkTableConnect()

    Dim daoDB As DAO.Database, daoTBL As DAO.TableDef
    Dim strServer, strDatabase As String
    
    Set daoDB = CurrentDb
    strServer = "TESTSERVER"
    strDatabase = "TESTDB"
    
    For Each daoTBL In daoDB.TableDefs
        If InStr(daoTBL.Name, "dbo_") > 0 Then
            On Error GoTo DB_ERR
                'Debug.Print daoTBL.Name, daoTBL.Connect
                daoTBL.Connect = "ODBC;Trusted_Connection=Yes;APP=Microsoft Office 2013" & _
                                    ";DSN=" & strServer & _
                                    ";DATABASE=" & strDatabase & _
                                    ";TABLE=" & Mid(daoTBL.Name, 5) & ";"
                daoTBL.RefreshLink
                'Debug.Print "->" & daoTBL.Name, daoTBL.Connect
        End If
    Next
    
    Exit Sub

DB_ERR:

    MsgBox Err.Description
    
End Sub
参考にしたサイト
スポンサーリンク

スポンサーリンク