Access 2013 - 由表单上的组合框过滤的嵌入式查询

Posted

技术标签:

【中文标题】Access 2013 - 由表单上的组合框过滤的嵌入式查询【英文标题】:Access 2013 - Embedded query filtered by combo box on form 【发布时间】:2015-09-01 21:22:47 【问题描述】:

我是 Access 新手,这是我遇到的问题:我有四个表 - Task、Person、Role 和 TaskPerson(映射表)。我有一个表单,顶部有一个未绑定的组合框,显示来自 Person 的人员列表。在表单的正文中,我有一个从嵌入为数据表的 Task 和 TaskPerson 表中提取的查询。 TaskPerson 中的字段对 Person 和 Role 执行查找以显示实际值。每个任务可以有多个人分配给它,每个人可以有多个角色。我希望从组合框中选择一个名称,并更新数据表以仅显示与该人关联的任务(即,将组合框中的名称与表单上的人员字段(这是一个查找)中的名称相匹配,并且只显示那些任务)。

我已尝试调整查询的记录源,以便人员字段条件将从组合框中使用

'Forms![Task Form]![Combo11]'

但这并没有奏效。我也试过这个answer的一个版本:

Private Sub Form_SelectionChange()

' If the combo box is cleared, clear the form filter.
  If Nz(Form) = "" Then
  Me.Form.Filter = ""
  Me.FilterOn = False

' If a combo box item is selected, filter for an exact match.
' Use the ListIndex property to check if the value is an item in the list.
  ElseIf Me.Combo11.ListIndex <> -1 Then
  Me.Form.Filter = "[Combo11] = '" & _
             Replace(Me.Combo11.Text, "'", "''") & "'"
  Me.FilterOn = True
  End If

End Sub

虽然代码没有犹豫,但它也没有从组合框中获取选定的名称,因此它不会更新。一个可能的因素是当我键入 Me.Combo11.Text 时,它实际上并没有将 Combo11 显示为选项。我试着输入它,希望能工作,但我知道这有点愚蠢。

任何详细的答案将不胜感激。我还在摸索中,我有点容易迷路。

史蒂夫。

【问题讨论】:

是的,我现在明白了。您对我如何使这项工作有建议吗?就此而言,是我将事件应用到的嵌入式查询上的一个事件,还是查询中的一个字段(即人员字段)或其他地方? 哇。我在解释自己方面一定做得很糟糕。简而言之:我想从组合框中选择一个名称,将该名称传递给查询,然后查询仅列出属于该名称的任务。我怎样才能做到这一点?我会提供您要求的任何详细信息。 组合框的记录源是什么?它有多少列?哪一列是绑定列?当您说您的第一次尝试“无效”时,这是什么意思?你得到了什么结果与你预期的结果?它产生错误了吗?您能否显示您的查询不起作用的 SQL,以及组合框的记录源的 SQL(如果可用)以及指明哪一列是绑定列? 【参考方案1】:

第一种方法比较简单。 在您的查询中

WHERE TaskPerson = Forms![Task Form]![Combo11]

请注意,组合引用周围有 no '。使用'Forms![Task Form]![Combo11]',整个事情都被解释为字符串,所以它不起作用。

那么在Combo11_AfterUpdate 你就拥有了

Me.Requery

这种方法的缺点:你总是要选择一个人,否则表格会是空的。


第二种方法:

您的查询列出了所有记录,组合框应用了过滤器。或者,如果用户清除组合框,则将其删除。

我建议回到你使用的answer,只用Combo11替换Combo_Reported_LOB_Selection[ReportedLOB][TaskPerson]

而且代码没有进入Form_SelectionChange(),而是进入Combo11_AfterUpdate()

【讨论】:

安德烈,我取得了一定的成功,我对此表示赞赏。我使用了第一个解决方案,确保不包含 ' 标记。但是,它仍然没有从组合框中获取文本。如果我只是在条件中输入一个人的姓名,它会过滤数据。但是,如果我输入 Forms![Task Form]![Combo11] 那么它不会。思考为什么? 那我们回到 Gene 的问题:你的组合框的记录来源是什么?它有多少列?哪一列是绑定列?并请显示作为表单记录源的查询的 SQL。 嗨安德烈和吉恩,我发现了这个问题。结果我需要将条件与 PersonId 匹配,因为这是用于查找并显示在表单上的内容。一旦我与之匹配,它就像一个魅力。谢谢大家的帮助!!

以上是关于Access 2013 - 由表单上的组合框过滤的嵌入式查询的主要内容,如果未能解决你的问题,请参考以下文章

使用宏过滤带有组合框的表单 - MS Access

从表单上的多个组合框控制 Access SQL 查询

如何过滤表单中具有多个组合框的 Access 子表单?

在 microsoft access 中使用组合框过滤表单结果

在 ms-Access 中使用组合框创建搜索表单

如何在 Access 中将一个控件源与来自用户表单的多个组合框一起使用?