2016-10-02 46 views
-1

我是數據庫的新手。我正在創建一個Access數據庫來跟蹤我們公司的庫存動態。我有兩張桌子。一個是當前的庫存庫存,另一個是生產活動引起的消費。更新在每次生產後立即完成。在訪問2013中對條件更新表使用SQL語句

在進行更新之前,我想驗證在庫存狀態和消耗量表中都使用了相同的單位。我試圖做這樣的事情:

Private Sub Command4_Click() 
    CurrentDb.Execute "SELECT o.Unit, s.Material_Unit" & _ 
        "CASE WHEN o.Unite = s.Material_Unit" & _ 
        "THEN UPDATE tbl_Current_Stock As o INNER JOIN bl_Temp_Raw_Material_Consumption AS s ON o.Raw_Material = s.[Ingredient/Packaging material] Set o.Stock_Level = o.Stock_Level - s.Consumption" & _ 
        " Print'Congratulations! You have successfully updated inventory balance!'" & _ 
        "ElSE PRINT ' Units of source data and targeted data are not matched!'" & _ 
        "Exit Sub" & _ 
        "End" & _ 
        "FROM tbl_Current_Stock As o, bl_Temp_Raw_Material_Consumption AS s" 
END sub 

但似乎有些錯誤存在。請幫我看看這些代碼。

謝謝。

+0

您正在合併SQL和VBA代碼。並且Access SQL不支持'CASE'語句。考慮閱讀有關MS Access的文檔或教程。 – Parfait

回答

1

你的代碼是完全錯誤的。您不能使用CASE來決定執行哪個語句,UPDATEPRINTPRINT在這裏是無用的,在MS Access中)。

您需要爲使用:在您的SQL查詢

IF聲明 - 宣佈o.Unites.Material_Unit爲變量,對它們進行比較,如果它們匹配,則執行更新。

IF @unite = @materialunite 
BEGIN 
    [Your Update Statement] 
END 

另一種方式: 申報VB變量,分配o.Unites.Material_Unit值給他們,並寫IF - 在VB ELSE語句和執行SQL查詢。

+0

謝謝Tedo,我是全新的sql。我會嘗試你的建議。祝你有美好的一天。 –

+0

不要分割頭髮,但你可能意味着VBA,與VB的顯着不同。此外,您的代碼似乎是SQL Server TSQL,而不是Access SQL,這是一種不同的方言。 – Parfait

+0

@Parfait是的,它應該是VBA。另外,用戶還沒有指定他正在使用本地或MS SQL SERVER遠程數據庫,所以如果他的後端是MS SQL,代碼將執行並更新表。如果他使用本地數據庫,他可以使用VBA條件,然後更新語句,就像我寫的那樣。 –