Supportnet Computer
Planet of Tech

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*

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?

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;)

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)

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

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

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!

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.

Antwort 11 von MikeNikles

Oh tönt interessant!

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.

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

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.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: