2016-09-18 43 views
0

當我在訪問2013中運行SQL更新時,出現了語法錯誤。目標表保存了庫存平衡數據。爲了更新餘額,原始數據將減去生產活動帶來的消耗量。我使用查詢來獲得消費總和。我的代碼如下:在訪問中更新sql的語法錯誤

Private Sub Command4_Click() 
CurrentDb.Execute ("UPDATE tbl_Current_Stock As o" & _ 
        「Inner join preview_Of_Raw_Material_Consumption As p」 & _ 
        「On o.Raw_Material =p.[Ingredient/Packaging material]」 & _ 
       "Set o.Stock_Level = o.Stock_Level- p.SumOfConsumption") 
End Sub 

編輯 - 添加當前的代碼不工作:

CurrentDb.Execute ("UPDATE tbl_Current_Stock As o Inner join preview_Of_Raw_Material_Consumption As p On o.[Raw_Material] = p.[Ingredient/Packaging material]Set o.[Stock_Level] = o.[Stock_Level]- p.SumOfConsumption from o p") 
+0

[如何在VBA中調試動態SQL](http://stackoverflow.com/a/1099570/3820271) – Andre

+0

MS Access中的更新查詢不應該有'FROM'子句。此外,更新查詢應該是[可更新](http://allenbrowne.com/ser-61.html),其中包括不在基礎連接對象中具有聚合查詢。我提出這個問題是因爲我看到一個「SumOfConsumption」列。 – Parfait

回答

0

您的查詢看起來是這樣的:

UPDATE tbl_Current_Stock As oInner join preview_Of_Raw_Material_Consumption As pOn o.Raw_Material =p.[Ingredient/Packaging material]Set o.Stock_Level = o.Stock_Level- p.SumOfConsumption 

你能找出問題?是的,您在查詢中有連續行。如果在運行它之前打印查詢字符串,那麼問題就很明顯。

解決的辦法是把適當的空格字符串:

CurrentDb.Execute ("UPDATE tbl_Current_Stock As o" & _ 
        " Inner join preview_Of_Raw_Material_Consumption As p」 & _ 
        " On o.Raw_Material = p.[Ingredient/Packaging material]」 & _ 
        " Set o.Stock_Level = o.Stock_Level- p.SumOfConsumption") 
+0

謝謝Gordon,正如你所建議我重新排列我的代碼字符串在一行中,如 CurrentDb.Execute(「UPDATE tbl_Current_Stock As o Inner join preview_Of_Raw_Material_Consumption As p On o.Raw_Material = p。[Ingredients/Packaging material] Set o.Stock_Level = o.Stock_Level- p.SumOfConsumption「),但我得到一個錯誤信息」太少參數期望31「。 –

+0

所以我想也許我需要在字符串中添加from語句並將我的代碼更改爲CurrentDb.Execute(「UPDATE tbl_Current_Stock As o Inner join preview_Of_Raw_Material_Consumption As p On o。[Raw_Material] = p。[Ingredients/Packaging material] Set o。[Stock_Level] = o。[Stock_Level] - p.SumOfConsumption from op「)。這次我得到了一個語法錯誤(缺少操作符)。 –

+1

用編輯註釋將您的編輯置於您的問題中 - 就像我上面所做的那樣。花些時間看看你的嘗試。現在你在Set之前沒有空間 – dbmitch

0

謝謝戈登。我最終發現了我的代碼的真正問題。我想分享我的經驗,這可能對其他受相同或類似問題困擾的人有所幫助。正如我在第一個問題中提到的,我的一個更新源來自一個查詢。這個查詢是個人消費的總和,它是「不可爭辯的」。通過在線搜索,我使用時態表作爲數據源,代碼運行平穩。

CurrentDb.Execute ("Update tbl_Current_Stock As o Inner join tbl_Temp_Raw_Material_Consumption As s On o.Raw_Material = s.[Ingredient/Packaging material] Set o.Stock_Level = o.Stock_Level - s.Consumption")

這裏tbl_Temp_Raw_Material_Consumption是原始查詢的品牌表查詢。