子表单连接,主/子,引用表单控件或使用查询连接,这是首选

时间:2013-09-06 15:54:57

标签: ms-access

我是一位高级用户,正在寻找以下连接子表单方式的相对优点的讨论:

主窗体有3个字段:ID,月,年(本讨论简化的名称),需要显示相应的子窗体记录。这是预算,因此有15个子表单以不同的方式显示财务数据。

Mainform仅限一条记录。必须关闭以打开另一条记录。

所以这三个选项是:

  1. 使用master / child加入子表单到ID。子表单查询仍需要2个附加条件。这似乎是最糟糕的解决方案,因为主要形式只有一个记录。

  2. 子表单查询引用表单控件(mainform!ID,ect)作为条件。

  3. 子表单查询对每个条件的主表单查询都有1-1个连接,总共有三个连接。

  4. 请注意,通过网络传输数据是一个主要问题。

    谢谢大家,stackoverflow是网上最好的网站。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚你是否正在谈论15个子表格同时在主表单上显示,或者只是一次显示一个子表单,因为它是从15个可能的表单中动态选择的。

如果你展示了所有这些,那么它可能会相当多,而且当表单打开时,执行这15个查询并渲染它们肯定需要一段时间。

1。主/详细链接

您可以链接主表单/子表单上的多个字段,因此您不仅限于一个字段:

Main form / subform link

Main form / subform link editor

2。子表单中的父引用

并不总是优雅,但它们可以正常工作,因为您不会让用户更改主窗体的字段。如果是的话,可能会出现需要重新查询子表单以确保在更改后更新的情况。

3。加入了查询

实际上并不完全确定你的意思。


一些评论

由于您(正确地)关注性能,因此以下是一些可能对您的情况有所帮助的指针:

  • 考虑一下是否真的需要同时显示多个子表单 它们可以分成更小的组,而不是可以在标签控制页面中显示吗? 如果是这种情况,您可以在用户选择选项卡时轻松地按需加载它们。这样,您只在第一个选项卡上加载最重要的子表单,然后,如果用户需要更多信息,她可以单击另一个将加载更多数据的标签页。

  • Access总是非常努力地限制所提取的数据量,因此如果您定义了主/明细链接,或者您在子表单的Parent!ID子句中使用了WHERE条件,那么它们应该是只提取过滤后的数据,而不是所有内容 也就是说,确保在这些字段上设置了正确的索引,否则性能会非常糟糕,数据库引擎需要在过滤之前提取所有数据,而不是依赖索引来执行此操作。

  • 如果您怀疑Access正在提取所需的更多数据,您始终可以使用在加载主表单时动态设置的临时SQL构建子表单的查询。这将确保每个子表单都具有确切的查询需求。同样,索引对于良好的性能仍然一如既往地重要。

  • 如果您需要显示大量数据,并且每次打开主表单时都不需要计算该数据,则可以将数据缓存到本地表中。
    在查询中使用INSERT INTO语句将结果注入本地表,并仅使用该本地数据显示在子表单中。
    在您的主表单上,只需跟踪上次刷新数据的时间并在某处显示该日期和时间。您还可以添加一个按钮,以便他们可以再次手动刷新数据,或者只是在检测到数据过时时自动执行此操作。

总有很多策略可以改善Access的性能。当然,在尝试解决之前确保确实遇到问题,因为它需要更多时间和资源才能解决,而不仅仅是让Access为您完成工作。