gpt4 book ai didi

vba - 在 SQL 中连接的字符串变量( Access DB),由于引号引起的语法错误?

转载 作者:行者123 更新时间:2023-12-04 13:04:28 27 4
gpt4 key购买 nike

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

输送机_ID 是 Access 表名
宽度 是表 Conveyor_ID 中的字段名称
宽度_行是字段宽度中的值的字符串值

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'中没有()的In运算符”的错误

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

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

最佳答案

问题是您传递的字符串没有任何引号,并将其与 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

关于vba - 在 SQL 中连接的字符串变量( Access DB),由于引号引起的语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48175083/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com