Supportnet / Forum / Datenbanken
Abfragenexport / Parameter per VBA
Frage
Guten Morgen allerseits
Ich will eine Abfrage in ein Excel-Sheet exportieren. So weit so gut.
Nun das Problem, welches sich mir in den Weg stellt:
Die Abfrage erwartet einen Parameter ([PaymentID]).
Wie kann ich diesen Parameter vor dem Export setzen, um den Export auf die spezifische PaymentID zu beschränken?
Besten Dank für eure Hilfe
Antwort 1 von Flooooo
Einfache Lösung wäre: Abfrage kopieren, in der Kopie den Parameter fix angeben, und dann diese Abfage (streng genommen exportierst du übrigens keine Abfrage, sondern ein Result, aber wir wollen mal nicht so sein ;-) exportieren.
Antwort 2 von MikeNikles
Einverstanden... wir wollen mal nicht so sein;)
Die Lösung ist fast zu einfach..*g*
Die Applikation läuft bei einem Kunden und somit können x-beliebige PaymentIDs vorhanden sein...
Kann also nicht für jede eine Abfrage machen..
Habe schon versucht mit den QueryDefs was zu
basteln.. Setze dort den Parameter doch um einen
Export zu tätigen muss ich einen Abfragenamen angeben..
Mühsam das Ganze....*g*
Die Lösung ist fast zu einfach..*g*
Die Applikation läuft bei einem Kunden und somit können x-beliebige PaymentIDs vorhanden sein...
Kann also nicht für jede eine Abfrage machen..
Habe schon versucht mit den QueryDefs was zu
basteln.. Setze dort den Parameter doch um einen
Export zu tätigen muss ich einen Abfragenamen angeben..
Mühsam das Ganze....*g*
Antwort 3 von Flooooo
Hmmm.... ich dachte, es wäre einmalig...
Aber, blöde frage: Wenn die PaymentId sich immer ändert, dfann ist doch die Parameterabfrage völlig angebracht vor dem Export, oder nicht?
Ich meinew: Wenns immer dieselbe ist, kann man es fest in der Abnfrage verdrahten, aber wenn der Kunde immer ne andere braucht, muss er die ID halt eingeben?
Oder hab ich was falsch veratanden?
Aber, blöde frage: Wenn die PaymentId sich immer ändert, dfann ist doch die Parameterabfrage völlig angebracht vor dem Export, oder nicht?
Ich meinew: Wenns immer dieselbe ist, kann man es fest in der Abnfrage verdrahten, aber wenn der Kunde immer ne andere braucht, muss er die ID halt eingeben?
Oder hab ich was falsch veratanden?
Antwort 4 von MikeNikles
Ja weisst du, ich dachte dass ich der Einfachheit wegen nur einen Parameter erwähne... War wohl nicht optimal;)
Weiter zu PaymentId gibt es noch Parameter wie Start- und Enddatum, sowie eine AccountId.
Ok, versuche mich nochmals anders zu formulieren, kann sein dass ich vorhin noch müde war;)
Hab eine Abfrage. Diese erwartet 4 Parameter.
Diese Abfrage wird für verschiedene Zwecke benötigt, deswegen die Flexibilität durch die Parameter.
Nun will ich alle Payments (PaymentId=*) exportieren.
Beim Export-Befehl den ich benötige (DoCmd.TransferSpreadsheet(..)) muss ich einen Abfragenamen angeben. Das Resultat dieser Abfrage wird dann exportiert.
Bevor ich nun diesen Export machen kann, muss ich per VBA die 4 Parameter der Abfrage setzen. Für den Benutzer muss dies tranparent sein (keine manuelle Eingabe!).
Dies ist nun die Frage: Wie kann ich nun der Abfrage klar machen, dass z.B. die PaymentId gleich * ist (alle Payments)?
Hoffe diese Erklärung hilft weiter und danke für dein Verständnis;)
Weiter zu PaymentId gibt es noch Parameter wie Start- und Enddatum, sowie eine AccountId.
Ok, versuche mich nochmals anders zu formulieren, kann sein dass ich vorhin noch müde war;)
Hab eine Abfrage. Diese erwartet 4 Parameter.
Diese Abfrage wird für verschiedene Zwecke benötigt, deswegen die Flexibilität durch die Parameter.
Nun will ich alle Payments (PaymentId=*) exportieren.
Beim Export-Befehl den ich benötige (DoCmd.TransferSpreadsheet(..)) muss ich einen Abfragenamen angeben. Das Resultat dieser Abfrage wird dann exportiert.
Bevor ich nun diesen Export machen kann, muss ich per VBA die 4 Parameter der Abfrage setzen. Für den Benutzer muss dies tranparent sein (keine manuelle Eingabe!).
Dies ist nun die Frage: Wie kann ich nun der Abfrage klar machen, dass z.B. die PaymentId gleich * ist (alle Payments)?
Hoffe diese Erklärung hilft weiter und danke für dein Verständnis;)
Antwort 5 von Flooooo
Wie wäre es mit DoCmd.ApplyFilter(Filtername, WhereCondition) - das klingt doch ganz gut?
(Habs aber auch noch nie benutzt, nur gerade gefunden)
(Habs aber auch noch nie benutzt, nur gerade gefunden)
Antwort 6 von Flooooo
Eine andere Möglichkeit wäre, deine Abfrage direkt in VBA mit DoCmd.RunSQL direkt zu parametrisieren und auszuführen - aber wie du das dann in Excel kriegst...?
Antwort 7 von MikeNikles
Diese Funktion lässt sich nur auf Tabellen, Formulare oder Berichte anwenden...
Muss mal schauen wie ich da weiterkomme..
Bin natürlich froh um weitere Infos
Muss mal schauen wie ich da weiterkomme..
Bin natürlich froh um weitere Infos
Antwort 8 von Flooooo
grrrrr.... ich weiß doch, warum ich Access nicht mag.... einen Unterschied zwischen Tabellen und Abfragen zu machen...
Oder hast du dich auf RunSQL bezogen? Ich meinte das eher so: Vergiss die in Access definierte Abfrage, sondern führe das SQL direkt aus
Oder hast du dich auf RunSQL bezogen? Ich meinte das eher so: Vergiss die in Access definierte Abfrage, sondern führe das SQL direkt aus
Antwort 9 von MikeNikles
Nein nein, ich meinte scho das ApplyFilter-Zeugs...
Klar wenn ich das SQL direkt ausführe ist die Parametersache kein Problem.
Bei der Funktion DoCmd.TransferSpreadsheet muss ich dann trotzdem einen Abfrage- oder Tabellennamen angeben.
Naja mach ichs eben so wie ichs nicht machen wollte..;)
Die Performance ist halt nicht mehr so gut aber werde wohl nicht drumherum kommen, das Resultat des SQL-Statements in eine temporäre Tabelle zu speichern und diese anschliessend ins Excel zu exportieren..
Danke trotzdem für deine Bemühungen!
Klar wenn ich das SQL direkt ausführe ist die Parametersache kein Problem.
Bei der Funktion DoCmd.TransferSpreadsheet muss ich dann trotzdem einen Abfrage- oder Tabellennamen angeben.
Naja mach ichs eben so wie ichs nicht machen wollte..;)
Die Performance ist halt nicht mehr so gut aber werde wohl nicht drumherum kommen, das Resultat des SQL-Statements in eine temporäre Tabelle zu speichern und diese anschliessend ins Excel zu exportieren..
Danke trotzdem für deine Bemühungen!
Antwort 10 von Floooo
Wenn du mit temporären Objekten arbeitest: Isses nicht performanter, mit VBA ein neues Abfrage-Objekt zu erzeugen (da das fertiggestellte SQL enthält), und dessen Ergebnis dann nach Excel zu kopieren?
Vorteil wäre, dass die Daten glaub ich direkt abgefragt und nach Excel geschrieben werden, während du bei einer temporären Tabelle zuerst die Abfrage laufen lässt, dann Daten in die Tabelle schreibst und die dann nochmal kopierst.
Vorteil wäre, dass die Daten glaub ich direkt abgefragt und nach Excel geschrieben werden, während du bei einer temporären Tabelle zuerst die Abfrage laufen lässt, dann Daten in die Tabelle schreibst und die dann nochmal kopierst.
Antwort 11 von MikeNikles
Oh tönt interessant!
Wie erzeuge ich denn ein temporäres Abfrage-Objekt?
Wie erzeuge ich denn ein temporäres Abfrage-Objekt?
Antwort 12 von sj
Kannst doch aus deinem SQL aus VBA eine neue Abfrage erstellen.
Dim QD As QueryDef
SQL = "select ... from .. where ....."
Set QD = db.CreateQueryDef("NameAbfrage", SQL)
Dann haste wieder eine Abrfage die deine Parameter hat.
Dim QD As QueryDef
SQL = "select ... from .. where ....."
Set QD = db.CreateQueryDef("NameAbfrage", SQL)
Dann haste wieder eine Abrfage die deine Parameter hat.
Antwort 13 von Flooooo
Naja, halt genauso, wie du eine neue Tabelle erzeugst. Und nach der Verwendung löscht du das Ding halt wieder.
Einstieg wäre zB die CreateQueryDef-Methode
Einstieg wäre zB die CreateQueryDef-Methode
Antwort 14 von Flooooo
Ups, war ich zu langsam... :-)
Antwort 15 von MikeNikles
Vielen Dank!
Test deinen Code gleich nach dem Mittag;)
Werde mich nochmals melden hier.
Test deinen Code gleich nach dem Mittag;)
Werde mich nochmals melden hier.

