Microsoft Access。使用查询和空值

Microsoft Access。使用查询和空值

这似乎是一个简单的问题,但我搞不懂。我有一张包含多个字段的表。其中 3 个(SizeA、SizeB、SizeC)是数字,我有一个使用查询来查询表的表单。现在,Size A 始终不为空,但 SizeB 和 C 可以为空。这是我对 sizeA、B 和 C 使用的标准:

Like IIf([forms]![Search Fittings]![SizeA_Text]="0","*",[forms]![Search Fittings]![SizeA_Text])
Like IIf([forms]![Search Fittings]![SizeB_Text]="0","*",[forms]![Search Fittings]![SizeB_Text])
Like IIf([forms]![Search Fittings]![SizeC_Text]="0","*",[forms]![Search Fittings]![SizeC_Text])

如您所见,if 检查表单字段 Size*_Text 是否等于 0。问题是未设置 SizeB 或 SizeC(因此它们为空)的表条目不会显示在搜索中。解决方案可能如下所示:

Like IIf([forms]![Search Fittings]![SizeC_Text]="0",Like "*" Or Is Null,[forms]![Search Fittings]![SizeC_Text])

但它不起作用。您对我如何实现这个逻辑有什么建议吗?

谢谢你,吉多

答案1

将字段包装在nz函数中。

NZ如果第一个参数为空,则分配第二个参数。

nz("SuperUser","default") = "SuperUser"
nz(NULL,"default") = "default"

这会将你必须进行的测试改变为如下形式(对你需要进行的任何测试重复此操作):

Like IIf(nz([forms]![Search Fittings]![SizeB_Text],"")="0"
         ,"*"
         ,nz([forms]![Search Fittings]![SizeB_Text],"")
        )

答案2

您需要使用更复杂的标准,不可能在一个标准内完成iif()(您无法在like语句中测试表条目是否为空值)。

([...sizeC_text]="0" and isnull(<your field>)) or <your field> like iif([...sizeC_text]="0","*",[...sizeC_text])

还要注意,如果你在 VBA 中使用它,这个条件是正确的,如果你把它放在 SQL 表达式中,那么将isnull()函数替换为... Is Null

相关内容