Ejecución del procedimiento almacenado de SQL a través de Excel (VBA) con múltiples parámetros

Ejecución del procedimiento almacenado de SQL a través de Excel (VBA) con múltiples parámetros

Gracias por tu ayuda, @FreeMan.

Sin embargo, todavía estoy perdido con esto.

Permítanme empezar desde cero.

Esta es mi consulta resumida (espero que quede clara)

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"

Necesito un método que me permita ejecutar esta consulta usando los parámetros en una celda específica, es decir, la celda C3.

Espero que esto aclare un poco las cosas. No estoy familiarizado con VBA, por lo que todos los comandos recomendados anteriormente me resultan confusos.

Pregunta original

*[Soy un novato en lo que respecta a VBA y por eso tengo dificultades para ejecutar mi consulta con más de un parámetro. Estoy usando esta macro pero cuando la ejecuto me dice que no se ha proporcionado el segundo parámetro.

Sub RefreshQuery()

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

End Sub

Mis preguntas son: - 1. ¿Cómo configuro las variables en formatos de fecha? Necesito un informe que me muestre todas las transacciones <= una fecha determinada (parámetro variable) 2. La ubicación de la variable en la hoja de cálculo, celda b2, sigue siendo la misma para ambos parámetros. Por ejemplo, necesito una lista de todas las transacciones <= 31/12/2014 y un valor/suma de provisión para deudas incobrables en la misma fecha 31/12/2014.]*

Respuesta1

Aquí hay un ejemplo rápido de cómo crear y configurar parámetros desde su 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 rápidamente extraído dedicks-clicks.com

Básicamente necesitarás ejecutar la .Parameter.Add()línea para cada parámetro en tu procedimiento almacenado y estarás listo para comenzar. Tenga en cuenta que no necesita escribir un completo Sub()para hacerlo, simplemente puede incluir la Set oParam = oQuery.Parameters.Add()línea en su código existente.

Es posible que desee profundizar un poco en las opciones, porque puede especificar el tipo de datos que se envían y también puede configurar un OUTparámetro para aceptar datos de la consulta.

información relacionada