2

適切なタイトルを付けるのに苦労した質問があります。フロントエンドをWAN内の複数の場所に分散させる必要があります。バックエンドテーブルは、誰もがアクセスできる特定のドライブに配置されます。

私が遭遇した問題は、すべての人が同じドライブ文字にマップされたバックエンドを含むドライブを持っているわけではないということです。Accessは、サーバー名(wvadrive1 \ Tables \ backend)ではなく、パス(つまり、H:\ Tables \ backend)によってバックエンドの場所を参照しているようです。

VBコードでドライブ名の代わりにサーバー名を参照できることは知っていますが、リンクテーブルマネージャー/外部データでリンクテーブルを設定すると、ドライブ文字に基づいてアクセスマップが表示されます。

私がこれを配布するすべての人が自分のテーブルを適切にリンクすることを保証する簡単な解決策はありますか?リンクされたテーブルをマップするためにデータベースを初めて開いたときにVBAを実行できますか?

ありがとう!

4

1 に答える 1

2

VBAを使用してTableDef.Connect、ドライブ文字ではなくファイル共有(UNCパス)を指すようにプロパティを変更します。

最も単純なケースでは、すべてのユーザーが同じUNCパスを使用でき、リンクされたすべてのテーブルが同じdbファイルにあります...

Const cstrUncPath As String = ";DATABASE=\\Server\ShareName\AnotherFolder\YourDb.mdb"
Dim db As DAO.database
Dim tdf As DAO.TableDef

Set db = CurrentDb
For Each tdf In db.TableDefs
    If tdf.Connect Like ";DATABASE=*" Then
        tdf.Connect = cstrUncPath
        tdf.RefreshLink
    End If
Next
Set tdf = Nothing
Set db = Nothing

ユーザーに配布する前に、dbファイルでこれを行ってください。必要に応じて、dbファイルのユーザーのローカルコピーから同様の手順を後で実行できます。

コードはAccessテーブルへのリンクのみを変更することに注意してください。他のデータソース(ODBC、Excel、テキストファイルなど)へのリンクは無視されます。

複数のAccessバックエンドデータベース内のテーブルにリンクする必要がある場合は、データベースパスとテーブル/リンク名を含む別のテーブルを使用してください。次に、そのテーブルをレコードセットとして開き、ループして、必要に応じてリンクを変更/作成できます。

于 2013-02-08T20:50:04.490 に答える