我正在尝试在MS访问查询中运行以下条件作为条件。基本上我想做的是:
我当前的表达式不会给出任何错误,但也不会产生任何结果!表达式的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])
有人可以告诉我这里我做错了什么吗?提前谢谢。
答案 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);
希望这有帮助!很抱歉这么晚来参加聚会!。