【问题标题】:Access query to include all values, including Null访问查询以包含所有值,包括 Null
【发布时间】:2014-11-14 11:21:04
【问题描述】:

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

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

在表单中: [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)

表格有效。当我选中“已完成”复选框时,查询将显示所有已完成。它与 cancelled 和 all 复选框的工作方式类似。一个问题是在最后一行找到的代码,尤其是[permits]![status] 部分仅显示了已填充的条目并且缺少空值。

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

任何帮助将不胜感激。

【问题讨论】:

  • 感谢您的参考。我觉得我所做的基本上是进行参数查询并将输入限制为在表单上找到的内容。我这样想对吗?另外,如果我输入代码:
  • 如果我尝试: IIf([Forms]![FormQuery]![Open]=True,Is Null,"") 我得到:这个表达式输入错误,或者它太复杂以至于无法被评估。例如,一个数值表达式可能包含太多复杂的元素。尝试通过将表达式的一部分分配给变量来简化表达式。删除所有条件并重新开始时,我可以输入条件 Is Null 并获取所有空值

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


【解决方案1】:

尝试使用通配符:

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

任何一个都比较典型,我相信更容易排除故障和维护。

【讨论】:

  • 再次感谢您的支持。我已经尝试过假和真,我用过“*”,Like *,Is Null,Null,“”并没有找到成功。正如您所建议的那样,我也刚刚使用了没有 In 的基本 IIF 代码,但仍然无法在复选框返回真值的情况下出现空值。我想我可以做一个参数查询并告诉人们开放许可输入“Is Null”它看起来或功能就像一个表单一样好。
  • 如何在参数查询中搜索空值?如果您在对话框中键入 Is Null,则查询不会返回任何记录。 'Is Null'这个短语是否被转换为字符串并且不允许作为命令操作?
  • 是的,我明白了。这就是空值的方式。因此,在查询中创建一个字段:Status_filter: IIf(IsNull([Status]),"open",[Status])。运行你的过滤器。
  • 非常感谢!!我没有意识到您可以将函数放在字段单元中。你的建议很有魅力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 2013-08-29
  • 1970-01-01
相关资源
最近更新 更多