%20con%20m%C3%BAltiples%20par%C3%A1metros.png)
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 OUT
parámetro para aceptar datos de la consulta.