[英]SQL syntax error on vba
我在查詢向導的添加/更新按鈕中創建了一條 SQL 語句,然后將其改回 SQL 視圖,以查看程序如何生成代碼,以及當我在 btnAdd 的 If 語句上復制並粘貼相同的錯誤時,它會拋出我語法錯誤,但如何?
這是整個代碼:
Private Sub cmdAdd_Click()
'In the button add we have two options
'1. Insert
'2. Update
If Me.txtID.Tag & "" = "" Then
CurrentDb.Execute "INSERT INTO tblClients ( ClientID, ClientName, Gender, " & _
"City, [Address (Fisical)], [Cellphone/Telephone] ) " & _
"SELECT " & Me.txtID & ",'" & Me.txtName & "','" & Me.cboGender & "', '" & Me.cboCity & "','" & Me.txtAddress & "','" & Me.txtCellphone & "'"
Else
'Otherwise the data will be updated
CurrentDb.Execute "UPDATE tblClients SET tblClients.ClientName = [me]. [txtName], tblClients.Gender = [me].[cboGender], tblClients.City = [me].[cboCity], tblClients.[Address (Fisical)] = [me].[txtAddress], tblClients.[Cellphone/Telephone] = [me].[txtCellphone] "
WHERE (([ClientID]=[Me].[txtID].[Tag]));
End If
cmdClear_Click
tblClients_subform.Form.Requery
End Sub
它以紅色突出顯示我這一行:
WHERE (([ClientID]=[Me].[txtID].[Tag]));
看來下面的代碼不在同一行
CurrentDb.Execute "UPDATE tblClients SET tblClients.ClientName = [me]. [txtName], tblClients.Gender = [me].[cboGender], tblClients.City = [me].[cboCity], tblClients.[Address (Fisical)] = [me].[txtAddress], tblClients.[Cellphone/Telephone] = [me].[txtCellphone] "
WHERE (([ClientID]=[Me].[txtID].[Tag]))
所以你可能想把它改成
CurrentDb.Execute "UPDATE tblClients SET tblClients.ClientName = [me]. [txtName], tblClients.Gender = [me].[cboGender], tblClients.City = [me].[cboCity], tblClients.[Address (Fisical)] = [me].[txtAddress], tblClients.[Cellphone/Telephone] = [me].[txtCellphone] " & _
"WHERE (([ClientID]=[Me].[txtID].[Tag]))"
在 INSERT 語句中將 SELECT 關鍵字更改為 VALUES。
CurrentDb.Execute "INSERT INTO tblClients ( ClientID, ClientName, Gender, " & _
"City, [Address (Fisical)], [Cellphone/Telephone] ) " & _
"VALUES (" & Me.txtID & ",'" & Me.txtName & "','" & Me.cboGender & "', '" & Me.cboCity & "','" & Me.txtAddress & "','" & Me.txtCellphone & "')"
更新應該是這個。 這里的問題是您試圖在 SQL 中使用Form
控件,但您需要先評估這些控件,然后將它們的值連接到您的文字字符串。
我想知道你是否真的需要Me.txtID
而不是Me.txtID.Tag
所以,如果它不起作用,就擺脫它。
CurrentDb.Execute "UPDATE tblClients SET tblClients.ClientName = '" & me.txtName & "', tblClients.Gender = '" & me.cboGender & "', tblClients.City = '" & me.cboCity & "', tblClients.[Address (Fisical)] = '" & me.txtAddress & "', tblClients.[Cellphone/Telephone] = '" & me.txtCellphone & "' WHERE (([ClientID]=" & Me.txtID.Tag & "));"
除了Cableload的正確答案(其中新代碼行上的WHERE
語句未通過在第一行末尾使用下划線連接到前一行)之外,仍然存在引用問題。
您在 UserForm 中引用值,就像表中的列一樣,因此它找不到您要查找的值。 要將值放入 SQL 語句中,您需要從文字字符串中取出值,引用該值,然后繼續寫入字符串(不要忘記用'
將值括起來):-
CurrentDb.Execute "UPDATE tblClients SET " & _
"[ClientName] = '" & Me.txtName & "', " & _
"[Gender] = '" & Me.cboGender & "', " & _
"[City] = '" & Me.cboCity & "', " & _
"[Address (Fisical)] = '" & Me.txtAddress & "', " & _
"[Cellphone/Telephone] = '" & Me.txtCellphone & "' " & _
"WHERE [ClientID]=" & Me.txtID.Tag
為了便於閱讀,我已將其分布在多行中,但顯然您可以根據需要調整實際代碼。
我也要問題[ClientID]=" & Me.txtID.Tag
,是在ClientID的txtID.value
或txtID.Tag
,他們有不同的地方。該value
屬性是在文本框中的值,該Tag
屬性更像是一個元數據區域,您可以根據需要填充它,但默認情況下不會自動填充。
最后,我想向您推薦您之前遇到的問題的答案,在答案的底部有一個提示,關於將結果查詢放入 SQL 視圖中的 Access 查詢以獲得有關錯誤的更好信息,即也會在這里幫助你。 為“結果查詢”提供進一步幫助。
CurrentDb.Execute
突出顯示但在運行之前(使用 F8 單步執行每一行直到到達那里,或在該行上放置一個斷點CurrentDb.Execute
語句之后的行復制所有相關代碼,在這種情況下它將是UPDATE ... .Tag
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.