按表单查询Access 2010中的多个字段

时间:2013-01-02 16:42:55

标签: ms-access ms-access-2007

我想创建一个通过表单获取字段参数的查询。为此,我创建了一个带有组合框和下拉选项的表单以从中选择值,这将在相应的不可见文本字段中填充文本值,其默认值我已设置为null。现在在我的查询中,我给列的条件为iif(isNull([Forms]![Conditions]![text_on_form]),[column_in_table],[Forms]![Conditions]![text_on_form])。我已经为where子句来自表单的所有列完成了这个。我试过这个。结果似乎是随机的。它适用于三列,但是当我玩它时,它给了我空的结果集。谁能告诉我我做错了什么?或者,如果有更好的方法在Access中按表单实现查询。

2 个答案:

答案 0 :(得分:0)

听起来您正在尝试创建动态SQL。这是我通常喜欢的vba中的方法:

Dim SQL As String

SQL = "SELECT tblName.* From tblName WHERE (1=1)"

If Not IsNull(Me.combo1) Then
    SQL = SQL & " And ([Field1] Like ""*" & Me.combo1 & "*"")" ' I am using like statements here, but that is because this is a search tool.
End If

If Not IsNull(Me.combo2) Then
    SQL = SQL & " And ([Feild2] Like ""*" & Me.combo2 & "*"")"
End If

Docmd.RunSQL SQL

End Sub

基本上,只有在用户将值放入文本框/组合框或其他任何内容时才添加到SQL语句。 “Where(1 = 1)”是指所有字段为空的情况。

使用此概念来创建SQL语句。避免使用隐形文本框来存储数据,这通常意味着你做错了什么并且会得到混合结果(这个论坛上的其他人可以比我更好地解释为什么会这样)。

答案 1 :(得分:-1)

只需使用Like运算符即可。将它放在查询Like "\*" & Forms![Form_Name]![Form_Field] & "\*"中的条件字段中 - 如果该字段为空(或为空)并且匹配字段中的任何内容,则会告诉它获取任何内容。这可能不是你想要的。应该注意的是,它将返回带有文本字符串的任何内容。例如:如果你键入“the”,它将返回系绳,这些,这些,温度计(任何带有“the”字样的东西。它最适合多字或更长的字符串,可以更准确地匹配,但它适用于一个搜索查询,因为通常有一组人眼寻找结果,错误的结果不是一个大问题。