Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access MSAccess:在查询中正确使用Nz?_Ms Access_Vba - Fatal编程技术网

Ms access MSAccess:在查询中正确使用Nz?

Ms access MSAccess:在查询中正确使用Nz?,ms-access,vba,Ms Access,Vba,我正在尝试在AccessDB中构造更新查询字符串(strSQL)。我的查询中的一个属性可以合法地=NULL 我用Nz([ID])包围了该属性,如下所示-注意:[ID]是一个整数值: strSQL = "UPDATE Table... " & _ "WHERE ((Table.Attr1 = " & nz(forms!form1!subForm1.Form![ID]) & ") AND (Table.Attr2 = 'Test'));" db.execute st

我正在尝试在AccessDB中构造更新查询字符串(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'));

使用
SELECT
查询计算
WHERE
子句逻辑。在正常工作后,在
UPDATE
查询中使用相同的
WHERE
子句

我想您是说,当文本框不为空时,您希望其
UNM_ID
值等于文本框
ID
。但是,当文本框为Null时,您需要
UNM_ID
为Null的行

如果这是正确的,请使用变量来保存Smandoli建议的
ID
值。然后可以使用
IIf
表达式来决定等于还是为Null

Dim strSQL作为字符串
作为变体的Dim varID
varID=表单!表格一!子形式1!ID.值
strSQL=“从TBL匹配数据库中选择*作为m”&vbCrLf&_
“其中m.UNM_ID”和_
IIf(IsNull(varID),“IsNull”、“=”和varID)和_
“还有……”
调试.打印strSQL

db.execute strSQL
之前添加一行
Debug.Print strSQL
。运行代码,当它抛出错误时,复制调试。从即时窗口打印输出并粘贴到您的问题中。如果这是您的真实代码,那么更新表有什么用…?(如果这不是您真正的代码,您可能会发现很难获得帮助。)为了讨论,我尝试简单地使用strSQL。。。完整的strSQL结果发布在上面…谢谢,马克。这个查询应该是什么样的
其中((TblMatchedTb.UNM_ID=)
应该是
UNM_ID为Null
还是
UNM_ID=
?指定一个变量来保存
forms!form1!subForm1.Form![ID]的值
。开始找出该部分的错误。是的,太好了!再次感谢HansUp。我在这条路上测试NULL并有条件地构造strSQL。IIF效率更高。