%20%D1%81%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D0%BC%D0%B8%20%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%B0%D0%BC%D0%B8.png)
Спасибо за помощь, @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
параметр для приема данных обратно из запроса.