13

最初のデータベースと同じディレクトリにある 2 番目のデータベースにリンク テーブルを持つ Access データベースがあります。

ディレクトリ全体を (テスト用に) 新しい場所にコピーし、データベース 1 をデータベース 2 のテーブルにリンクしたままにしたいのですが、リンクは新しい場所ではなく元のディレクトリに残っています。

私は2つのことのいずれかをしたい: どちらか

  1. データベース 2 のテーブルへのリンクを、フォルダー パスが相対パスになるように作成します (データベース 2 へのパスがハードコードされないようにします)。

    また

  2. application.path をチェックし、それに応じてプログラムでリンケージを調整するルーチンForm_Load(または autoexec マクロ) を用意します。

4

5 に答える 5

7

ありがとう、

私はそれを成功裏に使用しましたが、レコードセットでは使用しませんでした。

Const LnkDataBase = "C:\NorthWind.mdb"
Sub relinktables()
'Routine to relink the tables automatically. Change the constant LnkDataBase to the desired one and run the sub
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Dim strTable As String
Set dbs = CurrentDb()
For Each tdf In dbs.TableDefs
    If Len(tdf.Connect) > 1 Then 'Only relink linked tables
        If tdf.Connect <> ";DATABASE=" & LnkDataBase Then 'only relink tables if the are not linked right
            If Left(tdf.Connect, 4) <> "ODBC" Then 'Don't want to relink any ODBC tables
                strTable = tdf.Name
                dbs.TableDefs(strTable).Connect = ";DATABASE=" & LnkDataBase
                dbs.TableDefs(strTable).RefreshLink
            End If
        End if
    End If
Next tdf
End Sub
于 2014-09-18T07:51:58.283 に答える
7

必要なバックエンドを参照できるスタートアップ フォームと、リンクする必要があるテーブルのテーブルがあると便利です。テーブル コレクションを反復処理することもできますが、リストの方が少し安全だと思います。その後、必要なのは小さなコードだけです。スニペットは次のとおりです。

''Connection string with database password 
strConnect = "MS Access;PWD=pw;DATABASE=" & Me.txtNewDataDirectory

Set rs = CurrentDb.OpenRecordset("Select TableName From LinkTables " _
& "WHERE TableType = 'LINK'")

Do While Not rs.EOF
    ''Check if the table is already linked, if it is, update the connection
    ''otherwise, link the table. 

    If IsNull(DLookup("[Name]", "MSysObjects", "[Name]='" & rs!TableName & "'")) Then
        Set tdf = db.CreateTableDef(rs!TableName, dbAttachSavePWD, _
            rs!TableName, strConnect)
        db.TableDefs.Append tdf
    Else
        db.TableDefs(rs!TableName).Connect = strConnect
    End If
    db.TableDefs(rs!TableName).RefreshLink
    rs.MoveNext
Loop
于 2011-02-08T00:08:34.447 に答える