sql的vba代码中''附近的语法不正确

Posted

技术标签:

【中文标题】sql的vba代码中\'\'附近的语法不正确【英文标题】:Incorrect syntax near '' in vba code for sqlsql的vba代码中''附近的语法不正确 【发布时间】:2022-01-18 12:08:31 【问题描述】:

我收到此错误是因为尝试将 Itemnr2 变量作为单元格值。如果我使用像 ItemNr1 中的普通值,则一切正常。但我需要使用单元格中的值,因为它会不时更改,所以不希望每次都更改代码。如何将单元格中的值放入 SQL 代码以使其正确?

当我在所有值都是数字的其他列中使用它时它正在工作。在我需要的这个列中有像 b2b_pkl 这样的值,因此在将 nvarchar 值转换为数据类型 int 错误时,我得到那些转换失败。

PA = get_market_setting(market, "PA")
POS = get_market_setting(market, "POS")
NetAmount = get_market_setting(market, "Net Amount")
CostAmount = get_market_setting(market, "Cost Amount")
qty = get_market_setting(market, "Quantity")
transNo = get_market_setting(market, "Transaction No.")
ItemNo = get_market_setting(market, "Item No.")
CustNo = "[Customer No_]"
ItemNr1 = "('80502842')"
Itemnr2 = ThisWorkbook.Sheets("Data").Range("C1").Value
ECPOS_arr = "(" & get_market_setting("LT", "ECPOS_Arr") & ")"



' SQL query string
    myquery = "SELECT -SUM(" & NetAmount & ") AS [Result] FROM " & table_TSE & _
        " WHERE " & ItemNo & " IN " & Itemnr2 & _
        " AND [Date] BETWEEN '" & date_from & "' AND '" & date_to & "'"
        

' Set Recordset to query set database on SQL string
    Set sourceRs = sourceDb.OpenRecordset(myquery)

'Assign Data to variable from RecordSet'
sourceRs.MoveFirst
NetAmount = sourceRs![Result]

sourceRs.Close
sourceDb.CloseRecordset
'Populate HFB Report file'

enter image description here

【问题讨论】:

请勿贴代码图片。而是包含代码本身,以便人们可以根据需要复制/粘贴它。 使用您无法控制的工作表中的数据手动构造 SQL 字符串可能不是一个好主意,因为它存在 SQL 注入的风险。请参阅***.com/questions/35163361/… 进行讨论,这可能也可以解决您的问题。 Intemnr2 应该在括号之间。 当我在 ECPOS_arr 变量中放置括号时出现错误“将 nvarchar 值转换为数据类型 int 时转换失败。 单元格 C1 中有什么?它是单个值还是逗号分隔的值列表?另请说明您尝试访问的 DBMS 是 SQL Server 吗? 【参考方案1】:

如果 ItemNo 和 Itemnr2 总是有括号并且没有单引号,则应将其视为字符串:

Itemnr2 = ThisWorkbook.Sheets("Data").Range("C1").Value

myquery = "SELECT -SUM(" & NetAmount & ") AS [Result] FROM " & table_TSE & _
    " WHERE '" & ItemNo & "' = '" & Itemnr2 & _
    "' AND [Date] BETWEEN '" & date_from & "' AND '" & date_to & "'"

【讨论】:

收到错误“将 nvarchar 值转换为数据类型 int 时转换失败。” 现在项目位于单引号之间,因此可能导致问题的唯一字段是 NetAmount。此字段上的值是否始终为数字? 现在使用您的代码,我没有收到任何错误,而且宏也没有任何值,因为将其粘贴到其他单元格时它是空的 但这不可能是正确的,因为以前使用旧代码和 Itemnr1 我从 sql 中得到了数字 感谢您的宝贵时间,我发布了新的。

以上是关于sql的vba代码中''附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

执行 INSERT 时出现 SQL 错误:“s”附近的语法不正确 [重复]

sql-server:“,”附近的语法不正确

SQL错误关键字'user'附近的语法不正确[重复]

SQL 命令错误:“4”附近的语法不正确 [重复]

SQL 创建视图,显示视图,关键字“SELECT”附近的语法不正确

SQL日期查询中的VBA变量