什么基于可空表单字段的访问查询条件将返回我需要的内容?
Posted
技术标签:
【中文标题】什么基于可空表单字段的访问查询条件将返回我需要的内容?【英文标题】:What Access query criteria based on nullable form field will return what I need? 【发布时间】:2012-03-20 15:17:01 【问题描述】:情况是这样的:
我正在尝试使用基于表单的条件构建查询。特定的表单域可以为空或具有特定值。如果表单字段为空,我需要返回所有记录。如果表单字段不为空,我只需要返回匹配的记录。但是,数据库中这个字段有Null值,我不希望字段不为空时返回,但我希望表单字段为空时返回。
我一直在尝试使用“[FormField] Or Like [FormField] Is Null”,它几乎可以工作,但是当表单字段不为空时,我也会得到所有空记录。
到目前为止,我的许多尝试都导致 Null 字段记录永远不会返回或“此表达式键入错误或太复杂”错误。
什么标准会得到这些结果?
谢谢
【问题讨论】:
太棒了!谢谢 【参考方案1】:怎么样:
SELECT Table1.ID, [AText] & "" AS ATextNotNull
FROM Table1
WHERE [AText] & "" Like [Forms]![Form1]![SomeText]
& IIf([Forms]![Form1]![SomeText] Is Null,"*","")
【讨论】:
【参考方案2】:定义一个表示“空”的特殊字段条目,如“-”、“_”、“null”、“empty”或“x”。空的表单字段表示“所有记录”。
另一种方法是使用三个单选按钮
(o) 所有记录 ( ) 具有空字段 xy 的记录 ( ) 包含以下内容的记录:[在此处搜索字段]优点是用户不需要学习特殊的约定。
然后您可以相应地定义您的查询,而不必在一个查询中混合不同的情况
Dim cond As String
Select Case option
Case 1
cond = ""
Case 2
cond = "field IS NULL"
Case 3
cond = "field Like '*" & Me!txtSearch & "*'"
End Select
【讨论】:
【参考方案3】:尝试使用IIF函数:
...WHERE [TableColumn] LIKE IIF([FormField] IS NULL, '*', [FormField])...
【讨论】:
这看起来很接近,并且在 FormField 不为空时有效。当它为空时,它只返回在该字段中有值的记录。我试着去IIF([FormField] IS NULL, [TableColumn] or IS NULL, [FormField])
,但现在当 FormField 为 Null 时,什么都没有返回。我只是使用查询设计视图,但是当我尝试 [TableColumn] or IS NULL
时,它正确返回了所有记录。
我编辑了我的答案。不幸的是,我手头没有访问权限来测试:(。以上是关于什么基于可空表单字段的访问查询条件将返回我需要的内容?的主要内容,如果未能解决你的问题,请参考以下文章