2013-05-28 37 views
1

我正在寻找与另一个表根据现场条件更新我的一个表。我想知道正确的做法是什么。我试图做的2个表UPDATE语句,但每次它与此错误就出来了:参数太少,预计2与另一个表的SQL Access VBA UPDATE表?太少参数

我的目标: 如果SOURCING场= O,我想邮编是原始邮政编码 如果SOURCING字段= D,我希望邮政编码为Dest邮政编码

因此,现在,我只是在做一个条件为LEFT JOIN。这是做这件事的最好方法吗?或者我应该用原始的INSERT语句做到这一点?

CurrentDb.Execute "UPDATE Processing" & _ 
" LEFT JOIN tblImport" & _ 
" ON Processing.[BATCH_NO] = tblImport.[BATCH_NO]" & _ 
" SET Processing.[Zip Code] = tblImport.[Origin Postal Code]" & _ 
" WHERE tblImport.[Sourcing] = O;" 

CurrentDb.Execute "UPDATE Processing" & _ 
" LEFT JOIN tblImport" & _ 
" ON Processing.[BATCH_NO] = tblImport.[BATCH_NO]" & _ 
" SET Processing.[Zip Code] = tblImport.[Dest Postal Code]" & _ 
" WHERE tblImport.[Sourcing] = D;" 

我曾试图改变WHERE语句,因为我不知道是否应该加引号,单引号,不报价,等...但我想出空在那里。其他一切对我来说都是正确的。

+0

你确定你应该使用JOIN表吗?看起来您可以使用子查询从tblImport获取所需的数据,因为您没有在该表中设置任何值。 – ZeroK

+0

不要'O'和'D'需要围绕他们单引号BC他们是字符串字段?这可能是两个“参数”之一。 –

回答

1

以下是我的工作,您可能会觉得这很有帮助;设置一个变量等于你的SQL字符串,然后CurrentDB.Execute变量。为什么这有帮助?因为你可以在变量被设置后破坏代码,然后将SQL复制到一个新的查询中,看看它在抱怨什么。 :o)

Dim tmpUpdate as string 

tmpUpdate = "UPDATE Processing" & _ 
" LEFT JOIN tblImport" & _ 
" ON Processing.[BATCH_NO] = tblImport.[BATCH_NO]" & _ 
" SET Processing.[Zip Code] = tblImport.[Origin Postal Code]" & _ 
" WHERE tblImport.[Sourcing] = O;" 

CurrentDB.Execute tmpUpdate 

在“tmpUpdate =”行设置一个断点,然后运行代码。当它到达断点时,按F8进入下一行。在即时窗口中,输入“?tmpUpdate”(不带引号)并查看它认为该变量等于什么。然后,转到数据库,创建一个新查询并转到查询的SQL。从即时窗口复制并粘贴SQL,然后尝试运行查询。如果它呕吐,转到设计视图,看看你是否可以看到任何看起来不正确的东西。