我正在尝试在我的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]<>时,当前查询工作正常。空
我也尝试用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'));
答案 0 :(得分:3)
使用SELECT
查询来计算WHERE
子句逻辑。如果操作正常,请在WHERE
查询中使用相同的UPDATE
子句。
我认为你说的是当文本框不是Null时,你想要UNM_ID
值等于文本框ID
的行。但是,当文本框为Null时,您需要UNM_ID
为空的行。
如果这是正确的,请使用变量变量来保存Smandoli建议的ID
值。然后你可以使用IIf
表达式来决定等于和是否为空。
Dim strSQL As String
Dim varID As Variant
varID = Forms!form1!subForm1!ID.Value
strSQL = "SELECT * FROM TblMatchedTb AS m" & vbCrLf & _
"WHERE m.UNM_ID " & _
IIf(IsNull(varID), "Is Null", "=" & varID) & _
" AND ..."
Debug.Print strSQL