2012-04-16 27 views
0

我在其中一个窗体上有一个组合框,它返回一个数字,我将这个数字用作查询中某个字段的条件,但是如果没有选项在组合框中已被选中我想使用的标准默认设置,但访问总是告诉我,我有无效的语法。有人能告诉我我该如何做到这一点?如何在访问查询中使用“iif”中的不等式

IIf(IsNull([Forms]![frm_a]![cmbo_b]),<2 or >3,[Forms]![frm_a]![cmbo_b])

的问题,当我在if语句中使用<2 or >3发生。

+0

你引用的默认标准是什么? – 2012-04-16 09:15:13

回答

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(零到零)功能。

对于第二部分,当涉及到评估你通常需要用括号,这样的事情围绕着它由两个部分组成的条件。我真的不认为这会工作,但它是我能想到的,如果你坚持尝试一次评估两种不同的可能性尝试的唯一的事情。如果条件评估为真,我已经设置为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内发生任何错误,您的代码将停止在上面的行,并且您将不知道哪一行实际上导致了问题。