Access 2007参数查询中的下拉列表

时间:2010-05-19 10:27:42

标签: ms-access ms-access-2007

我想要一个Access参数查询来询问用户一个值(在这种情况下是一个位置)。当我在Criteria字段中键入[Enter location]时,它可以正常工作:我得到一个带有文本框和文本(输入位置)的对话框(输入参数值)。到现在为止还挺好。这有效(结果也是如此)。

但现在我想要一个下拉/组合框(而不是文本框)供用户选择一个位置。我制作了一个表单并在Criteria字段中输入Forms![Form1]![CmbLocation]

像这样:http://office.microsoft.com/en-us/access/HA011170771033.aspx

但我仍然得到一个文本框(引用为textlabel)。

我做错了什么?有人有什么建议吗?

2 个答案:

答案 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]

确保您拥有组合框的正确表单名称和控件名称。

您不需要在查询构建器中输入任何其他内容。作为有意配置的,删除先前在查询构建器中提供的旧参数提示。

现在,打开表单,选择组合框,现在尝试打开查询,它应该在没有任何提示的情况下打开。请注意,此方法意味着必须打开表单,并且在尝试启动查询之前,将为组合框选择一个值。因此,如果您基于此查询生成报告,则按下按钮以在与组合框相同的表单上启动报告。这可以确保在您尝试启动基于该查询的查询或报表之前打开表单