ms-access - 如何获取数据库记录集/引用的计数(以调试ERR#3048-无法打开更多数据库)?

标签 ms-access vba

我开始收到错误3048-无法打开更多数据库。
我似乎通过实现单个静态数据库变量来驯服它
David Fenton's example here之后的“dbLocal()”函数中。

我仍然想监视数据库引用的数量,以了解我在Access中接近2048个限制的程度。我尝试使用.Recordsets.Count,但它始终返回零。如何确定Access内部使用的引用/记录集计数?

我尝试查看的一个地方是“dbLocal()”函数。在这里简化到小于光秃的最小值(在我的代码中,我使用Fenton的完整示例),我正在尝试这样做:

Public Function dbLocal() As DAO.Database

    Static dbCurrent As DAO.Database

    If dbCurrent Is Nothing Then
        Set dbCurrent = CurrentDb()
    End If
    Set CurDb = dbCurrent
    Debug.Print dbCurrent.Recordsets.Count

End Function

但它始终打印零。即使它工作了,但这也不是我真正想要的,因为(如果我理解正确的话)Access会维护自己的会计,包括由于查询,组合框等引起的引用,而我的静态变量只会“知道”由于使用此dbLocal()函数显式指定了VBA语句而导致引用。

有没有办法窥视Access的内部记帐,以了解我将要用尽2048个最大值的可能性有多大?

如果有问题的话:Windows XP Pro SP3;访问2010 32位版本14.0.6024.1000 SP1 MSO 14.0.6112.5000。

最佳答案

一种方法是一直打开记录集,直到出现错误为止:

Function TablesAvailable() As Integer
Dim i As Integer, rs As DAO.Recordset, rsColl As Collection

    On Error GoTo Err_TablesAvailable

    Set rsColl = New Collection
    Do While i < 4096
        i = i + 1
        Set rs = CurrentDb.OpenRecordset("SELECT 1")
        rsColl.Add rs
    Loop

Exit_TablesAvailable:
    For Each rs In rsColl
        rs.Close
        Set rs = Nothing
    Next rs
    Exit Function
Err_TablesAvailable:
    Select Case Err.Number
    Case 3048 'Cannot open any more databases.
        TablesAvailable = i
    Case Else
        MsgBox Err.Number & ": " & Err.Description
    End Select
    Resume Exit_TablesAvailable
End Function

关于ms-access - 如何获取数据库记录集/引用的计数(以调试ERR#3048-无法打开更多数据库)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8297764/

相关文章:

ms-access - 在VBA中打开特定页码的PDF

ms-access - ms access 水平多级导航栏或菜单

vba - 执行查询 DoCmd.RunSQL 时出现错误 3340 查询 ' ' 已损坏

json - curl URL 并在 Excel 单元格中发布结果?

vba - 将导致错误的对象返回给全局错误处理程序

excel - 在电子表格中提取准确的单词

ms-access - 检查 Access 表单字段是否为 Null,如果不是 Null,则调用添加功能

java - 无需 IDE 的 ucanaccess jdbc 连接

vba - 从列中的单元格中删除多余的空格

vba - Excel VBA - 将用户窗体组合框的值分配给全局变量