我最近拆分了我的数据库。我的表单是一个带有 Tab
的日历,用于月 View 、周 View 和日 View ,分别具有 42、7 和 7 个子表单。所有这些子表单都是未绑定(bind)的。选择一个选项卡后,该选项卡中的所有子窗体都被分配一个 ControlSource
,而所有其他子窗体的 ControlSource
都被清除。
月 View 是唯一出现 错误 3048:无法打开更多数据库。
加载 23 个子表单后(Tab 外有一些标签、列表和按钮
,但我认为它们并不重要)。
选择“月 View ”选项卡时,会发生以下操作:
- 一个 42x2 数组填充了
Long
日期信息 - 所有子表单都清除了它的
SourceObject
- 对于所选选项卡中的所有子表单:分配其
SourceObject
,然后调用一个函数(位于子表单中)来Filter
本身。在这个函数中,调用了另一个函数来根据某些条件统计子表单中的记录数。数据库和记录集在此处创建,并在记录集关闭
之前通过几次。
子表单包含多个文本框,其中一个包含用于为其着色的条件格式。它的记录源是查询:
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 个子表单。
如果您需要更多信息,请告诉我。提前致谢!
最佳答案
所以,好消息是您的问题月 View 选项卡都是只读的。这将使我的建议更容易实现:
尝试在每个子表单的表单属性中将 RecordsetType 设置为“快照”。这是最简单的。如果这不起作用,请尝试:
使用 ADO 断开连接的记录集。看这个引用:
How To Create ADO Disconnected Recordsets in VBA/C++/Java
基本上,您创建这个断开连接的记录集,并将子表单的 .RecordSet 属性设置为它:
Set mySubForm.Recordset = myDisconnectedRsObject
由于这些根据定义不维护与后端的连接,因此您应该能够在不增加数据库数量的情况下创建任意数量的连接。
一旦您使第一个工作正常,您将需要将 42 个子表单下的所有 Access/Jet 查询转换为断开连接的记录集。
关于vba - 获取错误 3048 : Cannot open any more databases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519628/