使用OR运算符的IIF查询不起作用

时间:2012-02-16 11:00:36

标签: ms-access ms-access-2003

我正在尝试在MS访问查询中运行以下条件作为条件。基本上我想做的是:

  • 如果checkbox = True,则显示所有记录,包括带有空白或空字段的记录(表单的组合框[combo9]中的默认值为“*”)
  • 如果checkbox = False,则只显示与Combo9中的值匹配的记录

我当前的表达式不会给出任何错误,但也不会产生任何结果!表达式的TRUE和FALSE部分可以自行处理,但在组合到iif表达式时不起作用。

Like IIf([Forms]![F_leg_reg]![Check25]=True,Like [Forms]![F_leg_reg]![Combo9] Or "" Or Is Null,Like [Forms]![F_leg_reg]![Combo9])

有人可以告诉我这里我做错了什么吗?提前谢谢。

3 个答案:

答案 0 :(得分:8)

不确定你需要这么多likes,你在返回值中使用or逻辑运算符是没有意义的

IIF (condition, value-if-true, value-if-false)

所以..

Like IIF ([forms]![foo].[text1] = "1" OR [forms]![foo].[text2] = "1", 'bar', 'foobar')

如果满足任一条件,IIF将返回'bar',否则它将返回'foobar'

如果你愿意,你可以嵌套它

Like IIF ([forms]![foo].[text1] = "1" OR [forms]![foo].[text2] = "1", 'bar', 
        IIF ([forms]![foo].[text1] = "2" AND [forms]![foo].[text2] = "2", 'foobar', null)
    )

如果满足任一条件,IIF将返回“bar”,否则我们会检查text1 text2是否为“2”,如果是,则返回'foobar'否则我们返回null

希望这会有所帮助

答案 1 :(得分:1)

你在IIf()表达式中重复关键字Like。那不行。你可以修复IIf(),但我会使用不同的方法......这样可以更好地适应我的大脑。

这将在选中复选框时返回所有行,但在未选中时不返回任何行。

SELECT a_field, another_field, field_2_search 
FROM YourTable
WHERE [Forms]![F_leg_reg]![Check25]=True;

取消选中该复选框后,将行限制为field_2_search值包含组合值的行。

SELECT a_field, another_field, field_2_search
FROM YourTable
WHERE
    [Forms]![F_leg_reg]![Check25]=False
    AND field_2_search Like "*" & [Forms]![F_leg_reg]![Combo9] & "*";

但是你只需要一个查询,而不是两个,所以将这些WHERE子句与OR结合起来。

SELECT a_field, another_field, field_2_search 
FROM YourTable
WHERE
    [Forms]![F_leg_reg]![Check25]=True
    OR (
    [Forms]![F_leg_reg]![Check25]=False
    AND field_2_search Like "*" & [Forms]![F_leg_reg]![Combo9] & "*"
    );

答案 2 :(得分:1)

我很晚才参加这个讨论,但是当我遇到同样的问题时,我发现了这篇文章。我已经解决了,想分享。

问题是你的Iif语句的位置。由于您使用的是Access,因此您可能将Iif语句放在查询设计视图的Criteria行中。删除它。相反,您需要在查询中将Iif语句设置为自己的字段。

您还需要非常小心使用Null和“*”的运算符。语法非常敏感。

在新查询字段中,输入:

IIf([Combo_Box] Is Null,[Field1] Is Null Or [Field1] Like "*",[Field1]=[Combo_Box])

然后将该字段的条件设置为<>假

SQL看起来像这样:

SELECT [Field1], [Field2], etc
FROM Table1
WHERE (IIf([Combo_Box] Is Null,[Field1] Is Null Or [Field1] Like "*",[Field1]=[Combo_Box])<>False);

希望这有帮助!很抱歉这么晚来参加聚会!。