繁体   English   中英

在 IIF(IsError()) 的错误条件下访问更新字段到 NULL 值

[英]Access updating field to NULL value on error condition of IIF(IsError())

我正在尝试使用以下查询更新 MS Access 中的表:

UPDATE [Stock Detail Item] 
SET [Stock Detail Item].Total_Payments =
IIF(
  IsError(DSum("Payment_Amount", "Principal Payments", "Stock_No='" & [Stock Detail Item].Stock_No & "'")),
  CCur(0),
  DSum("Payment_Amount", "Principal Payments", "Stock_No='" & [Stock Detail Item].Stock_No & "'")
);

Principal Payments表中有Stock_No的付款时,查询正确地将总付款金额插入到表中。

但是当Principal Payments表中没有付款时, IsError function 应该返回True ,这意味着IIF应该返回0转换为货币。

问题是,查询在这些实例中插入NULL 这会导致稍后尝试对NULL值执行数学运算时出错。

我已经尝试过,无论是否将00.00转换为货币数据类型,都没有运气。

知道为什么在不存在错误时返回正确值,而在出现错误时返回NULL值吗?

你state:

但是当 Principal Payments 表中没有付款时, IsError function 应该返回True

但是,根据文档,当没有记录与给定条件匹配或域(表/查询)不包含记录时, DSum function 将返回Null ,而不是错误:

如果没有记录满足条件参数或域不包含记录,则DSum function 返回Null

因此,我建议将您的代码更改为以下内容:

update [Stock Detail Item] 
set [Stock Detail Item].Total_Payments = 
Nz(DSum("Payment_Amount", "Principal Payments", "Stock_No='" & [Stock Detail Item].Stock_No & "'"),0)

此语句使用Nz function,如果第一个参数是Null ,它将返回第二个提供的参数(在上面的代码中为0 ),否则返回第一个参数( DSum的结果)。

或者,您可以使用IsNull function 代替IsError

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM