PDA

Vollständige Version anzeigen : Makro für mehrere Abfragen


michaelknight404
16.10.2011, 18:09
Hi Zusammen

Ich arbeite mit Access 2003 und möchte für alle meine Auswahlabfragen einen einzigen Button auf dem Formular haben.
Auf dem Formular gibt es nicht genügend Platz, um für jede Abfrage einen eigenen Button zu erstellen.

Nach dem Klick soll sich eine InputBox öffnen, bei der man mittels Dropdown Feld die entsprechende Abfrage auswählen kann.

Gibt es für mein Problem eine bessere Lösung, wenn ja, welche? wenn nein, wie könnte man sowas codetechnisch realisieren?

Besten Dank für eure Mühen.

Gruss Michael

Maxel
16.10.2011, 19:27
Hallo Michael,

zunächst: Makros sind out (bis auf Ausnahmen), daher ist hier VBA angesagt.

InputBox und DropDownFeld lassen sich nicht kombinieren, zumindest nicht mit herkömmlichen Steuerelementen.

Du könntest zunächst alle Abfragen in einem Kombinationsfeld darstellen (alles Luftcode):

Dim db As Database, i As Integer, str As String
Set db = CurrentDb

For i = 1 To db.QueryDefs.Count
str = str & db.QueryDefs(i).Name & "; "
Next i
str = Left(str, Len(str) – 2) ‘Semikolon und Leerzeichen entfernen
DeinKombinationsfeld.RowSource = str ‘Herkunft auf Werteliste einstellen
Set db = Nothing

Damit erwischst Du aber alle Abfragen Deiner DB, und das möchtest Du möglicherweise nicht. Deshalb wäre es empfehlenswert, die Namen der gewünschten Abfragen in einer Tabelle zu verwalten und diese der RowSource des Kombinationsfeldes zuzuweisen (Herkunft = Tabelle statt Werteliste).

Ins Click-Ereignis Deines Buttons schreibst Du dann

CurrentDb.Execute DeinKombifeld, DbFailOnError

Probier's mal und schildere dann das Ergebnis.

PS: Das Ansinnen, dass User wahlweise Auswahlabfragen ausführen, ist zweifelhaft. Welchen Zweck verfolgst Du damit?

michaelknight404
16.10.2011, 21:51
Hi Maxel
Danke für deine Antwort.
Also anstatt ein Dropdown Feld in einer Box, mache ich ein Kombifeld auf dem Formular und der Button führt dann die ausgewählte Abfrage(im Kombifeld) aus.
Das ist sogar noch besser. Vielen Dank.

Aber es gibt ein neues Problem. Die Abfragen heissen beispielsweise "qry_Date", im Kombifeld sollte aber "Datum" stehen. Wie löse ich dieses Problem?

Zu deiner Frage. Ich bezwecke damit, dass die User auswählen können, wonach sie suchen bzw. nach welchen Kriterien sie sortieren wollen. Es sind soviele Abfragen, die haben nicht alle auf dem Formular platz. Ah Moment, es sind meistens Parameterabfragen, der User kann selber eingeben was er möchte.

Gruss Michael

achtelpetit
16.10.2011, 22:19
Da Du wahrscheinlich nicht alle Abfragen anbieten willst, kannst Du auch mit einer eigenen Namenskonvention arbeiten (z. B. qry_user_date). Maxels Code wäre dann noch um eine Bedingung zu erweitern.
Du kannst natürlich auch eine Hilfstabelle anlegen, die Du dann zu Fuß pflegst.

kama
17.10.2011, 07:35
Ich habe hier den Verdacht, dass man versucht für jedes Kriterium eine Abfrage zu erstellen. Dafür benutzt man IMHO Suchfelder. Eine kaskadierende Filterung geht auch.
Vielleicht gibt uns michaelknight404 ja mal die Preis was die einzelnen Abfragen sind.

doncorleoneder3
02.11.2011, 11:43
Hi Maxel

Execute funktioniert nur bei Action-Querys.

Für Select-Querys geht es aber mit

DoCmd.OpenQuery DeinKombofeld, acViewNormal