MS Access:在查询中正确使用Nz?

时间:2014-03-17 20:46:25

标签: vba ms-access access-vba

我正在尝试在我的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'));

1 个答案:

答案 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