【发布时间】:2016-12-09 17:01:07
【问题描述】:
我在 Access 2010 过滤三个可能的表中符合条件的记录时遇到问题,所有这些表都由一个公共 FormulationID 链接。
一个简化的描述是
我有一个名为
tblFormulation的表,其中包含FormulationID键和描述创建者、一般特征、制定日期等的字段。我需要过滤其中一些字段。我将显示的大部分字段都在此表中。通过
FormulationID链接的是第二个表tblComponents,其中包括所有组件、它们的类型和卷。每个FormulationID有 4-7 个组件。我想按组件和/或类型选择FormulationsIDs。我只需要知道哪个FormulationIDs符合条件。我没有显示任何这些字段。同样通过 FormulationID 链接的是名为
tblApprovals的第三个表。让我们将其视为Authorites,他们为这些配方发布了不同的批准级别。同样,我想通过 Approvals 和/或Authorites选择FormulationsIDs。每个Forumulation可以有 1 到 30 个批准。我只需要知道哪个FormulationIDs符合条件。我没有显示任何这些字段。组件和批准的编辑在选择配方后调用的单独表格上进行。
我尝试了两种方法来生成配方列表和一般特征列表,其中包含具有某些选定批准的选定组件。
首先,我为每条腿创建了带有条件的查询。我们称他们为
qryComponents和qryApprovals。这些每个都会生成一个针对标准过滤的FormulationIDs列表。由于 'Ambiguous Outer Joins' 问题,Access 不允许我在最终查询中使用tblFormulation对这些进行联接,因此我最终使用tblFormulation创建了一个中间查询 qryStep2仅在qryApprovals中找到的记录。然后,我将其与qryComponents中的tblFormulation记录一起加入到最终查询qryFiltered中。 然后我使用qryFiltered作为frmFiltered的recordsournce,其中包括tblFormulations和qryComponents和qryApprovals中的标准组合框。 理论上这应该可行。实际上,它没有。我更改组合框并重新查询表单,但它不会重新查询底层的三个查询。我使用 VBA,但还没有弄清楚是否有办法重新查询基础查询,因此级联为我提供了最终所需的过滤公式列表。所以这个解决方案的问题是我怎样才能让frmFiltered.cboApprovals的 after_update 子例程强制执行四个请求 - 或者还有其他解决方案吗?在使用此解决方案失败后,我尝试了重型 VBA 方法。我创建了一个查询
qryEverything,其中包含所有表中的所有字段。这为我提供了每个配方批准的 FormulationID 记录以及每个组件的另一个组合记录。有很多记录。然后我使用组合框和我想要的字段的子表单设置frmFilter。组合框上的更新后事件触发对qryEverythingSQL 语句的 WHERE 子句的修改,我将其用于 subForm 的记录集。这可行,但我重复了 FormulationID,其中单个配方同时满足组件和批准腿的标准。我以为我可以在过滤之后使用SELECT UNIQUE on FormulationID,但它在WHERE子句之前,所以过滤不起作用。我真的需要能够在这个记录集上做第二个SELECT UNIQUE。我想我可以通过它并删除重复。听起来不对。
所以我被困住了。我会继续玩,但真的需要一些帮助。
【问题讨论】:
标签: database ms-access vba ms-access-2010