【发布时间】:2014-03-17 20:46:25
【问题描述】:
我正在尝试在我的 AccessDB 中构造一个 UPDATE 查询字符串 (strSQL)。我的查询中的属性之一可以合法地 = NULL。
我已经用 Nz([ID]) 包围了属性,如下 - 注意:[ID] 是一个整数值:
strSQL = "UPDATE Table... " & _
"WHERE ((Table.Attr1 = " & nz(forms!form1!subForm1.Form![ID]) & ") AND (Table.Attr2 = 'Test'));"
db.execute strSQL
Access 在我的查询表达式中抱怨“额外的 )”。注意:当 [ID] Null
时,当前查询工作得很好我还尝试用 Nz([ID],0) 包围 [ID] - Access 不再抱怨,但不返回任何结果,因为 [ID] 在我的表中从不为 0。
对于在这种情况下正确使用 Nz() 有什么建议吗?
谢谢!
这是 debug.print 的实际 strSQL 结果 - 很容易看到有问题的 WHERE 子句:
UPDATE TblMatchedTb SET TblMatchedTb.FLAG_UNMATCHED = 'CLP', TblMatchedTb.UNM_ID = Null, TblMatchedTb.ITEM = Null, TblMatchedTb.COST = 0, TblMatchedTb.PACK = 1, TblMatchedTb.UOM = 'EA', TblMatchedTb.LastUpdated = #3/17/2014 8:14:48 PM#, TblMatchedTb.LastUpdatedby = '22' WHERE ((TblMatchedTb.UNM_ID= ) AND ((TblMatchedTb.ITEM)= '') AND ((TblMatchedTb.COST)= 6.882) AND ((TblMatchedTb.PACK)= 1) AND ((TblMatchedTb.UOM)= 'EA'));
【问题讨论】:
-
在
db.execute strSQL之前添加一行Debug.Print strSQL。运行代码,当它抛出该错误时,复制即时窗口中的Debug.Print输出并将其粘贴到您的问题中。 -
如果那是你的真实代码,
UPDATE Table...是怎么回事? (如果这不是您的真实代码 - 您可能会发现很难获得帮助。) -
为了讨论,我尝试简单地使用 strSQL...上面发布了完整的 strSQL 结果...
-
谢谢,马克。这段查询应该是什么样的? ...
WHERE ((TblMatchedTb.UNM_ID= )应该是UNM_ID Is Null还是UNM_ID=<some number>? -
指定一个变量来保存
forms!form1!subForm1.Form![ID]的值。开始找出那部分出了什么问题。