2016-09-30 103 views
0

我有一个MS访问表单,其中包含用于运行查询的可选条件。用户将选择一个复选框并输入一个值,然后根据所选字段和输入运行查询。我特别针对一个字段的问题是表存储NULL值。用于查询的标准是这样的:使用OR运算符对于IIF语句中的空值

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

如果我在查询中使用此代码作为标准领域,只有当值形式,并选中该复选框工作。如果我将该代码用作表达式,则在复选框未选中时返回空值,但在选中复选框并输入值时返回所有记录。如果我使用Like "*" or Is Null作为标准,它将返回所有记录,为什么它不作为IIF声明的一部分工作?

+1

'[Field] Like“*”或[Field]是否与'TRUE'不同? – onedaywhen

+0

就像它说的那样,你的条件永远是真的(它有一个值,或者是null,不管它是真的) – CyberClaw

+0

它有点像过滤器,如果复选框是'TRUE'使用数据用户提交来指定结果返回,如果它的'FALSE'返回所有包含NULL值的值 –

回答

0

发现很难跟随(大量的测试数据和预期的结果总是受欢迎的),但我想是这样的:

标准逻辑重写规则

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) 

UPDATE

更多的东西一样:

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) 
+0

是的,这应该在理论上工作,但可悲的是它没有。也试过这种方式 下面是我想要实现的一个示例 如果用户在库中搜索图书,并且可以按名称和版本进行搜索。他们应该能够通过名称进行搜索,只留下版本复选框和字段空白,它应该返回所有的值,包括NULL,但是如果他们指定了版本,那么它应该只返回基于名称和版本的值 –

+0

使用复选框的目的是什么?如果您输入一个值,则将检索包含该值的所有记录。如果你没有输入一个值,所有的记录将被检索(包括那些具有NULL值的记录)...... – Rene

+0

@Rene虽然你是正确的,但复选框没有提供任何附加功能,原理是相同的即“如果复选框被选中”与“如果文本框为空”相同。这个问题确实是捕获所有值,包括NULL或输入的值。 –