VBA Access在先前工作的事件上获取运行时错误3144

时间:2013-12-18 17:11:34

标签: vba ms-access ms-access-2007 access-vba

我在修改之前一直有效的更新事件时遇到了一个问题。我现在收到运行时错误3144,“UPDATE语句中的语法错误。”当我去调试时,标记了以下代码行。             设置qdf = db.CreateQueryDef(vbNullString,strUpdate)

此函数以前的工作原理是创建SQL字符串以运行Update命令。但是,我需要将这个相同的功能调整为不同但大部分相似的形式。 我已经在下面提供了完整的代码以供审核,可以使用一些帮助来发现我在转移过程中遗漏/搞砸的任何细节。

    Private Sub btnEntEdt_Click()
        Dim strUpdate As String
        Dim db As DAO.Database
        Dim qdf As DAO.QueryDef

        strUpdate = "UPDATE EntList AS e" & vbCrLf & _
                    "SET e.BusinessUnit = pBusinessUnit,  " & _
                    "e.EntityID = pEntityID, " & vbCrLf & _
                    "e.EntityName = pEntityName, " & vbCrLf & _
                    "e.Location = pLoc, " & vbCrLf & _
                    "e.Client = pCli, " & vbCrLf & _
                    "e.Dept = pDept, " & vbCrLf & _
                    "WHERE e.EntityID = pEntityID;"
        Debug.Print strUpdate

        Set db = CurrentDb
        Set qdf = db.CreateQueryDef(vbNullString, strUpdate)
        qdf.Parameters("pBusinessUnit") = Me.cboBUnit.Value
        qdf.Parameters("pEntityName") = Me.txtEntName.Value
        qdf.Parameters("pEntityID") = Me.txtEntID.Value
        qdf.Parameters("pLoc") = Me.cboLoc.Value
        qdf.Parameters("pCli") = Me.cboClient.Value
        qdf.Parameters("pDept") = Me.cboDept.Value
        qdf.Execute dbFailOnError
        Set qdf = Nothing
        Set db = Nothing

        Me.lstEntName.Requery

    End Sub

1 个答案:

答案 0 :(得分:2)

你明智地加入Debug.Print strUpdate。检查其输出......

UPDATE EntList AS e
SET e.BusinessUnit = pBusinessUnit,  e.EntityID = pEntityID, 
e.EntityName = pEntityName, 
e.Location = pLoc, 
e.Client = pCli, 
e.Dept = pDept, 
WHERE e.EntityID = pEntityID;

由于SET子句末尾的逗号,该语句会触发错误。

e.Dept = pDept, 
              ^ here

删除该逗号,在查询设计器中测试修订后的UPDATE语句,一旦使其正常工作,修改您的VBA代码以生成相同的语句文本。

或者您可以将工作版本保存为命名查询 qryUpdateEntList ,然后从VBA代码引用命名查询,而不是在运行时重新创建语句文本。

Set qdf = db.QueryDefs("qryUpdateEntList")

除语法错误外,这种组合对我来说错了......

SET e.EntityID = pEntityID
WHERE e.EntityID = pEntityID

由于WHERE子句,UPDATE只会影响EntityID = pEntityID的行。所以没有必要SET EntityID = pEntityID;他们已经平等了。

相关问题