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

2988
Kiki

Спасибо за вашу помощь, @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.] *

0
Вы хотите, чтобы макрос обновлял электронную таблицу из БД? Или вы хотите, чтобы макрос делал что-то в самой БД? Raystafarian 8 лет назад 0

1 ответ на вопрос

0
FreeMan

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

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параметр, чтобы принимать данные обратно из запроса.

Спасибо за ваш ответ, FreeMan. Извините, но я, кажется, пропустил тот факт, что я пытаюсь создать макрос, который будет выполнять хранимую процедуру в SQL, которая имеет более одного параметра. Kiki 8 лет назад 0
@ kiki - Я получил эту часть ... Прочитайте первый абзац под кодом. Особенно первое предложение. FreeMan 8 лет назад 0