Ms access 子窗体联接、主/子窗体、引用窗体控件或使用查询联接,哪一种更好

Ms access 子窗体联接、主/子窗体、引用窗体控件或使用查询联接,哪一种更好,ms-access,Ms Access,我是一名高级用户,希望讨论以下连接子窗体的方法的相对优点: 主窗体有3个字段:ID、month、year(为本次讨论简化了名称),显示相应的子窗体记录时需要这些字段。这是预算,因此有15个子表单以不同的方式显示财务数据 Mainform仅限于一个记录。必须关闭才能打开另一条记录 因此,有三种选择: 使用主/子ID加入子窗体。子窗体查询仍需要2个附加条件。这似乎是最糟糕的解决方案,因为主窗体只有一个记录 子表单查询引用表单控件(mainform!ID,etc)作为条件 子窗体查询在每个条件上与ma

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

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

Mainform仅限于一个记录。必须关闭才能打开另一条记录

因此,有三种选择:

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

  • 子表单查询引用表单控件(mainform!ID,etc)作为条件

  • 子窗体查询在每个条件上与mainform查询有1-1个联接,总共有三个联接

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


    感谢各位,stackoverflow是网络上最好的站点。

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

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

    1.主/详细链接 您可以链接主窗体/子窗体上的多个字段,因此不限于单个字段:

    2.子窗体中的父引用 并不总是优雅的,但它们工作得很好,因为您不允许用户更改主窗体的字段。如果是,可能在某些情况下需要重新查询子窗体,以确保它们在更改后更新

    3.联接查询 不完全确定你的实际意思


    一些评论 由于您(正确地)关注性能,这里有一些对您的情况可能有帮助,也可能没有帮助的建议:

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

    • Access总是非常努力地限制获取的数据量,因此如果您定义了主/详细链接,或者如果您是用户
      Parent!ID
      条件在子表单的
      WHERE
      子句中,它们应该只提取过滤后的数据,而不是所有数据。
      这就是说,请确保在这些字段上设置了适当的索引,否则性能会非常差,数据库引擎需要先提取所有数据,然后才能对其进行过滤,而不是依赖索引进行过滤

    • 如果怀疑Access正在提取所需的更多数据,则始终可以使用在加载主窗体时动态设置的即席SQL来构造子窗体的查询。这将确保每个子窗体都具有所需的精确查询。同样,对于良好的性能,索引仍然和以往一样重要

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


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

    谢谢您的指点,总是很有帮助的。我给人的印象是,只要索引正确(我相信是正确的),使用哪种方法关联子表单并不重要。我搜索了一种或另一种方法的内在性能优势,但没有成功。谢谢你抽出时间。