MS Access 是不是使对象保持打开状态?

Posted

技术标签:

【中文标题】MS Access 是不是使对象保持打开状态?【英文标题】:Does MS Access leave objects open?MS Access 是否使对象保持打开状态? 【发布时间】:2011-12-05 16:56:30 【问题描述】:

我试图弄清楚当我构建和运行报告时 MS Access 如何处理打开的数据库对象。

我在每个报告中都有几十个查询,并且由于我的数据库是标准化的,每个查询都在查看许多不同的表。但是,我似乎总是达到打开这么多数据库对象的地步,Access 不会让我在报告中包含更多查询。我对如何生成报告的想法可能很幼稚,但我只是假设 Access 会运行查询,将数据放入报告中,关闭查询和所有关联对象,然后重复。但这似乎并非如此。

我关心的唯一原因是因为我想加快我的报告速度。我在某处读到,您不应该构建表格以使查询变得容易,但为了避免每次尝试运行报告时都会出现 7 或 8 分钟的空白,我重新构建了表格,因此查询在生成数据时可以使用更少的对象。这些表格在一定程度上仍然是标准化的,但我想唯一的缺点是我在技术上将计算存储在表格中。例如,我必须报告我们客户群的当前年龄,而不是使用简单的 switch 语句(这需要我查询保存生日的单独表)将它们分组,而是将年龄范围(18-22 、23-27 等)直接在表格中。

无论如何,如果有人能告诉我访问是如何关闭数据库对象的,也许我可以查明为什么我的报告如此缓慢。

谢谢

【问题讨论】:

当您说 Access 不会让您在报告中包含更多查询时,您指的是报告本身的 RecordSource 吗?平均而言,您将多少查询绑定到给定报告? 谷歌“JETSHOWPLAN”。查看 Jet/ACE 生成的准查询计划可能有助于为您解开谜团。它在识别应该被索引的字段时特别有用。 不是记录源本身,而是通过子报告。合并后,子报告使用了大约 80 个查询(如果算上子查询,大约是 110 个) “每个报告中有几十个查询”?能给个样品吗?由于 Access 存在,我正在构建 Access(一些复杂的)应用程序,并且从不需要它。 您说您的表格已标准化。那你怎么能把客户的年龄放在一张桌子上???根据定义,这违反了规范化的基本规则。 【参考方案1】:

假设您确实有(正确的)规范化表,并且这些表确实不可能减少,并且您确实需要在主报表中附加所有这些子报表,您应该创建临时表以设置为报表的数据源。这会有点无聊,但您可以创建一个执行查询并生成一个或多个临时表的步骤。当这些表格是使用您希望在报告中过滤的数据创建的时,您应该比以前更快地打开报告。在报告展示/打印之后,您应该删除临时表或保留它们,直到您需要这些特定数据,例如缓冲区。

否则,如果可能的话,我建议您考虑数据库的整体设计。

【讨论】:

以上是关于MS Access 是不是使对象保持打开状态?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access:打开2016 Excel和getObject

此文件对象是不是保持打开状态?

如何连接到数据库 MS Access?

JNI 通过多个 JNI 调用使 C++ 中的对象保持活动状态

VBA 列出 MS Access 中所有打开的对象

MS Access VBA从Web浏览器控件的内容中获取数据