0

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

4

2 回答 2

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 语句。避免使用不可见的文本框来存储数据,这通常意味着你做错了什么并且会得到不同的结果(这个论坛上的其他人可以比我更好地解释为什么会这样)。

于 2013-01-02T21:18:55.503 回答
-1

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

于 2014-12-06T21:52:46.863 回答