【问题标题】:Using OR Operator For Null Values in IIF Statement在 IIF 语句中对空值使用 OR 运算符
【发布时间】:2017-02-09 03:45:36
【问题描述】:

我有一个 MS 访问表单,其中包含用于运行查询的可选条件。用户将选择一个复选框并输入一个值,然后根据所选字段和输入运行查询。我对一个字段的问题特别是表存储了 NULL 值。查询条件如下所示:

 IIf([Checkbox]=-1,[Data in Form],([Field]Like "*" Or [Field]Is Null))

如果我将此代码用作查询中字段的条件,则它仅在表单中有值并且选中复选框时才有效。如果我将代码用作表达式,它会在未选中复选框时返回 NULL 值,但在选中复选框并输入值时返回所有记录。如果我使用Like "*" or Is Null 作为标准,它会返回所有记录,那么为什么它不能作为 IIF 语句的一部分呢?

【问题讨论】:

  • [Field] Like "*" Or [Field] Is NullTRUE 有何不同?
  • 就像它说的那样,你的条件总是为真(它要么有一个值,要么为空,无论哪种方式都是真的)
  • 它有点像过滤器,如果复选框为'TRUE',则使用用户提交的数据指定返回的结果,如果它的'FALSE'返回所有包含NULL值的值
  • @Cyber​​Claw 不确定我是否遵循,条件是复选框,其值可以是 -1 'TRUE' 或 0 'FALSE'
  • 重点是,表达式 [Field]Like "*" Or [Field]Is Null 没有做任何事情,因为它应该返回所有内容(它总是正确的)。应该有一种更简单的方法来检索所有记录,例如使用 * 或者将其留空。由于 IIf 可以以多种方式和位置使用,因此很难准确理解它在何处输入该表达式。此外,复选框是布尔值,因此使用 [Checkbox] = True 可能更具可读性,或者只是 [Checkbox]

标签: ms-access checkbox null iif


【解决方案1】:

发现很难遵循(大量测试数据和预期结果总是受欢迎的)但我在想这样的事情:

标准逻辑重写规则

IF A THEN B

等价于

( NOT A OR B )

所以你的搜索条件可能是这样的:

WHERE ( checkbox1 = FALSE OR field1 = input1 OR field1 IS NULL )
  AND ( checkbox2 = FALSE OR field2 = input2 OR field2 IS NULL )
  AND ( checkbox3 = FALSE OR field3 = input3 OR field3 IS NULL )

更新

有点像:

WHERE NameColumn = NameInput
      AND ( SearchEditioncheckbox = FALSE 
            OR EditionColumn = EditionInput 
            OR EditionColumn IS NULL )

进一步更新

可能是:

WHERE NameColumn = NameInput
      AND ( SearchEditioncheckbox = FALSE 
            OR EditionColumn = EditionInput )

或者可能:

WHERE NameColumn = NameInput
      AND ( SearchEditioncheckbox = FALSE 
            OR EditionColumn = EditionInput 
            OR ( EditionColumn IS NULL AND EditionInput IS NULL )

【讨论】:

  • 是的,这在理论上应该有效,但遗憾的是它没有。也尝试过这是我正在尝试完成的示例如果用户正在图书馆中搜索一本书并且他们可以按名称和版本进行搜索。他们应该能够按名称进行搜索,仅将版本复选框和字段留空,这应该返回所有值,包括 NULL,但是如果他们指定版本,那么它应该只返回基于名称和版本的值
  • 使用复选框的目的是什么?如果您输入一个值,将检索包含该值的所有记录。如果不输入值,将检索所有记录(包括具有 NULL 值的记录)......
  • @Rene 虽然在复选框不提供任何附加功能的意义上是正确的,但原理是相同的,即“如果选中复选框”与“如果文本框为空”相同。问题实际上是捕获所有值,包括 NULL 或输入的值。
  • @onedaywhen 您的解决方案的唯一问题是即使指定了版本也会返回 NULL 值
  • @TT CAM,所以如果复选框不提供任何额外的功能,那就放弃它们。并使用Like "*" or Is Null 作为标准。
猜你喜欢
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
  • 2015-06-27
  • 1970-01-01
相关资源
最近更新 更多