我的一个表单上有一个组合框,它返回一个数字,我在查询字段中使用此数字作为条件,但是如果组合框中没有选项,我想使用默认值一组标准,但访问一直告诉我,我的语法无效。有人能告诉我怎么做到这一点吗?
IIf(IsNull([Forms]![frm_a]![cmbo_b]),<2 or >3,[Forms]![frm_a]![cmbo_b])
当我在if语句的中间使用<2 or >3
时会出现问题。
答案 0 :(得分:1)
你的问题是两部分。首先,这是一个伪IIF语句,可以帮助您了解它们的工作原理:
IIF(IsNull(SomeFieldOrControl),ConditionIsTrueSoDoThis,ConditionIsFalseSoDoThis)
另一种解释这个问题的方法是使用这个例子,如果cmbo_b为null,我们将显示零长度字符串:
如果cbmo_b为null,则显示零长度字符串:
IIF(IsNull([Forms]![frm_a]![cmbo_b]),"",[Forms]![frm_a]![cmbo_b])
我认为您需要将IsNull函数切换为Nz(null为零)函数。
对于第二部分,在评估两部分条件时,您通常需要用括号括起来,就像这样。我真的不认为这会起作用,但如果你坚持试图同时评估两种不同的可能性,那么我唯一可以想到的就是尝试。如果条件评估为真,我将其设置为显示0。如果声明是真的,我真的不确定你要显示什么,因为你没有正确使用IIF功能。
IIF(Nz([Forms]![frm_a]![cmbo_b],0)(<2 or >3),0,[Forms]![frm_a]![cmbo_b])
我想知道为什么你不会只是检查条件= 3,因为这显然是你在一轮回合中评估的。如果条件被发现是真的,那么我仍然不确定,因为你的代码没有提供任何线索:
IIF(Nz([Forms]![frm_a]![cmbo_b],0)=3,0,[Forms]![frm_a]![cmbo_b])
最后一句话,这可能是个人偏好的问题,但我试图远离引用其他形式的控件,除非没有办法解决它。像这样的代码往往非常脆弱,因为重命名表单或控件,或者简单地使表单成为子表单都将导致代码失败和/或错误。这并不是说它完全不正确,只是我试图坚持使用易于阅读且尽可能易于维护的代码。
我经常做的是在表单或子表单上创建公共函数,然后使用如下语句调用它们:
Call Forms("frm_a").MyPublicFunctionName()
或
Call Me.Parent.MyPublicFunctionName() 'Call function on main form from subform
或
Call Me.subform1.Form.MyPublicFunctionName() 'Call function on subform
我认为这可能只是个人偏好的问题。诸如此类的公共函数很难调试,因为如果在MyPublicFunctionName中发生任何错误,您的代码将停在上面一行,并且您将不知道哪一行实际上导致了该问题。