我是一位高级用户,正在寻找以下连接子表单方式的相对优点的讨论:
主窗体有3个字段:ID,月,年(本讨论简化的名称),需要显示相应的子窗体记录。这是预算,因此有15个子表单以不同的方式显示财务数据。
Mainform仅限一条记录。必须关闭以打开另一条记录。
所以这三个选项是:
使用master / child加入子表单到ID。子表单查询仍需要2个附加条件。这似乎是最糟糕的解决方案,因为主要形式只有一个记录。
子表单查询引用表单控件(mainform!ID,ect)作为条件。
子表单查询对每个条件的主表单查询都有1-1个连接,总共有三个连接。
请注意,通过网络传输数据是一个主要问题。
谢谢大家,stackoverflow是网上最好的网站。
答案 0 :(得分:0)
目前尚不清楚你是否正在谈论15个子表格同时在主表单上显示,或者只是一次显示一个子表单,因为它是从15个可能的表单中动态选择的。
如果你展示了所有这些,那么它可能会相当多,而且当表单打开时,执行这15个查询并渲染它们肯定需要一段时间。
您可以链接主表单/子表单上的多个字段,因此您不仅限于一个字段:
并不总是优雅,但它们可以正常工作,因为您不会让用户更改主窗体的字段。如果是的话,可能会出现需要重新查询子表单以确保在更改后更新的情况。
实际上并不完全确定你的意思。
由于您(正确地)关注性能,因此以下是一些可能对您的情况有所帮助的指针:
考虑一下是否真的需要同时显示多个子表单 它们可以分成更小的组,而不是可以在标签控制页面中显示吗? 如果是这种情况,您可以在用户选择选项卡时轻松地按需加载它们。这样,您只在第一个选项卡上加载最重要的子表单,然后,如果用户需要更多信息,她可以单击另一个将加载更多数据的标签页。
Access总是非常努力地限制所提取的数据量,因此如果您定义了主/明细链接,或者您在子表单的Parent!ID
子句中使用了WHERE
条件,那么它们应该是只提取过滤后的数据,而不是所有内容
也就是说,确保在这些字段上设置了正确的索引,否则性能会非常糟糕,数据库引擎需要在过滤之前提取所有数据,而不是依赖索引来执行此操作。
如果您怀疑Access正在提取所需的更多数据,您始终可以使用在加载主表单时动态设置的临时SQL构建子表单的查询。这将确保每个子表单都具有确切的查询需求。同样,索引对于良好的性能仍然一如既往地重要。
如果您需要显示大量数据,并且每次打开主表单时都不需要计算该数据,则可以将数据缓存到本地表中。
在查询中使用INSERT INTO
语句将结果注入本地表,并仅使用该本地数据显示在子表单中。
在您的主表单上,只需跟踪上次刷新数据的时间并在某处显示该日期和时间。您还可以添加一个按钮,以便他们可以再次手动刷新数据,或者只是在检测到数据过时时自动执行此操作。
总有很多策略可以改善Access的性能。当然,在尝试解决之前确保确实遇到问题,因为它需要更多时间和资源才能解决,而不仅仅是让Access为您完成工作。