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 在组合查询条件中为空的主要内容,如果未能解决你的问题,请参考以下文章

MS Access:组合框列顺序问题

如何更新 ms access vba 中的多值组合框?

可以通过 VBA 更改 MS Access 子表单字段吗?

如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?

如何在 MS Access 2010 中组合多种查询类型?

VBA 代码中的 MS Access SQL 查询