【问题标题】: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 注入的风险。请参阅stackoverflow.com/questions/35163361/… 进行讨论,这可能也可以解决您的问题。
  • Intemnr2 应该在括号之间。
  • 当我在 ECPOS_arr 变量中放置括号时出现错误“将 nvarchar 值转换为数据类型 int 时转换失败。
  • 单元格 C1 中有什么?它是单个值还是逗号分隔的值列表?另请说明您尝试访问的 DBMS 是 SQL Server 吗?

标签: sql excel vba navision


【解决方案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 中得到了数字
  • 感谢您的宝贵时间,我发布了新的。
猜你喜欢
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 2018-06-26
  • 2016-10-22
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多