MS Access 2016 VBA 在组合查询条件中为空
Posted
技术标签:
【中文标题】MS Access 2016 VBA 在组合查询条件中为空【英文标题】:MS Access 2016 VBA Is Null in combined Query Criteria 【发布时间】:2016-08-10 08:06:52 【问题描述】:给定一个带有在访问中使用文本框的条件的查询。它工作正常。
Like IIf(IsNull([forms]![f_form]![txt_box]),"*",[forms]![f_form]![txt_box])
当单元格有值时,上述条件可以正常工作。但是,我搜索的表格中的很多单元格都是空的。
我最好的和合乎逻辑的镜头是:
Like IIf(IsNull([forms]![f_form]![txt_box]),"*",[forms]![f_form]![txt_box])
OR Like IIf(IsNull([forms]![f_form]![txt_box]),Is Null,[forms]![f_form]![txt_box])
但是,这不起作用。
如果我只使用“Or Is Null”,那么即使我进行特定搜索,它也会返回单元格为空的所有记录。
有什么建议吗?
BR,埃米尔。
编辑:目前的解决方案是在所有空单元格中放入“-”,但是当用户将单元格留空(Null)时,该记录将永远不会出现在过滤器(查询)中。因此,我不喜欢这种解决方案。
【问题讨论】:
How to filter by what the user enters in a textbox, except show all if it's empty的可能重复 嗨@Andre,这不是重复的,我已经研究过这个问题。问题是记录为空时,而不是文本框为空时。你有什么建议吗? 顺便说一句,当我使用您刚刚发送的建议时,搜索将带有星号 * 。用户希望搜索 330 只能找到 330,而不是 3300、3301 等。如果我执行您所指的 * & textbox & *,就会发生这种情况。 星号 * 是可以在查询中省略的详细信息。但是你不想要同样的东西吗? 1.如果搜索文本框为空,则返回所有记录。 2. 如果没有,是否进行搜索?然后你可以使用相同的概念。 【参考方案1】:我的意思是这个标准:
[Forms]![f_form]![txt_box] OR ([Forms]![f_form]![txt_box] Is Null)
或者如果您也想支持通配符搜索(毕竟):
LIKE [Forms]![f_form]![txt_box] OR ([Forms]![f_form]![txt_box] Is Null)
【讨论】:
据我所知,这在 IIF 内不起作用! 你不需要IIf
,也不需要Like
。这将按搜索文本框(如果不为空)过滤或返回所有记录。
是的,你是对的。那是有效的。非常感谢!
不,我高兴得太快了。例如,当我搜索 33* 时,它只返回 #Name?在所有细胞中.. 为什么会这样?
查看编辑...我以为您只需要精确搜索。【参考方案2】:
我建议使用 NZ 而不是 IIF 和 IsNull 组合,
SearchField Like Nz([forms]![f_form]![txt_box],'*')
您是否认为 txt_Box 可以有零长度字符串而不是 Null 或者其中任何一个都可能存在?如果是这样,您可以尝试关注
SearchField like iif([forms]![f_form]![txt_box]='','',nz([forms]![f_form]![txt_box],'')
【讨论】:
以上是关于MS Access 2016 VBA 在组合查询条件中为空的主要内容,如果未能解决你的问题,请参考以下文章