me.visible = false而不是关闭表格

时间:2010-11-01 21:29:23

标签: ms-access vba

在我的MS Access应用程序中,我有几种数据密集型的表单(基于更多表的几个子表单)。我的用户抱怨说,当通过网络打开数据时,加载时间是无法忍受的。

我使用优秀的autofe应用程序设置了前端/后端切口。

当用户点击“保存并关闭”按钮docmd.close时,我遇到问题的一个解决方案是me.visible = false而不是{{1}}。然后,用户在加载应用程序后第一次有很长的等待时间,但是对于以后的加载,性能会提高很多。

到目前为止,这一直运作良好。我只是担心这个策略中可能隐藏着一些我尚未遇到过的隐藏陷阱。

我的用户并不是过于聪明,而且我自己也没有使用该应用程序,因此如果某些内容表现不正常,我无法获得有意义的反馈。

其他人是否已成功使用此策略或知道不这样做的理由?

4 个答案:

答案 0 :(得分:4)

首先,我认为隐藏表格并不算太糟糕 我会更多地了解为什么你的加载时间如此之长。你提到了几个子表格。它们是否同时显示,还是在Tab控件的各个页面中? 在后一种情况下,您可以非常轻松地取消绑定不可见的子表单,并将它们绑定在PageClick事件上。这对性能产生了很大的影响 编辑:
此外,这个问题有点超出范围,但对每个性能问题都有好处:
-did你仔细检查相关表中的外键是否正确编入索引? - 确保后端定期压缩。

答案 1 :(得分:4)

其他人是否已成功使用此策略或知道不这样做的理由?

是的,该策略类似于第二版 Access Cookbook 中的配方#8.1 加速表单的加载时间。但是,该配方在数据库启动时使用WindowMode:= acHidden预加载一组表单。因此,权衡是数据库启动需要更长时间,但后续表单打开(对于预加载表单)相对较快。

对该配方的讨论没有提到该技术的任何缺点。在有限的使用中,我还没有发现任何。而且由于它似乎可以改善用户的体验,我会继续使用它。

除此之外,我会仔细研究表单从后端数据库中提取的数据量。限制作为主窗体和子窗体的记录源检索的行数。为用户提供选择不同记录或小记录集的方法。还要确保使用索引来支持Record Source WHERE和ORDER BY子句。避免使用强制全表扫描的函数的WHERE条件,以确定要从记录源中排除哪些行。类似的注意事项适用于使用保存的查询或SELECT语句作为记录源的组合框和列表框;如果你不能限制行,至少要确保优化数据检索。

答案 2 :(得分:1)

您是否确保在适当的时间范围内刷新数据?

答案 3 :(得分:1)

是的,我自己也用非常复杂的形式做同样的事情,它有大约10或15个标签,每个标签都有一个子表格。工作至少十年。您必须监视varous表单级别值或未绑定控件,您可以将其视为null或零。但是一旦它顺利运行它应该运行得很好。我们不得不在Access 97天回来了,因为在用户每天打开和关闭varous表单数千次后,Access会因内存不足错误而崩溃。