我使用了 usncahill 的解决方案并根据自己的需要对其进行了修改。我没有足够的声誉来投票支持他们的解决方案,所以如果您喜欢我的附加代码,请给我们两个投票。
我想要一种在两个后端数据库之间快速切换的方法,一个包含实时数据,另一个包含测试数据。于是我把前面提到的代码修改如下:
Private Sub ReplaceLink(oldLink As String, newLink As String)
Dim tbl As TableDef, db As Database
Set db = CurrentDb
For Each tbl In db.TableDefs
If InStr(tbl.Connect, oldLink) > 0 Then
tbl.Connect = Replace(tbl.Connect, oldLink, newLink)
tbl.RefreshLink
End If
Next
End Sub
Public Function ConnectTestDB()
ReplaceLink "Data.accdb", "Test.accdb"
End Function
Public Function ConnectLiveDB()
ReplaceLink "Test.accdb", "Data.accdb"
End Function
Public Function TestDBSwitch()
Dim tbl As TableDef, db As Database
Dim wasData As Boolean
Dim wasTest As Boolean
wasData = False
wasTest = False
Set db = CurrentDb
For Each tbl In db.TableDefs
If InStr(tbl.Connect, "JGFC Flooring Data") > 0 Then
wasData = True
ElseIf InStr(tbl.Connect, "JGFC Flooring Test") > 0 Then
wasTest = True
End If
Next
If wasData = True And wasTest = True Then
MsgBox "Data Mismatch. Both Test and Live Data are currently linked! Connecting all tables to Test database. To link to Live database, please run again.", , "Data Mismatch"
ConnectTestDB
ElseIf wasData = True Then
ConnectTestDB
MsgBox "You are now connected to the Test database.", , "Connection Changed"
ElseIf wasTest = True Then
ConnectLiveDB
MsgBox "You are now connected to the Live database.", , "Connection Changed"
End If
End Function
(前面的代码假设Test和Live Data文件都在同一个目录下,文件名以Test和Data结尾,但是可以很方便的修改成其他路径/文件名)
我从前端数据库中的一个按钮调用 TestSwitchDB,以在测试和生产环境之间快速切换。我的 Access DB 有用户控制在用户环境之间切换,所以当 admin 用户登录到前端 DB 时,我直接使用 ConnectTestDB 功能默认 admin 用户连接到测试 DB。我同样在其他用户登录前端时使用 ConnectLiveDB 功能。
TestSwitchDB 函数中还有一个快速错误检测功能,可以在调用 switch 函数之前告诉我是否存在与两个环境的混合连接。如果此错误反复出现,则可能是其他问题的征兆。