MS Access中的内存超出错误

时间:2017-01-04 23:28:17

标签: ms-access

我有以下程序(我在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。

1 个答案:

答案 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

当然,如果您修改表架构,则必须像往常一样重新链接。