微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ms-Access 不使用组合框显示值作为查找值

如何解决ms-Access 不使用组合框显示值作为查找值

注意 我大大编辑了我的原始帖子以包含更多相关信息并删除无关紧要的信息。一些评论是基于删除的信息,但原始问题的完整性仍然完好无损,评论仍然具有相关性和实用性。

在我的数据库中,我有一个tblStandards,其中包含一个复合名称及其相关字段的列表。 我创建了一个表单来生成一个子表单,该表单仅在您选择溶液混合物时填充化合物名称及其数据(我将这些称为“句柄”)。我使用这个子表格作为生成与该溶液混合物“处理”相关联的所有相应化合物的“位置查找器”的一种方式。问题是一些化合物用于多种不同的混合物,因此具有多个“句柄”。我已经包含了@June7 推荐的级联组合框,但我遇到了最后一个组合框过滤器的问题。

我不想将单独的字段附加到我的 tblStandards 和组合框显示值(“句柄”)只是为了过滤我的表格(这是我过去所做的)。在我的表格中使用组合框显示值字段可以工作,但它是有限的,我希望使其更加模块化。我有一个包含三个字段的第二个表 tblComboBox; [化合物名称]、[Standard_InternalStd] 和 [Cal_QC_Handle]。

我有级联组合框工作,除了最后一个过滤器。我想我找到了一种基于我的表格进行过滤的迂回方法。我正在使用带有 FilterOn 函数的 After_Update 事件来过滤 TempSubform,它根据将 [Cal_QC_Handle] 与 tblComboBox 匹配来过滤 cBoxSecondChoice,然后使用 {{ 1}} 字段作为我的 TempSubform![Compound Names] 的第二个 FilterOn 函数。 我的代码正在运行,但第二个 MainSubform 仅使用我的 FilterOn 中的第一个复合名称来过滤 TempSubform。我想根据 MainSubform 中的所有行进行过滤。我认为我的问题出在我的 Tempsubform.[Compound Name] 代码块中。

 " & Me.Temsubform![Compound Name] &"

问题是过滤器仅使用一个化合物名称(列表中的第一个)进行过滤。我需要过滤器来使用 all 来自新过滤的 TempSubform 的复合名称。如果这是一种非常复杂的方法,请道歉。到目前为止,我所看到的每个示例都将组合框值嵌入到它们正在过滤的表格中,这是我希望避免的。

更新

我已经放弃了我的第一次尝试(带有临时子表单的双 FilterOn 函数)并且我有一个工作表单!我不得不修改我的 Private Sub cBoxSecondChoice_AfterUpdate() Dim Filter_Tempsubform As String Filter_Tempsubform = "[Cal_QC_Handle] ='" & Me.cBoxSecondChoice & "'" Forms![Standards_Form]![TempSubform].Form.FilterOn = False Forms![Standards_Form]![TempSubform].Form.Filter = Filter_Tempsubform Forms![Standards_Form]![TempSubform].Form.FilterOn = True Dim Filter_MainSubform As String Filter_MainSubform = "[Compound Name] = '" & Me.TempSubform![Compound Name] & "'" Forms![Standards_Form]![MainSubform].Form.FilterOn = False Forms![Standards_Form]![MainSubform].Form.Filter = Filter_MainSubform Forms![Standards_Form]![MainSubform].Form.FilterOn = True End Sub 以包含一个新字段,该字段包含来自我最终组合框选择的值(由于我认为这种设计的局限性,我最初想规避它)。我表上的新 tblStandards 字段是一个带有多个单个“句柄”的字符串,如果最终组合框选择(只能选择一个“句柄”)在使用通配符“Like *”的子表单中,我会使用它.这些“句柄”中的每一个都对应于一个溶液混合物,它是一个特定的化合物列表。

解决方案允许我使用一种化合物来制作多种不同的解决方案,如果您从下拉组合框中选择这些解决方案中的任何一种来制作,该化合物将被返回。我认为这是解决我的问题的最简单的解决方案,我可能太固执地寻找一个过于复杂的解决方案。

修改Allen Browne's ms-Access "Filter a Form on a Field in a Subform" 中的代码

Relationships (All)

Form with cascading comboboxes and filter button

Working code

解决方法

正如@June7 所说,级联组合框(或列表框)是数据表多级过滤的标准 UI 设计。如果我有可用的表单空间,我更喜欢级联列表框而不是组合框,因为它们提供了视觉提示。例如,看看如何Digi-Key does it。级联组合框的问题已被质疑至死here。过滤数据、列表或组合的框通常未绑定,并且不应同时用于更新数据。它们的唯一目的是显示项目选择、选择一个项目并将其值传递给下一个过滤器。

我在下面链接到一些教程,这些教程几乎不需要 VBA 代码。第三个教程过滤“植物和动物,按分类等级分类”,这与过滤化合物的情况类似。第四个是我之前对类似问题的回答之一。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。