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”附近的语法不正确 [重复]