访问vba中的SQL查询

时间:2013-09-04 12:54:56

标签: sql vba access-vba

我有这个UPDATE查询的问题,我有关于语法错误查询的消息。我认为这个查询是正确的,我无法找到导致此错误的内容。

Link to error

Private Sub cmdModifyBook_Click() 'approves modifying books to the database

Dim str As String
Dim dbs As DAO.Database

Set dbs = CurrentDb()

'checks if the typed all the data of book
If (Me.txtModifyTitle.Value = "") Or (Me.txtModifyTitleWeb.Value = "") Or (Me.txtModifyVerkaufpreis.Value = "") _
   Or (Me.txtModifyThemengruppe.Value = "") Then
   MsgBox "Nicht alle von Ihnen eingegebenen Daten"
   Exit Sub
End If

str = " UPDATE Katalog " _
    & "(Bezeichnung, BezeichnungWeb, Verkaufspreis, Themengruppe) SET " _
    & "('" & Me.txtModifyTitle.Value & "', '" & Me.txtModifyTitleWeb.Value & "', '" & Me.txtModifyVerkaufpreis.Value & "', '" & Me.txtModifyThemengruppe.Value & "') WHERE ID_Buch =" & Me.lblModifyID.Caption & ";"

dbs.Execute str, dbFailOnError

MsgBox "Das Buch wurde in der Datenbank geändert", vbInformation

dbs.Close
Set dbs = Nothing

End Sub

2 个答案:

答案 0 :(得分:1)

您的代码应该是这样的:

Private Sub cmdModifyBook_Click() 'approves modifying books to the database

    Dim str As String
    Dim dbs As DAO.Database

    Set dbs = CurrentDb()

    'checks if the typed all the data of book
    If (Me.txtModifyTitle.Value = "") Or (Me.txtModifyTitleWeb.Value = "") Or (Me.txtModifyVerkaufpreis.Value = "") _
       Or (Me.txtModifyThemengruppe.Value = "") Then
       MsgBox "Nicht alle von Ihnen eingegebenen Daten"
       Exit Sub
    End If

    str = "UPDATE Katalog " & _
    "SET Bezeichnung = '" & PQ(Me.txtModifyTitle.Value) & "', " & _
    "BezeichnungWeb = '" & PQ(Me.txtModifyTitleWeb.Value) & "', " & _
    "Verkaufspreis = '" & PQ(Me.txtModifyVerkaufpreis.Value) & "', " & _
    "Themengruppe = '" & PQ(Me.txtModifyThemengruppe.Value) & "' " & _
    "WHERE ID_Buch = " & Me.lblModifyID.Caption & ";"

    Debug.Print str
    MsgBox str

    dbs.Execute str, dbFailOnError

    MsgBox "Das Buch wurde in der Datenbank geändert", vbInformation

    dbs.Close
    Set dbs = Nothing

End Sub 

Private Function PQ(s as string) as String
    PQ = Replace(s, "'", "''")
End Function

请注意,您需要使用两个单引号替换文本框中值中可能存在的任何单引号,以防止SQL错误。这就是我发布PQ功能的原因。

答案 1 :(得分:-1)

UPDATE命令语法如下

UPDATE Katalog 
SET
Bezeichnung = Me.txtModifyTitle.Value ,
BezeichnungWeb = Me.txtModifyTitleWeb.Value ,
Verkaufspreis = Me.txtModifyVerkaufpreis.Value,
Themengruppe = Me.txtModifyThemengruppe.Value
WHERE ID_Buch = Me.lblModifyID.Caption

当然上面的内容现在可以使用,因为你必须将它用于str变量