Executando procedimento armazenado SQL através do Excel (VBA) com vários parâmetros

Executando procedimento armazenado SQL através do Excel (VBA) com vários parâmetros

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 OUTparâmetro para aceitar dados de volta da consulta.

informação relacionada