访问查询以包括所有值,包括Null

时间:2014-09-19 19:29:27

标签: sql forms vba null ms-access-2010

我有一个从单个表生成的查询。使用表单为我的查询设置标准我遇到了空值的问题。我将在下面简化我的问题。

[许可] 该表称为许可证。我想要过滤一个名为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],只会填充已填充的条目,并且错过了空值。

我如何搜索空值以及如何在所有查询中包含空值?

非常感谢任何帮助。

1 个答案:

答案 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上的常规操作方法。

或者,使用VBA。 http://answers.microsoft.com/en-us/office/forum/office_2007-access/checkbox-filter-form-for-query/ab65c120-6356-e011-8dfc-68b599b31bf5

上的常规操作方法

任何一个都是更典型的,我相信更容易出手和维护。