#sql #vba #parameters #adodb
#sql #vba #параметры #adodb
Вопрос:
Я пытаюсь передать список параметров SQL-запросу в VBA, у меня есть таблица Excel со списком кодов в динамическом диапазоне, может быть 2, может быть 2000. Затем я хочу вернуть все данные из SQL, где коды совпадают. Ниже я пытаюсь определить параметр ADODB как массив, затем я хочу передать его в SQL.
Однако определение переменной параметра как диапазона приводит к несоответствию типов. Или объект требуется, если я не определяю как массив;
Dim conn As New ADODB.Connection
conn.Open "Provider=SQLOLEDB; Data Source=XXXXXXXXX; Initial Catalog=CDB; Integrated Security=SSPI;"
Dim code(0) As ADODB.Parameter
Set code(0) = wb.ActiveSheet.Range(Cells(2, colCode), Cells(rowCount, colCode)).Value
'Dim code As ADODB.Parameter
'Set code = wb.ActiveSheet.Range(Cells(2, colCode), Cells(rowCount, colCode)).Value
'Dim code(rowCount - 1) As ADODB.Parameter
'Set code(rowCount - 1) = wb.ActiveSheet.Range(Cells(2, colCode), Cells(rowCount, colCode)).Value
Set cmd = New ADODB.Command
Set rs = New ADODB.Recordset
With cmd
.ActiveConnection = conn
.CommandType = adCmdText
.Parameters.Append .CreateParameter("@code", adVarChar, adParamInput, 10000, code)
.CommandTimeout = 0
End With
sql = "SELECT * FROM table WHERE code in (?);"
cmd.CommandText = sql
Set rs = cmd.Execute
Комментарии:
1. Вы не можете использовать диапазон (или массив) в качестве параметра, вам нужно будет повторить диапазон и создать разделенную строку (экранированных) значений и использовать ее в предложении IN () .
2. … или создайте параметр для каждого значения в вашем диапазоне (и один
?
в вашем sql-операторе)