【问题标题】:Setting a Criteria to either value or to Null将条件设置为值或 Null
【发布时间】:2018-10-01 19:21:49
【问题描述】:

我有一个访问数据库,其中有一个显示质量评估的表格。我希望用户能够单击一个复选框(flgFailed),它只会向他们显示失败的 QA。失败的字段名是 MovedToResolution,它是一个复选框,0 是失败。如果未选中此项,我希望他们查看所有 QA,无论其失败状态如何。我基于网络搜索尝试了如下 IIF 语句...

IIf([Forms]![MainMenu]![ManagersMenu].[Form]![flgFailed]=0,[MovedToResolution] Is Null,[MovedToResolution]=False) 

...在字段名称中,在此表达式的条件中具有 False。

但是当我运行查询时,无论是否检查了 flgFailed,我都没有得到任何记录。当我在没有这个表达式的情况下运行查询时,它运行良好。我还尝试用 -1/0 替换 True/False 的值,但没有运气。任何帮助,将不胜感激。

【问题讨论】:

  • Yes/No 字段永远不会为 Null。它们是 -1 或 0。因此,如果您想要所有记录,需要删除条件或尝试使用 * 通配符 LIKE。我从不使用动态参数化查询。查看allenbrowne.com/NoYesNo.htmlallenbrowne.com/ser-62.html
  • 对不起,我希望查询条件为空,而不是复选框字段。我正在尝试获取一个查询,我有时可以限制为只是失败的响应。当我想查看真假记录时,我需要查询中的条件为空。
  • 运算符(=、LIKE、Is Null 等)不能是动态的。您的 IIf 条件正在尝试更改运算符。 Olivier 的回答看起来很有希望。

标签: ms-access


【解决方案1】:

假设ManagersMenu 是一个子窗体控件并且表达式[Forms]![MainMenu]![ManagersMenu].[Form]![flgFailed] 确实返回了所需的值,我会将条件表达式更改为

Not [Forms]![MainMenu]![ManagersMenu].[Form]![flgFailed] Or [MovedToResolution] = 0

但在条件表达式中MovedToResolution 指的是表列而不是CheckBox,因此是测试0 还是False 取决于列的类型。如果它被声明为整数,那么0 可以;但是,如果它是 Yes/No 列,则使用

Not [Forms]![MainMenu]![ManagersMenu].[Form]![flgFailed] Or Not [MovedToResolution]

布尔表达式应与AndOr 结合使用。 IIf是根据布尔表达式返回其他类型的值。

【讨论】:

  • Flag failed 可以是两个值之一。如果我只想将其限制为失败,则为 -1,否则为 0。 MovedtoResolution 还引用本身引用表列的查询列。我想更改标准而不是表中字段的值。
  • 这不会改变任何值,它是一个标准。正确的语法取决于列的数据类型。
  • 好的,我正在尝试理解这一点,因为这是标准表达式,所以第二个短语(它是一个是/否复选框)是说移动到分辨率可以是:不是值表单控件的值或不是 MovedToResolution 记录的值?
  • 这意味着要么flgFailed没有被检查要么MovedToResolution不是True或者-1(取决于表列的数据类型)。
猜你喜欢
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
相关资源
最近更新 更多