【问题标题】:Put VBA variable in SQL query in excel将 VBA 变量放入 Excel 中的 SQL 查询中
【发布时间】:2018-10-04 16:45:25
【问题描述】:

我有这个有效的代码:

sqlQuery = ("SELECT monthdata.VAL, monthdata.MONTHVAL, monthdata.GREEN, monthdata.RED, monthdata.RAG, monthdata.CREATOR FROM data LEFT JOIN monthdata ON data.UID = monthdata.DATAUID WHERE [UID] = '" & (IDcell) & "' AND [MONTHVAL] = #" & Format((month1), "mm/dd/yyyy") & "#")

我对结尾特别感兴趣,即这一点:

[MONTHVAL] = #" & Format((month1), "mm/dd/yyyy") & "#")

我现在有一个变量“month1formatted”,它已经是 mm/dd/yyyy 格式。所以我试图把它作为替换并丢失格式化位。这就是我最终得到的结果:

sqlQuery = ("SELECT monthdata.VAL, monthdata.MONTHVAL, monthdata.GREEN, monthdata.RED, monthdata.RAG, monthdata.CREATOR FROM data LEFT JOIN monthdata ON data.UID = monthdata.DATAUID WHERE [UID] = '" & (IDcell) & "' AND [MONTHVAL] = month1formatted"

但是,扼杀这行不通。我是否以错误的方式将变量放在最后?

当我打印变量 sqlQuery 时,它打印的是变量 (i.e AND [MONTHVAL] = month1formatted) 的文本名称,而不是变量的值,但我知道变量设置正确

【问题讨论】:

  • 你是如何声明month1的?处理日期很棘手......我将变量声明为字符串,看看它是否返回正确的格式
  • 喜欢这个currentdate = Worksheets("Data").Cells(6, "A").Value month1 = Format(currentdate, "mm/dd/yyyy") 编辑了我上面的评论
  • 您应该参数化您的查询。想想IDcell = "' GO; DROP TABLE data --"

标签: sql excel vba


【解决方案1】:

这没什么奇怪的,你已经在你的 SQL 字符串中嵌入了一个变量,而你的 SQL 引擎对此一无所知。

用新字符串中的month1formatted 替换原始字符串中的Format((month1), "mm/dd/yyyy"),奇迹就会发生。

sqlQuery = "SELECT monthdata.VAL, monthdata.MONTHVAL, monthdata.GREEN, " & _
           "       monthdata.RED, monthdata.RAG, monthdata.CREATOR " & _
           "  FROM data " & _
           "       LEFT JOIN monthdata ON data.UID = monthdata.DATAUID " & _
           " WHERE [UID] = '" & IDcell & "' " & _
           "  AND [MONTHVAL] = #" & month1formatted & "#"

此外,您的字符串文字不需要括在括号 () 周围,并且我使用换行符对其进行了格式化以简化可读性。

哦,按照共产国际的指示进行操作并参数化查询!这个accepted answer 就是一个很好的例子。

【讨论】:

  • 非常感谢
  • 使用参数化查询(如“共产国际”的“指示”)是避免(或减少发生)SQL注入的一种手段......强烈建议遵循以下建议“接受的答案”
  • @ÁlvaroGustavoLópez - 感谢您澄清这一点。我应该这样做的。
  • 我在工业软件中看到过——据说是该领域的专业人士写的——犯了这个错误(SQL注入)……确实,我和供应商就这件事发生了争执。毕竟,即使在这样一个“现代”领域,这种体验也是一位好老师……不是吗?
猜你喜欢
  • 2021-04-28
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
相关资源
最近更新 更多