UPDATE语句中的语法错误无法找到解决方案

时间:2018-03-14 16:17:31

标签: vba ms-access access-vba

通过以下代码更新我的访问表时遇到了一些问题:

Update = "UPDATE formation " & _
            "SET AREA = '" & Me.AREA & "', " & _
            "TYPE = '" & Me.TYPE & "', " & _
            "TEAM = '" & Me.TEAM & "', " & _
            "PRIORITY = '" & Me.PRIORITY & "', " & _
            "PROCESS = '" & Me.PROCESSO & "', " & _
            "NUMBER = " & Me.NumForm.Value & "', " & _
            "SUPERVISOR = '" & Me.SUPERVISOR & "', " & _
            "Cc = '" & Me.mailCc & "', " & _
            "STATUS = 'SUBMITED', " & _
            "USER_UPDATE = '" & newFormationUser & "', " & _
            "DATA_STATUS_NOW = '" & Now() & "' " & _
         "WHERE ID = " & Str(NewFormationID)

DoCmd.SetWarnings False
DoCmd.RunSQL Update
DoCmd.SetWarnings True

NumForm是一个数字1到15的ComboBox。 我已经尝试重做查询,重做代码,重制表,没有运气解决。 一遍又一遍地阅读以查找拼写错误甚至代码中的错误。

你能帮助我吗? 谢谢, 迪奥戈

1 个答案:

答案 0 :(得分:2)

该语句有许多问题,但它们都可以使用参数化来修复。

首先,错过了引用,每个人都看到了。

其次,您设置的列等于Now(),但没有使用正确的日期格式,也没有使用日期分隔符(#)。

第三,您使用撇号来分隔字符串,但不测试字符串本身是否包含撇号,从而引发不可预测且难以诊断的错误。

此外,Number是一个关键字,应该用[]括号括起来。

您应该使用参数化,然后大多数错误都不会发生:

Dim qd As DAO.QueryDef
Set qd = CurrentDb.CreateQueryDef("", "UPDATE formation " & _
            "SET AREA = ?, " & _
            "TYPE = ?, " & _
            "TEAM = ?, " & _
            "PRIORITY = ?, " & _
            "PROCESS = ?, " & _
            "[NUMBER] = ?, " & _
            "SUPERVISOR = ?, " & _
            "Cc = ?, " & _
            "STATUS = 'SUBMITED', " & _
            "USER_UPDATE = ?, " & _
            "DATA_STATUS_NOW = ? " & _
            "WHERE ID = ?")
qd.Parameters(0) = Me.AREA
qd.Parameters(1) = Me.TYPE
qd.Parameters(2) = Me.TEAM 
qd.Parameters(3) = Me.PRIORITY
qd.Parameters(4) = Me.PROCESSO 
qd.Parameters(5) = Me.NumForm.Value
qd.Parameters(6) = Me.SUPERVISOR 
qd.Parameters(7) = Me.mailCc 
qd.Parameters(8) = newFormationUser 
qd.Parameters(9) = Now() 
qd.Parameters(10) = NewFormationID
qd.Execute