簡體   English   中英

vba上的SQL語法錯誤

[英]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.valuetxtID.Tag ,他們有不同的地方。該value屬性是在文本框中的值,該Tag屬性更像是一個元數據區域,您可以根據需要填充它,但默認情況下不會自動填充。

最后,我想向您推薦您之前遇到的問題的答案,在答案的底部有一個提示,關於將結果查詢放入 SQL 視圖中的 Access 查詢以獲得有關錯誤的更好信息,即也會在這里幫助你。 為“結果查詢”提供進一步幫助。

  1. 在調試模式下,雖然CurrentDb.Execute突出顯示但在運行之前(使用 F8 單步執行每一行直到到達那里,或在該行上放置一個斷點
  2. 如果即時窗口尚未打開,請打開它(Ctrl+G 到菜單欄“查看”>“即時窗口”)
  3. CurrentDb.Execute語句之后的行復制所有相關代碼,在這種情況下它將是UPDATE ... .Tag
  4. 在立即窗口中輸入一個問號,然后粘貼相關代碼並按回車
  5. 即時窗口將返回結果字符串供您在 SQL 視圖中的查詢中嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM