我想要一个Access参数查询来询问用户一个值(在这种情况下是一个位置)。当我在Criteria字段中键入[Enter location]
时,它可以正常工作:我得到一个带有文本框和文本(输入位置)的对话框(输入参数值)。到现在为止还挺好。这有效(结果也是如此)。
但现在我想要一个下拉/组合框(而不是文本框)供用户选择一个位置。我制作了一个表单并在Criteria字段中输入Forms![Form1]![CmbLocation]
。
像这样:http://office.microsoft.com/en-us/access/HA011170771033.aspx
但我仍然得到一个文本框(引用为textlabel)。
我做错了什么?有人有什么建议吗?
答案 0 :(得分:3)
除了Albert的建议之外,您可能希望在查询本身内完成此工作,以便它是“可引导的”。要做到这一点,您必须编写函数,返回在窗体上的组合框中选择的值。它会是这样的:
Public Function ReturnMyCriterion() As Variant
DoCmd.OpenForm "dlgGetCriterion", , , , , acDialog
With Forms!dlgGetCriterion
If .Tag <> "Cancel" Then
ReturnMyCriterion = Nz(!cmbMyCombo, "*")
End If
Else
ReturnMyCriterion = "*"
End With
Close acForm, "dlgGetCriterion"
End Function
(当使用acDialog开关打开表单时,只要表单打开或可见,代码就会暂停;要从组合框中取出值,您必须将表单的.Visible属性设置为False。您可以在组合框的AfterUpdate事件或OK按钮中执行此操作。您还需要一个取消按钮,将表单的.Tag属性设置为“取消”,然后将表单的.Visible属性设置为False;这是全部在Access中使用对话框表格的相对标准方法。
然后,您可以在查询中设置标准:
Like ReturnMyCriterion()
也就是说,如果在组合框中没有选择任何值,则假设您想要返回所有记录。
答案 1 :(得分:2)
如果从查询中删除参数,然后在上面的表单中重新输入exprsison到查询构建器中,那么它应该可以工作。
因此,在查询构建器中,在条件部分中输入
[forms]![form1]![Combo4]
确保您拥有组合框的正确表单名称和控件名称。
您不需要在查询构建器中输入任何其他内容。作为有意配置的,删除先前在查询构建器中提供的旧参数提示。
现在,打开表单,选择组合框,现在尝试打开查询,它应该在没有任何提示的情况下打开。请注意,此方法意味着必须打开表单,并且在尝试启动查询之前,将为组合框选择一个值。因此,如果您基于此查询生成报告,则按下按钮以在与组合框相同的表单上启动报告。这可以确保在您尝试启动基于该查询的查询或报表之前打开表单