%20com%20v%C3%A1rios%20par%C3%A2metros.png)
Obrigado pela sua ajuda, @FreeMan.
No entanto, ainda estou perdido com isso.
Deixe-me começar do zero.
Esta é a minha consulta em resumo (espero que esteja claro)
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"
Preciso de um método que me permita executar esta consulta usando os parâmetros em uma célula especificada, ou seja, célula C3.
Espero que isso deixe as coisas um pouco mais claras. Não estou familiarizado com o VBA, então todos os comandos recomendados acima são confusos para mim.
Pergunta original
*[Sou um novato quando se trata de VBA e por isso estou lutando para que minha consulta seja executada com mais de um parâmetro. Estou usando esta macro, mas quando a executo, ela informa que o segundo parâmetro não foi fornecido.
Sub RefreshQuery()
With ActiveWorkbook.Connections("MYSERVER").OLEDBConnection
.CommandText = "EXECUTE dbo.Tng_Market_Feed '" & Range("B2").Value & "'"
End With
ActiveWorkbook.Connections("MYSERVER").Refresh
End Sub
Minhas perguntas são: - 1. Como defino as variáveis para formatos de data? Preciso de um relatório que me mostre todas as transações <= uma determinada data (parâmetro variável) 2. A localização da variável na planilha, célula b2, permanece a mesma para ambos os parâmetros. Por exemplo, preciso de uma lista de todas as transações <= 31/12/2014 e um valor/soma da provisão para devedores duvidosos na mesma data 31/12/2014.]*
Responder1
Aqui está um exemplo rápido de como criar e definir parâmetros em seu código:
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
código rapidamente copiado depaus-clicks.com
Basicamente, você precisará executar a .Parameter.Add()
linha para cada parâmetro em seu procedimento armazenado e estará pronto para prosseguir. Observe que você não precisa escrever um inteiro Sub()
para fazer isso, basta incluir a Set oParam = oQuery.Parameters.Add()
linha em seu código existente.
Você pode querer se aprofundar um pouco nas opções, porque você pode especificar o tipo de dados que estão sendo enviados e também pode configurar um OUT
parâmetro para aceitar dados de volta da consulta.