#671 テーブルのリンク先を外部のDBから変更するには? VBA

VBAのプログラムが記述された自分自身のデータベース内にあるリンクテーブルではなく、他の外部のデータベースファイル内にあるすべてのリンクテーブルについて、しかも複数のデータベースファイルに対して一括してリンク先を切り替えるプログラム例です。



下記の例では、「C:\テスト\」フォルダ内にある3つのデータベースファイルについて、その中のすべてのリンクテーブルのリンク先を「C:\テスト\NewLinkDB.accdb」に切り替えています。
またその際、”3つのデータベースファイル”についてはあらかじめ配列に列挙しています。もしもっとたくさんのデータベースファイルを対象とするのであれば、配列内にその名前を追記します。またもしそれらのデータベースファイルがそれぞれ異なるフォルダにある場合には、共通の「cstrDir」定数として宣言しているパスの文字列も配列内へのそれぞれ異なる記述に書き換えることで対処できます。

Public Sub ReLinkExtDB()

  Dim dbs As Database
  Dim tdf As TableDef
  Dim avarDatabases As Variant
  Dim iintLoop As Integer
  Const cstrDir = "C:\テスト\"
  Const cstrDataDB = "C:\テスト\NewLinkDB.accdb"

  avarDatabases = Array("サンプル1.accdb", "サンプル2.accdb", "サンプル3.accdb")

  '3つの外部のデータベースファイルのループ
  For iintLoop = 0 To UBound(avarDatabases)
    '1つのデータベースを開く
    Set dbs = OpenDatabase(cstrDir & avarDatabases(iintLoop))
    '全テーブルの探索ループ
    For Each tdf In dbs.TableDefs
      With tdf
        If .Attributes And dbAttachedTable Then
          'リンテーブルのみリンク先設定の処理
          .Connect = ";DATABASE=" & cstrDataDB
          .RefreshLink
        End If
      End With
    Next tdf
    dbs.Close: Set dbs = Nothing
  Next iintLoop

End Sub


実行例:
  • 実行前

  • 実行後
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved