获取错误3048:无法打开更多数据库

时间:2015-05-29 01:19:35

标签: access-vba

我最近拆分了我的数据库。我的表单是一个日历,其中Tab分别用于月视图,周视图和日视图,分别包含42,7和7个子表单。所有这些子表单都是未绑定的。选中某个标签后,该标签中的所有子表单都会被分配ControlSource,而所有其他子表单都会被清除ControlSource

月视图是唯一一个在加载23个子表单后获得Error 3048: Cannot open any more databases.的人(Tab之外有一些标签,列表和按钮,但我不认为它们很重要)

选择月视图选项卡时,会发生以下操作:

  1. 42x2数组中填充了Long日期信息
  2. 清除所有子表单SourceObject
  3. 对于所选标签中的所有子表单:分配其SourceObject,然后将一个函数(位于SUBform中)调用到Filter本身。在此函数中,调用另一个函数来根据某些条件计算子表单中的记录数。此处创建数据库和记录集,并在记录集为Closed之前多次传递。
  4. 子窗体包含多个文本框,其中一个文本框包含要为其着色的条件格式。它的记录来源是查询:

    SELECT tblTask.JobNum, tblJob.JobNum, tblTask.Sequence, tblJob.Closed, tblJob.Certified, tblEstimator.SortID, tblDivision.SortID, tblJob.EstimatorID, tblTask.DivisionID, tblJob.JobSite, tblJob.Customer, tblJob.Closed, tblTask.Item, tblTask.ItemDescription, tblTask.StartDate, tblTask.EndDate, tblTask.WeekendWork, tblEstimator.EstimatorNum & "-" & [FirstName] & " " & [LastName] & "\20" & Mid([tblJob].JobNum,3,2) & " JOBS\" AS JobMidFilePath
    FROM (tblEstimator RIGHT JOIN tblJob ON tblEstimator.ID = tblJob.EstimatorID) RIGHT JOIN (tblDivision RIGHT JOIN tblTask ON tblDivision.ID = tblTask.DivisionID) ON tblJob.JobNum = tblTask.JobNum
    WHERE (((tblJob.Closed)=False))
    ORDER BY tblTask.JobNum, tblTask.Sequence, tblTask.StartDate, tblDivision.SortID;
    

    现在使用此查询返回521条记录。

    我的表单是否应该无法处理所有这些?或者有没有办法提高表单的效率?我很遗憾应该对此做些什么,因为我需要加载所有42个子表单。

    如果您需要更多信息,请与我们联系。提前谢谢!

1 个答案:

答案 0 :(得分:3)

所以,好消息是您的问题月视图选项卡都是只读的。这样可以更轻松地实施我的建议:

  1. 尝试将RecordsetType设置为' Snapshot'在每个子表单的表单属性中。这是最简单的。如果这不起作用,请尝试:

  2. 使用ADO断开连接的记录集。请看这个参考:

  3. How To Create ADO Disconnected Recordsets in VBA/C++/Java

    基本上,你创建了这个断开连接的记录集,并将子表单的.RecordSet属性设置为它:

    Set mySubForm.Recordset = myDisconnectedRsObject
    

    由于这些定义不保持与后端的连接,因此您应该能够在不增加数据库数量的情况下创建任意数量的数据。

    一旦第一个工作正常,您将需要将42个子表单下的所有Access / Jet查询转换为断开连接的记录集。