2013-05-28 42 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,然後嘗試運行查詢。如果它嘔吐,轉到設計視圖,看看你是否可以看到任何看起來不正確的東西。