查询中的#Error字段

时间:2014-08-21 13:17:03

标签: ms-access ms-access-2007

我正在计算从支票中扣除的税款以及净付款。

在表单上输入了4个税率,我使用这些百分比乘以总额(支付或奖励)。当我尝试单独使用税额时,我会在运行查询时在字段中收到#Error。

公式如下:

FICATax: Format(IIf([MCR_EarningsCode]='LTF',
[MCR_AwardGross]*[Forms]![AstProfileFrm]![FicaTaxTxt],
[MCR_PytAmt]*[Forms]![AstProfileFrm]![FicaTaxTxt]),"Currency")

LocalTax: Format(IIf([MCR_EarningsCode]='LTF',
[MCR_AwardGross]*[Forms]![AstProfileFrm]![LocalTaxTxt],
[MCR_PytAmt]*[Forms]![AstProfileFrm]![LocalTaxTxt]),"Currency")

现在,当我尝试在我的网络支付计算中使用这两个字段时,我会收到#Error。

净支付公式:

NetPayment: Format(Round(IIf([MCR_EarningsCode]='LTF',
[FICATax]+[LocalTax], <-- Error 
[MCR_PytAmt]-[FederalTax]-[StateTax]-[FICATax]-[LocalTax]),2),"Currency") <-- This works

示例数据:

+---------------+--------------+------------+------------+----------+---------+----------+
| MCR_AwardGross| EarningsCode | MCR_PytAmt | FederalTax | StateTax | FICATax | LocalTax |
+---------------+--------------+------------+------------+----------+---------+----------+
|#1) $34,000    |      LTF     |            |            |          | $340.00 |  $340.00 |
+---------------+--------------+------------+------------+----------+---------+----------+
|#2)            |      LTR     | $11,500.00 | $2,875.01  | $402.50  | $115.00 |  $115.00 |
+---------------+--------------+------------+------------+----------+---------+----------+
|#3)            |      LTR     | $8,341.60  | $2,085.40  | $291.96  | $83.42  |  $83.42  |
+---------------+--------------+------------+------------+----------+---------+----------+

净付款的结果将是:

  1. #Error =&gt; [FICATax]+[LocalTax]
  2. $ 2,992.55 =&gt; [MCR_PytAmt]-[FederalTax]-[StateTax]-[FICATax]-[LocalTax]
  3. $ 5,797.40 =&gt; [MCR_PytAmt]-[FederalTax]-[StateTax]-[FICATax]-[LocalTax]
  4. 就个人而言,我不知道Null值是如何出现问题的,因为在任何计算中都不会有Null值。在运行时处理这些字段是否存在问题?

    注意:我通过在计算前添加0来实现它。

    0-[FICATax]-[LocalTax] ..但是,我很好奇为什么它不会添加这两个'字段?'

1 个答案:

答案 0 :(得分:2)

我怀疑问题源于Format()函数将数字转换为字符串这一事实。在某些情况下,如果我们尝试使用它们执行数学运算,Access会自动将字符串转换回数字。但是,在您看似失败的更复杂的情况下。添加“0-”前缀可以作为结果应为数字的提示。

另一种可能的解决方法是将字符串(由Format()生成)显式转换回CCur()的货币值。但是,您可能还会重新考虑是否确实要格式化这些值,尤其是在后续计算中使用它们时。我总是建议在查询中将数字保存为数字(和日期作为日期)。如果您需要特殊格式,则可以始终在演示文稿级别应用它,例如,在报告上的文本框控件的.Format属性中。