Ausführen von SQL Stored Procedure über Excel (VBA) mit mehreren Parametern

3163
Kiki

Vielen Dank für Ihre Hilfe, @FreeMan.

Ich bin immer noch damit verloren.

Lass mich einfach von vorne anfangen.

Dies ist meine Frage in der Zusammenfassung (ich hoffe es 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 brauche eine Methode, die es mir ermöglicht, diese Abfrage mit den Parametern in einer angegebenen Zelle auszuführen, dh Zelle C3.

Ich hoffe, das macht die Sache etwas klarer. Ich bin nicht mit VBA vertraut, daher sind alle oben genannten Befehle verwirrend für mich.

Ursprüngliche Frage

* [Ich bin ein Neuling, wenn es um VBA geht, und ich habe Schwierigkeiten, meine Abfrage mit mehr als einem Parameter auszuführen. Ich verwende dieses Makro als, aber wenn ich es ausführen, wird mir mitgeteilt, 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 setze ich die Variablen auf Datumsformate ein? Ich brauche einen Bericht, um mir alle Transaktionen anzuzeigen <= ein bestimmtes Datum (variabler Parameter) 2. Die Position der Variablen in der Kalkulationstabelle, Zelle b2, bleibt für beide Parameter gleich. Zum Beispiel benötige ich eine Liste aller Transaktionen <= 31/12/2014 und einen Wert / Summe der Risikovorsorge zum selben Zeitpunkt 31.12.2014.] *

0
Sie möchten, dass das Makro die Tabelle von einer Datenbank aus aktualisiert? Oder Sie möchten, dass das Makro etwas in der Datenbank selbst macht? Raystafarian vor 9 Jahren 0

1 Antwort auf die Frage

0
FreeMan

Hier ist ein kurzes Beispiel für das Erstellen und Einstellen von Parametern in Ihrem Code:

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 von dicks-clicks.com geschrieben

Grundsätzlich müssen Sie die .Parameter.Add()Zeile für jeden Parameter in Ihrer gespeicherten Prozedur ausführen, und Sie können loslegen. Beachten Sie, dass Sie dafür kein Ganzes schreiben Sub()müssen. Sie können die Set oParam = oQuery.Parameters.Add()Zeile einfach in Ihren vorhandenen Code einfügen.

Sie möchten vielleicht ein wenig in die Optionen eintauchen, da Sie den Typ der gesendeten Daten angeben können und auch einen OUTParameter einrichten können, um Daten von der Abfrage zurückzunehmen.

Vielen Dank für Ihre Antwort, FreeMan. Entschuldigung, aber ich habe offenbar die Tatsache ausgelassen, dass ich versuche, ein Makro zu erstellen, das eine gespeicherte Prozedur in SQL ausführt, die mehr als einen Parameter hat. Kiki vor 9 Jahren 0
@kiki - Ich habe diesen Teil ... Lesen Sie den ersten Absatz unter dem Code. Vor allem der erste Satz. FreeMan vor 9 Jahren 0