SQL 错误访问 2010 VBA 更新命令

Posted

技术标签:

【中文标题】SQL 错误访问 2010 VBA 更新命令【英文标题】:SQL Error Access 2010 VBA Update Command 【发布时间】:2012-08-27 15:57:37 【问题描述】:

我需要帮助找出我的 SQL 语句中的错误。我一直在尝试几件事,但似乎没有任何效果? 这是我收到的错误消息

Run-time error '3075':

Syntax error (missing operator) in query expression '([description] = Manufacturing and Delivery Schedule AND [pr_num] = 83)'.

这是我的代码:

Private Sub Command6_Click()
' ===================================================
' Receives the selected item in the combo box
' ===================================================

' Open the Database connection
Dim data_base As Database
Set data_base = CurrentDb

' Grab description and pr number from the form
Dim desc As string
dim pr_number as long
desc = Combo4.Value
pr_number = Text8.Value

' Build the query
Dim query As String
query = "UPDATE VDR_Table " & _
    "SET [received] = [p1] " & _
    "WHERE ([description] = " & desc & _
    " AND [pr_num] = " & pr_number & ");"

Dim rec_set As DAO.Recordset
Set rec_set = data_base.OpenRecordset(query)

' Build the QueryDef
Set qd = data_base.CreateQueryDef("")
qd.SQL = query

' Execute query
qd.Parameters("p1").Value = true
qd.Execute

' Close nad null record set
rec_set.close
set rec_set = nothing

' Close the connection to the database
data_base.Close

' Prompt the user success
MsgBox "Item has been received"
End Sub

提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

您需要将您设置的描述字段值用引号引起来,因为它是一个字符串字段。它应该是这样的:

' Build the query
Dim query As String
query = "UPDATE VDR_Table " & _
    "SET [received] = [p1] " & _
    "WHERE ([description] = '" & desc & _
    "' AND [pr_num] = " & pr_number & ");"

删除下面的链接,因为它们在这种情况下无关紧要。

另外,我建议使用参数而不是字符串连接来避免 SQL 注入。这是一个在 VBA 中使用参数的示例 - http://support.microsoft.com/kb/181734 - 这里是关于为什么要使用参数化 sql - http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html 的一些推理。

【讨论】:

你会在DAO、参数和长字符串方面遇到困难。 SQL 注入在 MS Access 中并不完全相同。我倾向于在 desc 中转义任何可能的单引号。 肯定会转义引号,但如果他使用参数不会解决这个问题吗? 你不能使用带有DAO的参数和超过255的字符串。 把它放在引号中处理了我的错误消息,但我收到了另一个错误。它在 qd.Execute 行中给了我一个错误。说它期待2个参数?对此有何想法? 我不太担心注入攻击。这只是一个办公室间的应用程序,任何人都想尝试获取这里的信息。

以上是关于SQL 错误访问 2010 VBA 更新命令的主要内容,如果未能解决你的问题,请参考以下文章

由于密钥冲突 VBA SQL 访问,更新失败

运行时错误“3164”:“无法更新字段”-访问 VBA 问题

Excel VBA 更新 SQL 表

获取自动化错误 Excel VBA 尝试更新 SQL Db

VBA Excel - 访问查询不可更新

操作必须使用可更新查询/SQL - VBA