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

Access 2013 - Embedded query filtered by combo box on form

我是 Access 的新手,这就是我遇到的问题:我有四个 tables - Task、Person、Role 和 TaskPerson(映射 table)。我有一个表单,顶部有一个未绑定的组合框,显示来自 Person 的人员列表。在表单的正文中,我有一个从作为数据表嵌入的 Task 和 TaskPerson tables 提取的查询。 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 显示为一个选项。我试着输入它,希望能奏效,但我知道这有点愚蠢。

任何详细答案将不胜感激。我还在学习我的方法,我有点容易迷路。

史蒂夫

第一种方法比较简单。
在查询中你有

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

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

那么在 Combo11_AfterUpdate 中你只需

Me.Requery

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


第二种方法:

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

我建议回到您使用的answer,只替换
Combo_Reported_LOB_Selection 来自 Combo11

[ReportedLOB] 来自 [TaskPerson]

并且代码不会进入 Form_SelectionChange(),而是进入 Combo11_AfterUpdate()