2012-04-16 52 views
2

代码第一臭名昭著的“空的无效使用”:在VBA查询

bncSql = "UPDATE mrTool " & _ 
     " SET mrTool.Action = 'Y', mrTool.TQA = FALSE," & _ 
     " mrTool.OPID = 'SYS', mrTool.ReasonCode = 'AOK'," & _ 
     " mrTool.History = 'AOK'" & _ 
     " WHERE (Nz(CCur([Amount]),0) + Nz(CCur([SFS]),0) <= 0" & _ 
     " AND mrTool.Action Is Null);" 
    DoCmd.RunSQL bncSql 

mrTool.Action被定义为文本(1)(即,单一的字符),它是其中I假设它是。 “Is Null”似乎可以在其他地方工作 - 当我用“=''”(零长度字符串)替换它时,也许是因为它是Text not Variant,它完全停止工作。

我应该补充一点,我有相同的格式elsewehere,它似乎工作正常 - 它不会给我一个运行时错误之前,我使用它的23个地方。因此,我想也许这是SFS和金额的错误,因此Nz(),但这没有任何帮助 - 仍然得到错误。

我不知所措...

回答

2

也许吧?

WHERE (CCur(Nz([Amount],0)) + CCur(Nz([SFS],0)) <= 0 
+1

我同意。 CCur功能需要在NZ功能之后使用,而不是其他方式。 – HK1 2012-04-16 16:14:02

+0

这似乎做到了!我不知道它是否正常工作,但至少它没有错误。 :) 谢谢!我现在可以停止拉头发了。 – graidan 2012-04-16 16:20:42

+0

我不确定你可以停止拉头发。我测试了你的SQL,就像你上面发布的那样,@graidan,带有Action文本(1)的表格,它工作正常。 – Fionnuala 2012-04-16 16:26:41