SQL中连接的字符串变量(访问数据库),引用引起的语法错误?

时间:2018-01-09 19:07:24

标签: vba excel-vba ms-access excel

我有2个列表框,定义了需要通过SQL语句传递给OpenRecordSet的2个变量。

Conveyor_ID 是一个访问表名称
宽度是表Conveyor_ID中的字段名称 Width_Row 是字段值中的字符串值

Dim db As DAO.Database
Dim rs As DAO.Recordset
Const DbLoc As String = "DB location info"


Dim Conveyor_ID As String  ' Conveyor ID Table
Dim Width_Row As String    ' Width row, string values such as 12" or 12in

Set rs = db.OpenRecordset("SELECT * FROM " & [Conveyor_ID] & " Where Width = " & [Width_Row])

根据为Width_row选择的值,我将得到两个不同的错误。

如果选择“14in”, “在运算符中没有()的错误”查询表达式'Width = 14in'“

如果选择“14”,  “查询表达式中字符串中的语法错误'Width = 12”'的错误。

我相信我不理解将变量添加到传递给Openrecordset方法的SQL字符串的语法。

1 个答案:

答案 0 :(得分:3)

问题是您是否在没有任何引号的情况下传递字符串,并将其与SQL连接。这会导致SQL无效。

这意味着您的最终字符串可能类似于:

SELECT * FROM someTable Where Width = 12in

那是无效的SQL。 SQL中的字符串需要用单引号或双引号括起来。

有很多方法可以解决这个问题。正确的方法是使用参数。

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qd As DAO.QueryDef
Const DbLoc As String = "DB location info"


Dim Conveyor_ID As String  ' Conveyor ID Table
Dim Width_Row As String    ' Width row, string values such as 12" or 12in
Set db = CurrentDb 'You were missing this in your sample
Set qd = db.CreateQueryDef("", "SELECT * FROM " & [Conveyor_ID] & " Where Width = @theWidth")
qd.Parameters("@theWidth") = [Width_Row]
Set rs = qd.OpenRecordset