0

我的一个表单上有一个组合框,它返回一个数字,我使用这个数字作为查询中字段的条件,但是如果组合框中没有选择任何选项,我想使用一组默认条件,但访问一直告诉我我的语法无效。有人能告诉我我该怎么做吗?

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

当我<2 or >3在 if 语句中间使用时会出现问题。

4

1 回答 1

1

你的问题是两部分。首先,这是一个伪 IIF 语句,可帮助您了解它们的工作原理:

IIF(IsNull(SomeFieldOrControl),ConditionIsTrueSoDoThis,ConditionIsFalseSoDoThis)

解释这一点的另一种方法是使用此示例,如果 cmbo_b 为空,我们将显示一个零长度字符串:

如果 cbmo_b 为空,这将显示一个零长度字符串:

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 内部发生任何错误,您的代码将停止在上面的行,您将不知道是哪一行实际导致了问题。

于 2012-04-16T02:48:50.607 回答