我在修改之前一直有效的更新事件时遇到了一个问题。我现在收到运行时错误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
答案 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
;他们已经平等了。