%20mit%20mehreren%20Parametern.png)
Danke für Ihre Hilfe, @FreeMan.
Ich bin damit jedoch immer noch ratlos.
Lassen Sie mich einfach von vorne beginnen.
Dies ist meine Anfrage in der Zusammenfassung (ich hoffe, sie ist klar)
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"
Ich benötige eine Methode, die es mir ermöglicht, diese Abfrage mit den Parametern in einer angegebenen Zelle, also Zelle C3, auszuführen.
Ich hoffe, dass dies die Dinge etwas klarer macht. Ich bin mit VBA nicht vertraut, daher sind alle oben empfohlenen Befehle für mich verwirrend.
Ursprüngliche Frage
*[Ich bin ein Neuling, was VBA angeht, und habe daher Probleme, meine Abfrage mit mehr als einem Parameter auszuführen. Ich verwende dieses Makro, aber wenn ich es ausführe, wird mir angezeigt, dass der zweite Parameter nicht angegeben wurde.
Sub RefreshQuery()
With ActiveWorkbook.Connections("MYSERVER").OLEDBConnection
.CommandText = "EXECUTE dbo.Tng_Market_Feed '" & Range("B2").Value & "'"
End With
ActiveWorkbook.Connections("MYSERVER").Refresh
End Sub
Meine Fragen sind:- 1. Wie stelle ich die Variablen auf Datumsformate ein? Ich brauche einen Bericht, der mir alle Transaktionen <= ein bestimmtes Datum anzeigt (variabler Parameter). 2. Die Position der Variablen in der Tabelle, Zelle b2, bleibt für beide Parameter gleich. Ich brauche beispielsweise eine Liste aller Transaktionen <= 31.12.2014 und einen Wert/Summe der Wertberichtigungen für uneinbringliche Forderungen zum gleichen Datum, dem 31.12.2014.]*
Antwort1
Hier ist ein kurzes Beispiel zum Erstellen und Festlegen von Parametern innerhalb Ihres Codes:
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
Code schnell abgeschrieben vondicks-clicks.com
Im Grunde müssen Sie die .Parameter.Add()
Zeile für jeden Parameter in Ihrer gespeicherten Prozedur ausführen, und schon kann es losgehen. Beachten Sie, dass Sie Sub()
dafür kein Ganzes schreiben müssen, sondern die Set oParam = oQuery.Parameters.Add()
Zeile einfach in Ihren vorhandenen Code einfügen können.
Möglicherweise möchten Sie sich etwas eingehender mit den Optionen befassen, da Sie die Art der zu sendenden Daten angeben und auch einen Parameter einrichten können OUT
, um Daten von der Abfrage zurückzunehmen.