2015-11-04 53 views
0

我試圖編寫一個按鈕來更新基於用戶輸入的ID的行。該ID是由該表生成的自動編號字段。用戶可以使用另一個按鈕創建行,但是當他們需要修復錯誤時,我希望他們能夠使用正確的信息更新行。但是,我的代碼給了我標題中的錯誤。訪問VBA:查詢輸入必須包含至少一個表或查詢

這是「更新」按鈕:

Private Sub Command133_Click() 

    Dim dbsCurrent As Database 
    Set dbsCurrent = CurrentDb 

    dbsCurrent.Execute " INSERT INTO tbl_Downtime " _ 
    & "(job, suffix, production_date, reason, downtime_minutes, comment) VALUES " _ 
    & "('" & Me.Text116 & "','" & Me.Text118 & "','" & Me.Text126 & "','" & Me.Text121 & "','" & Me.Text123 & "','" & Me.Text128 & "') WHERE ID='" & Me.Text135 & "';" 

    Call ClearControl(Me.Text116) 
    Call ClearControl(Me.Text118) 
    Call ClearControl(Me.Text126) 
    Call ClearControl(Me.Text121) 
    Call ClearControl(Me.Text123) 
    Call ClearControl(Me.Text128) 

End Sub 

回答

0

它看起來像問題與你有你的SQL語句的結束是WHERE聲明。使用INSERT INTO ... VALUES ...方法用於插入一行提供的值,因此使WHERE子句沒有意義。

相反,如果你想,那麼你想要寫你的SQL像插在現有的表中的一行或多行值:

"INSERT INTO tbl_Downtime (job, suffix, production_date, reason, downtime_minutes, comment) 
SELECT '" & Me.Text116 & "', '" ... [your other fields go here] ... "' 
FROM [src_table] As t 
WHERE t.ID = '" & Me.Text135 & "';" 

編輯 如果您正在尋找更新(而不是試圖用新值添加新行),那麼您需要類似這樣的代碼:

"UPDATE tbl_Downtime SET job = '" & Me.Text116 & "', suffix = '" & Me.Text118 & "', production_date = #" & Me.Text126 & "#, reason = '" & Me.Text121 & "', downtime_minutes = " & Me.Text123 & ", comment = '" & Me.Text128 & "' WHERE t.ID = '" & Me.Text135 & "';" 
+0

此語法存在問題 - 從SELECT語句開始的所有內容都是紅色的。 – whatwhatwhat

+0

我玩過並嘗試過:'dbsCurrent.Execute「INSERT INTO tbl_Downtime(job,suffix,production_date,reason,downtime_minutes,comment)SELECT'」&Me.Text116&「','」&Me.Text118& ','&Me.Text126&'','「&Me.Text121&」','「&Me.Text123&」','「&Me.Text128&」'從tbl_Downtime作爲t WHERE t.ID = ''&Me.Text135 & "';「' - 全部在一行(因爲我不想處理那些額外的下劃線,你需要在VBA中使用)但現在我又遇到了另一個錯誤:'數據類型不匹配在標準表達式中。'任何提示? – whatwhatwhat

+1

這可能是因爲你傳遞的是text/char數據類型的文本框值,如果production_date字段是日期時間,而downtime_minutes是數字,你必須使用'CDate ()'和'CINT()'函數來轉換它們,你應該仔細檢查你的其他字段的數據類型,看看你是否需要做其他轉換 – Yllzarith

相關問題