我想创建一个查询,它通过一个表单获取字段参数。为此,我创建了一个带有组合框的表单并通过下拉选项来选择值,这将在默认值已设置为空的各个不可见文本字段中填充文本值。现在在我的查询中,我将列的条件定义为iif(isNull([Forms]![Conditions]![text_on_form]),[column_in_table],[Forms]![Conditions]![text_on_form])。我已经完成了where子句来自表单的所有列。我试着运行这个。结果似乎是随机的。它适用于三列,但是当我玩弄它时,它给了我空白的结果集。谁能告诉我我做错了什么?或者如果有更好的方法来在Access中通过表单实现查询。通过形式查询Access 2010中的多个字段
回答
这听起来像你正在尝试创建动态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]”。 – JBL
我使用Access作为我的后端。它是一个平坦的表格。我用来生成查询的表单并未绑定到任何表格。我试图修改查询条件,但问题太多了。问题与VB是,我不明白VB.I我很难找出代码在做什么。我需要一个代码,可以从invi文本框中获取文本值,其形式可以在选择下拉列表中的值时填充。我也有或没有字段,我通过表单作为复选框。无论如何,如果你能帮我编写这个动态查询,我会很感激 –
只需使用Like运算符即可。把它放在查询中的条件字段Like "\*" & Forms![Form_Name]![Form_Field] & "\*"
- 这告诉它如果该字段为空(或空)并且与该字段中的任何内容匹配,就会得到任何内容。这可能不是你想要的。应该指出的是,它将返回任何与其中的文本字符串。例如:如果你输入“the”,它会返回系绳,这些,theses,温度计(任何带有“the”字样的东西。它适用于多字或更长的字符串,可以更准确地匹配,但它适用于一个搜索查询,因为通常有一组人眼寻找结果和错误的结果不是一个大问题。
- 1. Access 2010中的查询通过表单
- 2. ms access 2010每种形式的多个查询
- 3. 通过ms access中的唯一字段过滤查询结果2010
- 4. 如何通过中间到多个字段查询字段?
- 5. 通过SQL查询计算MS Access中的空白字段
- 6. 无法查询Access 2010中的nVarChar(Max)字段
- 7. Microsoft Access查询太多字段
- 8. 查询在Access 2010
- 9. Access中的SQL查询更新多个字段
- 10. Access 2010中查询混乱
- 11. 查询在MS-Access 2010中
- 12. ACCESS 2010 SQL--在SELECT TOP子查询字段中使用WHERE IN
- 13. Access 2010 - 如何通过自动更改条件进行多个查询
- 14. MS Access查询:一个特定字段的多个源表
- 15. Access 2010 VBA将查询中的一个字段置于变量中
- 16. 通过MongoDB中的_id字段查询
- 17. Sharepoint 2010查询字段ID格式
- 18. 查询字段在Access中的SQL
- 19. 在Access 2010中追加查询中使用多个参数
- 20. Access 2010中的交叉表查询表达 - 在一个查询
- 21. MS Access SQL查询不同的返回多个字段
- 22. 多个字段,通过Lambda表达式
- 23. 当查询表有多个匹配项时,通过连接2个表中的字段来更新MS Access
- 24. 高效查询的Django的多对多额外字段通过
- 25. TFS 2010查询 - 比较两个字段
- 26. Microsoft Access 2010 - 通过基于查询的报告中的计算字段进行筛选
- 27. 使用表单在Access 2010中创建多个字段
- 28. Access 2010表单查询
- 29. Access 2010查询数加倍
- 30. MS Access 2010 vba查询
我不知道上述解决方案有什么问题,但我已经为它创建了一个解决方法。为where子句中的每一列创建一个新列,并将其定义为: new_column:[field] = [Forms]![Conditions]![text_on_form] or [Forms]![Conditions]![text_on_form] is null 这似乎解决了这个问题,但我想知道为什么以前的方法无法正常工作,而且我想知道如何将表单中的复选框与使用第二种方法的表中是/否列。任何帮助表示赞赏 –