我有一个从单个表生成的查询。使用表单为我的查询设置标准我遇到了空值的问题。我将在下面简化我的问题。
表 [许可] 该表称为许可证。我想要过滤一个名为Status的字段。在“状态”字段中,有以下条目:空值,"已完成"和"取消。"基本上,空值表示许可状态是打开的。
在表单中: [FormQuery] 该表单称为FormQuery,并具有允许用户选择其查询条件的复选框。表单有四个复选框,其名称为:all,completed,open,cancellation。
在查询中过滤[Permits]![状态] 查询中有许多字段。带有critera的唯一字段是(Permits.Status)。输入以下条件:
In (IIf([Forms]![FormQuery]![Completed]=True,"COMPLETED",""),
IIf([Forms]![FormQuery]![Cancelled]=True,"Cancelled",""),
IIf([Forms]![FormQuery]![All]=True,[Permits]![Status],""))
据我了解,IN(...)
正在设置标准列表。标准取决于[Forms]![FormQuery]![Completed]=true
部分中的表单检查。如果选中该框,则传递一个字符串,否则为""空值。因此,当刚刚完成选中时,列表看起来像In (completed)
表单有效。当我完成"完成"复选框选中查询将调出所有已完成。它与取消和全部复选框的工作方式类似。一个问题是在最后一行找到的代码,尤其是部分[permits]![status]
,只会填充已填充的条目,并且错过了空值。
我如何搜索空值以及如何在所有查询中包含空值?
非常感谢任何帮助。
答案 0 :(得分:2)
请尝试使用通配符:
In (IIf([Forms]![FormQuery]![Completed]=True,"COMPLETED",""),
IIf([Forms]![FormQuery]![Cancelled]=True,"Cancelled",""),
IIf([Forms]![FormQuery]![All]=True,[Permits]![Status],"*"))
您可以对此进行测试...只需将其放入查询条件字段:
IIf(True,"*","")
使用False运行它而不是True ...实验。
我建议你改变你的方法。使用参数查询但避免使用IN()
语句。 http://accessmvp.com/thedbguy/articles/parameterquerybasics.html上的常规操作方法。
任何一个都是更典型的,我相信更容易出手和维护。