我有以下程序(我在MS Access模块中)定期运行以将链接表连接字符串从Test切换到Production,反之亦然:
Public Function TableRelink()
Dim db As Database
Dim strConnect As String
Dim rs As Recordset
Dim tdf As TableDef
strConnect = "ODBC;DRIVER=SQL Server;SERVER=MYTESTSERVER;Trusted_Connection=Yes;APP=Microsoft Office 2013;DATABASE=MyDB;"
'strConnect = "ODBC;DRIVER=SQL Server;SERVER=MYLIVESERVER;Trusted_Connection=Yes;APP=Microsoft Office 2013;DATABASE=MyDB;"
CurrentDb.TableDefs.Refresh
For Each tdf In CurrentDb.TableDefs
If tdf.Connect <> "" Then
tdf.Connect = strConnect
tdf.RefreshLink
End If
Next
MsgBox ("Done!")
End Function
上述工作已持续数月和数月。大约一周前,随机弹出以下错误。然后,几分钟后,我没有任何干预,这将允许我再次运行程序。今天,错误又回来了。
运行时错误'3035':超出系统资源。
这一行被抛出:tdf.RefreshLink
我进行了谷歌搜索,发现有一篇文章谈论了一个修补程序(不会安装在我的机器上),还有一篇关于编辑注册表值的文章(似乎没有修复它)。当我输入这个时,错误已经停止弹出,我可以再次重新链接我的表,所以在这一点上,我真的不能再做更多的故障排除了。我正在阅读另一篇关于锁定文件的SO帖子,但无法真正对接受的答案做出正面或反面,我并不确定它与我的特定场景有什么关系。有谁知道可能导致这种情况的原因和/或可以做些什么来阻止它?
作为参考,我在Win10 64位计算机上运行Office 365 ProPlus。
答案 0 :(得分:0)
首先,请使用您的db对象:
Public Function TableRelink()
Dim db As Database
Dim strConnect As String
Dim rs As Recordset
Dim tdf As TableDef
strConnect = "ODBC;DRIVER=SQL Server;SERVER=MYTESTSERVER;Trusted_Connection=Yes;APP=Microsoft Office 2013;DATABASE=MyDB;"
'strConnect = "ODBC;DRIVER=SQL Server;SERVER=MYLIVESERVER;Trusted_Connection=Yes;APP=Microsoft Office 2013;DATABASE=MyDB;"
Set db = CurrentDb
db.TableDefs.Refresh
For Each tdf In db.TableDefs
If tdf.Connect <> "" Then
tdf.Connect = strConnect
tdf.RefreshLink
End If
Next
MsgBox ("Done!")
Set td = Nothing
Set db = Nothing
End Function
然而,另一种更快的方法是将两组表永久链接,然后重命名它们以切换数据库。
例如,要从Production切换到Test:
Table1 -> Table1_p
Table2 -> Table2_p
...
Table1_t -> Table1
Table2_t -> Table2
当然,如果您修改表架构,则必须像往常一样重新链接。