【问题标题】:Query by Form for multiple fields in Access 2010在 Access 2010 中按表单查询多个字段
【发布时间】:2012-12-17 00:54:32
【问题描述】:

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

【问题讨论】:

  • 我不知道上述解决方案有什么问题,但我已经为它创建了一个解决方法。我正在为 where 子句中的每一列创建一个新列,并像这样定义它: new_column: [field] = [Forms]![Conditions]![text_on_form] 或 [Forms]![Conditions]![text_on_form] is null This似乎解决了这个问题,但我想知道为什么以前的方法不起作用。而且我还想知道如何使用第二种方法将表单中的复选框与表格中的是/否列进行比较。任何帮助表示赞赏

标签: ms-access ms-access-2007


【解决方案1】:

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

【讨论】:

  • 非常感谢您提供这些信息!我还有许多用于动态查询的文本框。我们如何使用VB将表单值和列值与文本框匹配?
  • 我不确定我是否理解您的问题。如果您准确描述您要完成的工作,这可能会有所帮助。您是否使用 Access 作为后端(Access 是否存储您的表)?您的表单是否绑定到表格?您将需要使用我提供的代码,但通常,将“me.combo1”替换为您的表单值,将“[Field1]”替换为您的列标题。
  • 我使用 Access 作为我的后端。它是一个平面表。我用来生成查询的表单未绑定到任何表。我正在尝试修改查询条件但有问题太多了。VB的问题是,我不懂VB。我很难弄清楚代码在做什么。我需要一个可以从invi文本框中以填充形式获取文本值的代码选择从下拉下降的值时。我也有是或否字段,我将通过表格作为复选框。无论如何,如果您能帮我编写这个动态查询的代码,我将不胜感激
  • 在上面的 VB 代码中,代码是如何知道只用 1=1 的形式检查空值的呢?而且我也不明白“我”这个概念。对不起,但我只是一个初学者。我想学习这一切
  • 您不需要动态 SQL,Access 会为您处理所有这些。请访问此帮助文章以开始使用:office.microsoft.com/en-gb/access-help/…
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多