子表单连接,主/子,引用表单控件或使用查询连接,哪个更可取

Posted

技术标签:

【中文标题】子表单连接,主/子,引用表单控件或使用查询连接,哪个更可取【英文标题】:Subform join, master/child, reference form control or use query join, which is preferable 【发布时间】:2013-09-06 15:54:57 【问题描述】:

我是一名高级用户,希望讨论以下连接子表单的方式的相对优点:

主表单有 3 个字段:ID、月份、年份(为本次讨论简化的名称)需要显示适当的子表单记录。这是预算范围,因此有 15 个子表单以不同方式显示财务数据。

主窗体仅限于一条记录。必须关闭才能打开另一条记录。

所以三个选项是:

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

    子表单查询引用表单控件(mainform!ID 等)作为条件。

    子表单查询有 1-1 个连接到每个条件上的主表单查询,总共三个连接。

请注意,网络上的数据传输是主要问题。

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

【问题讨论】:

【参考方案1】:

不清楚您是在谈论 15 个子表单同时显示在一个主表单上,还是一次仅显示一个子表单,因为它是从 15 个可能的列表中动态选择的。

如果你显示所有这些,那么它可能会很多,执行这 15 个查询并在表单打开时呈现它们肯定需要一段时间。

1。主/详细链接

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

2。子窗体中的父引用

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

3。联合查询

实际上,不完全确定您的意思。


一些cmets

由于您(正确地)关心性能,这里有一些对您的情况可能有帮助也可能没有帮助的提示:

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

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

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

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

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

【讨论】:

感谢您的指点,总是有帮助。我的印象是,只要索引正确(我相信它是正确的),使用哪种关联子表单的方法实际上并不重要。我曾搜索过有关一种方法或另一种方法的内在性能优势的任何内容,但均未成功。感谢您的宝贵时间。

以上是关于子表单连接,主/子,引用表单控件或使用查询连接,哪个更可取的主要内容,如果未能解决你的问题,请参考以下文章

相关查询和引用子表单控件

访问子窗体未绑定控件#Error

如何确定哪个子窗体有焦点

在展开父表单的第一行之前,无法引用 Access 子表单表单对象

访问查询以了解哪些子表单已完成或尚未完成

Access 2007 使用选项卡将多个子表单链接到主表单的最佳方式