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 - 由表单上的组合框过滤的嵌入式查询的主要内容,如果未能解决你的问题,请参考以下文章