【发布时间】:2020-07-09 12:52:54
【问题描述】:
我正在尝试从 SQL Server 表(项目)中获取单个项目代码,以与在 Excel 工作表中输入的项目代码进行比较。为了实现这一点,我在 Excel 2019 中编写了以下 VBA 代码。
Function GetItemcodeFromSQLTable(sSQLArtikel As String) As String
Dim connection As New ADODB.connection
connection.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=SQL01;Initial Catalog=110"
Dim query As String
query = "select itemcode from items where itemcode = " & sSQLArtikel
Dim rs As New ADODB.Recordset
rs.Open query, connection
connection.Close
End Function
我在执行rs.open query, connection 行时不断收到错误消息。
这一切的目的是我想知道 SQL 表中是否已经存在 itemcode。如果没有,我的 VBA 代码的其余部分将创建一个 XML 文件以将新的 itemcode 导入 SQL 表。
我在 VBA 窗口中添加了对“Microsoft Active X Data Objects 6.1 Library”的引用。
谁能帮我解决这个问题?
非常感谢。
我现在使用的代码是
Function CheckIfArticleCodeExistsInSQLDatabase(sSQLArtikel As String) As String
Dim query As String
Dim connection As ADODB.connection
Dim rs As ADODB.Record
Dim cmd As ADODB.Command
' PREPARED STATEMENT WITH PARAM PLACEHOLDERS
query = "select itemcode from items where itemcode = " & "'" & sSQLArtikel & "'"
' OPEN CONNECTION
Set connection = New ADODB.connection
connection.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;" _
& "Data Source=SQL01;Initial Catalog=110"
' DEFINE COMMAND AND RECORDSET
Set cmd = New ADODB.Command
cmd.ActiveConnection = connection
Set rs = cmd.Execute(query, sSQLArtikel) ' BIND PARAM VALUES
' ... DO SOMETHING WITH rs
rs.Close: connection.Close
Set cmd = Nothing: Set rs = Nothing: Set connection = Nothing
End Function
执行命令“Set rs = cmd.Execute(query, sSQLArtikel)”时会显示错误消息“未为命令对象设置命令文本”。
我做错了什么,但是什么?
【问题讨论】:
-
您收到什么错误?
-
尝试更改:query =
"select itemcode from items where itemcode = " & sSQLArtikeltoquery = "select itemcode from items where itemcode = '" & sSQLArtikel & "'" -
@Brian M 斯塔福德。错误是“无效的列名”
-
@Zac。我已经以多种方式尝试了括号。但总是得到相同的结果。 “列名无效”
-
显而易见的问题,但您确定
itemcode列存在于items表中吗?
标签: sql sql-server excel vba