微软访问:"Cannot open any more databases."

MS Access: "Cannot open any more databases."

Access 错误“无法再打开任何数据库。”已在 Bytes.com 上的 Whosebug[1, 2, , 4]. There's also an interesting discussion of the error 上多次讨论,其中 Allen Brown 和 David Fenton 权衡了什么可以导致错误并争论其背后的限制是关于连接还是 table 句柄。据我所知,这些地方的原因或解决方案中的 None 个适用于我的情况。

我有一个运行良好的复杂数据库,但随后开始抛出此错误。我已将 VBA 代码和数据结构归结为以下骨架:

Option Explicit

Public Function TestFunction(ID_test_1 As Integer, nID_test_2 As Integer) As Variant

Dim oCurDb_Ftn As DAO.Database, oTestData As DAO.Recordset, sSQL As String, vTestCode As Variant

Set oCurDb_Ftn = CurrentDb()
sSQL = "SELECT * FROM t_test_2 WHERE ID_test_2 = " & nID_test_2 & ";"
Set oTestData = oCurDb_Ftn.OpenRecordset(sSQL)
vTestCode = oTestData![bValue]

oTestData.Close
Set oTestData = Nothing
Set oCurDb_Ftn = Nothing

TestFunction = vTestCode

End Function    ' TestFunction

table中的数字是任意的。字段 ID_test_n 是主键。上面的代码就是TestModule的全部内容。查询 TestQuery 是:

SELECT t_test_1.ID_test_1, TestFunction(ID_test_1,3) AS [Test code]
FROM t_test_1;

打开查询后,乍一看似乎没问题。但是如果我向下滚动它,它会抛出“无法再打开”错误:

我发现了一种可以消除错误的方法。如果我删除函数的第一个参数 TestFunction(),那么它的定义就变成了:

Public Function TestFunction(nID_test_2 As Integer) As Variant
...

查询中对它的调用变成了:

TestFunction(3)

然后我可以多次上下滚动查询 sheet 而不会出错。这些更改是可能的,因为在函数的基本代码中,没有对 ID_test_1 的引用。但在实际数据库中,该参数的传递是有原因的,省略它不是一种选择。尽管如此,如果没有传递该参数,导致错误的任何原因都不会发生,这对我来说仍然很神秘。

谁能看到这里发生了什么,为什么我会收到这个错误,以及如何在不从函数中排除参数的情况下修复它?

环境:Windows10 Pro 64 位,Access 2019。

这可能是由于 2022 年 1 月 26 日左右的 Office 更新中的错误所致。参见Reddit post

尝试系统还原来回滚更新;或者...

进入“访问”、“文件选项”、“信任中心”并添加本地前端目录,然后选中复选框以将后端数据位置添加为受信任位置。