我希望访问参数查询向用户询问一个值(在这种情况下为位置)。当我在“条件”字段中键入[Enter location]时,它可以正常工作:我得到一个对话框(输入参数值),其中包含一个文本框和我的文本(输入位置)。到目前为止,一切都很好。这有效(结果也)。

但是现在我希望用户可以使用下拉列表/组合框(而不是textbox)来选择位置。我做了一个表单,然后在“条件”字段中键入Forms![Form1]![CmbLocation]

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

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

我究竟做错了什么?有什么建议吗?

最佳答案

除了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事件。您还需要一个“取消”按钮,将表单的.Tag属性设置为“取消”,然后将表单的.Visible属性设置为False;这都是相对标准的Access中使用对话框表单的方法)。

然后,您将查询中的条件设为:

  Like ReturnMyCriterion()


也就是说,假设您要在组合框中没有选择任何值的情况下返回所有记录。

09-30 14:35
查看更多