我使用Access来维护前端和后端数据库,因此FE链接到BE表。
我需要检测FE文件是否已更改目录以提示用户更改表链接(用于备份/开发/测试目的)以确保不会修改实时数据。
有没有办法在Access中通过VBA检测到这一点?
这是创建实用程序功能的第1部分,该功能允许用户在系统检测到文件路径发生变化时自动更改表链接。
答案 0 :(得分:0)
这个小函数返回当前数据库的路径 - 这会有帮助吗?
Function WhereAmI() As String
Dim fso As FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(CurrentDb().Name)
share = f.Drive.ShareName
If Len(share) = 0 Then
share = CurrentDb().Name
Else: share = share & Mid(CurrentDb().Name, 3)
End If
WhereAmI = share
End Function
答案 1 :(得分:0)
除了我的其他答案,我还有以下代码重新映射数据库中的所有链接表。在我的情况下,我有一个包含2行的表来显示我需要链接到的源表,如果我当前的数据库是本地的(在我的C:\驱动器上)或网络驱动器上。如果我想将链接映射到网络驱动器,我表中的位置是URL - 即" \\ server \ file"所以任何用户都可以在不依赖于他们如何映射网络驱动器的情况下使用它。
我通常将它放在AutoExec宏中,以便在打开数据库时自动链接到正确的源。它还使用我的公共代码模块同时重新映射库。
当我必须转到新年时,这也简化了重新链接表 - 只需更改表中的源文件,并更新所有链接表以引用新年的源数据。
Function relink_tables()
If Left(CurrentDb().Name, 2) = "C:" Then
Source = "local"
Else: Source = "network"
End If
Set rs = CurrentDb.OpenRecordset("select * from [linked table source] where source='" & Source & "'")
Source = rs.Fields("path")
For Each R In References
If InStr(R.Name, "Common Tables") > 0 Then Application.References.Remove R
Next R
Application.References.AddFromFile Source
x = 0
Set TDefs = CurrentDb().TableDefs
For Each table In TDefs
If InStr(table.Connect, "Common Tables") = 0 Then GoTo NT
table.Connect = ";DATABASE=" & Source
table.RefreshLink
x = x + 1
NT:
Next table
Finish:
MsgBox "remapped " & x & " tables"
End Function