【发布时间】:2014-05-29 17:37:00
【问题描述】:
我在 2010 Access 中创建了一个嵌套 iif 语句,并且大部分情况下它都有效。但是有一次无法正确填充:
SELECT
IIf([qryMARate]![Commissionable],
IIf([qryMARate]![Year]="2013",
IIf([Forms]![frmMARate]![chkTrueUp],
[qryMARate]![AGENTInitial],
[qryMARate]![AGENTRenewal]),
IIf([Forms]![frmMARate]![chkTrueUp],
IIf([qryMARate]![ProRated],
[qryMARate]![AGENTInitial]*([Forms]![frmMARate]![cboMonth]/12),
[qryMARate]![AGENTInitial]), <--- This line will not populate
[qryMARate]![AGENTRenewal]*([Forms]![frmMARate]![cboMonth]/12))),
Null)
AS AGENTRate FROM qryMARate;
此语句的目标是确定是否应该有佣金金额,然后正常显示佣金或根据赚取佣金的月份按比例分配佣金。
声明中的其他所有内容都按预期执行,但只有一行。放在该行中的内容并不重要,它不会填充。
有史以来最简单的答案,IIf 语句未将 Y 和 N 识别为可能的 T/F 响应,将按比例分配的 IIF 语句更新为:
IIf([qryMARate]![ProRated] = "Yes",
【问题讨论】:
-
您的意思是无论数据是什么,它总是执行 [qryMARate]![AGENTInitial]*([Forms]![frmMARate]![cboMonth]/12) 行而不是 [qryMARate]! [代理人首字母]? [qryMARate]![ProRated] 字段的数据类型是什么?
-
@Swagata [qryMARate]![ProRated] 是一个带有 Y 或 N 的文本字段。是的,如果语句进入 ProRated 检查它只输出 [qryMARate]![AGENTInitial]* ([Forms]![frmMARate]![cboMonth]/12) 而不是 [qryMARate]![AGENTInitial]。
-
这就是问题所在。你知道 Y 是yes 而 N 是 No 但对于系统来说它只是一个值 Y/N 的文本字段。要使其正常工作,您需要将 [qryMARate]![ProRated] 的数据类型更改为 Yes/No 字段或使用检查 =“Y”。请参阅下面的更新查询。
-
啊...刚刚注意到您已经弄清楚并更新了您的问题:)
标签: ms-access-2010 iif