Выполнение хранимой процедуры SQL через Excel (VBA) с несколькими параметрами

Спасибо за вашу помощь, @FreeMan.

Тем не менее, я все еще потерян с этим.

Позвольте мне начать с нуля.

Это мой запрос в итоге (надеюсь, это понятно)

SELECT DISTINCT Q1,Q2,Q3

from(SELECT A,B,C) Q1

full outer join

(SELECT A,B,C

from tblA as a

join tblB as b

on a.aID = b.bID

join tblC as c

on b.bID = c.cID

where (a,b, cdate <= ?

group by c) Q2

ON Q1.A = Q2.B

WHERE Convert(DATETIME, Q1.[B], 103) <= ?

order by Q1.[A]

When I try to refresh my table, I get the following error message

"[Microsoft][ODBC SQL Server Driver]Invalid Parameter number" and then

"[Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index"

Мне нужен метод, который позволит мне выполнить этот запрос, используя параметры в указанной ячейке, то есть ячейке C3.

Надеюсь, это прояснит ситуацию. Я не знаком с VBA, поэтому все приведенные выше команды меня смущают.

Оригинальный вопрос

*[Я новичок, когда дело доходит до VBA, и поэтому я изо всех сил стараюсь, чтобы мой запрос выполнялся с более чем одним параметром. Я использую этот макрос, но когда я запускаю его, он говорит мне, что второй параметр не был предоставлен.

Sub RefreshQuery()

With ActiveWorkbook.Connections("MYSERVER").OLEDBConnection
    .CommandText = "EXECUTE dbo.Tng_Market_Feed '" & Range("B2").Value & "'"
End With
ActiveWorkbook.Connections("MYSERVER").Refresh

End Sub

Мои вопросы:- 1. Как мне установить переменные в формат даты? Мне нужен отчет, чтобы показать мне все транзакции <= определенная дата (параметр переменной) 2. Расположение переменной в электронной таблице, ячейка b2, остается одинаковым для обоих параметров. Например, мне нужен список всех транзакций <= 31.12.2014 и значение / сумма резерва по сомнительным долгам на ту же дату 31.12.2014.]*

1 ответ

Вот краткий пример создания и установки параметров из вашего кода:

Sub CreateParam()

     Dim oQuery As QueryTable
     Dim oParam As Parameter

     Set oQuery = Sheet3.QueryTables(1)

     oQuery.CommandText = Replace(oQuery.CommandText, "='Berlin'", "=?")

     Set oParam = oQuery.Parameters.Add("CityParam")

     oParam.SetParam xlRange, Sheet3.Range("J1")
     oParam.RefreshOnChange = True

     oQuery.Refresh

End Sub

код быстро взломан с dicks-clicks.com

В основном вам нужно выполнить .Parameter.Add() строка для каждого параметра в вашей хранимой процедуре, и вам будет хорошо идти. Обратите внимание, что вам не нужно писать целое Sub() чтобы сделать это, вы можете просто включить Set oParam = oQuery.Parameters.Add() строка в вашем существующем коде.

Возможно, вы захотите немного покопаться в опциях, потому что вы можете указать тип отправляемых данных, а также можете настроить OUT параметр, чтобы принять данные обратно из запроса.

Другие вопросы по тегам