2014-09-19 87 views
1

我有一个从单个表中生成的查询。使用表单来为我的查询设置标准我遇到了空值问题。我会在下面简化我的问题。访问查询以包含所有值,包括空值

[许可证] 的表称为许可证。有一个字段我想过滤,称为状态。在“状态”字段中,有以下条目:空值,“已完成”和“已取消”。本质上,空值表示许可证状态已打开。

在表单中: [FormQuery] 该表单称为FormQuery,并具有允许用户为其查询选择条件的复选框。该表格有四个复选框,名称分别为:全部,已完成,已打开,已取消。

查询中:通过[Permits]过滤![Status] 查询中有许多字段。与性判据的唯一字段是输入(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

感谢您的参考。我觉得我所做的实质上是参数查询并将输入限制在表单上找到的内容。我是否正确地认为? 此外,如果我输入代码: – Dre 2014-09-19 21:12:52

+0

另外,如果我尝试: IIf([Forms]![FormQuery]![打开] =真,为空,“”) 我得到了:这个表达式输入错误,或者它太复杂,无法评估。例如,数字表达式可能包含太多复杂的元素。尝试通过将部分表达式分配给变量来简化表达式。 当删除所有条件并开始新鲜时,我可以输入条件为空并获取所有空值 – Dre 2014-09-19 21:20:16

回答

2

尝试使用通配符代替:

In (IIf([Forms]![FormQuery]![Completed]=True,"COMPLETED",""), 
    IIf([Forms]![FormQuery]![Cancelled]=True,"Cancelled",""), 
    IIf([Forms]![FormQuery]![All]=True,[Permits]![Status],"*")) 

您可以测试这个...只是把这个在您的查询条件字段:

IIf(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

任何一个更典型,我相信更容易麻烦拍摄和维护。

+0

再次感谢您坚持使用我。我尝试过使用false和true,我使用了“*”,如*,Null,Null,“”,但没有找到成功。我也玩过一个没有In的基本IIF代码,就像你所建议的那样,但是在复选框返回一个真实值的情况下仍然不会出现空值。 我想我可以做一个参数查询,并告诉人们打开许可证来输入“是空的”它只是看起来或像窗体一样好用。 – Dre 2014-09-19 21:41:34

+0

一个人如何去查找参数查询中的空值?如果您在对话框中输入Is Null,查询将不返回任何记录。是否将'Null'这个短语变成了一个字符串,并且不允许作为一个命令来操作? – Dre 2014-09-19 21:46:16

+0

是的,我明白了。这是空值的方式。因此,在查询中创建一个字段:'Status_filter:IIf(IsNull([Status]),“open”,[Status])'。就此运行你的过滤器。 – Smandoli 2014-09-19 22:52:28