Abfragen [basics]: Parameterabfragen

Abfragen sind unter Access das Schweizer Taschenmesser zum Abfragen von Daten aus verschiedenen Feldern unterschiedlicher Tabellen mit bestimmten Kriterien, Sortierungen und Gruppierungen. Bei den Kriterien gibt es allerdings einen kleinen Haken: Gelegentlich sollen nicht feste Kriterien verwendet werden, sondern der Benutzer möchte die Kriterien zur Laufzeit eingeben können. Das ist möglich, indem er immer wieder in die Entwurfsansicht wechselt, die Vergleichswerte anpasst und wieder zur Datenblattansicht umschaltet. Allerdings macht dies auf Dauer keinen Spaß. Da passt es doch gut, dass Access mit den sogenannten Parameterabfragen die Möglichkeit bietet, die Vergleichswerte

Beispieldatenbank

Die Beispiele dieses Artikels findest Du in der Datenbank AbfragenBasics_Parameterabfragen.accdb.

Beispieltabelle

Wir verwenden die Tabelle tblAutoren als Beispieltabelle. Sie enthält verschiedene Felder wie Vorname, Nachname, Geburtsdatum oder Nationalität, mit denen wir experimentieren können.

Diese Tabelle sieht wie in Bild 1 aus.

Tabelle mit Beispieldaten

Bild 1: Tabelle mit Beispieldaten

Vorbereitung: Kriterien in einfachen Abfragen

Wenn wir eine einfache Abfrage mit einem Kriterium nutzen wollen, gehen wir beispielsweise wie folgt vor:

  • Wir legen mit dem Ribbon-Befehl Erstellen|Abfragen|Abfrageentwurf eine neue Abfrage an.
  • Dieser fügen wir die als Datensatzquelle zu verwendende Tabelle hinzu, hier tblAutoren.
  • Dann ziehen wir alle Felder, die angezeigt oder als Kriterium verwendet werden sollen, zum Entwurfsraster der Abfrage hinzu.
  • Wenn wir beispielsweise alle Autoren ermitteln wollen, deren Vorname mit A beginnt, fügen wir für das Feld Vorname das folgende Kriterium hinzu: Wie ‘A*’

Der Abfrageentwurf sieht anschließend wie in Bild 2 aus.

Abfrage zum Ermitteln aller Autoren, deren Vorname mit A beginnt.

Bild 2: Abfrage zum Ermitteln aller Autoren, deren Vorname mit A beginnt.

Wechseln wir nun in die Datenblattansicht, erhalten wir das Ergebnis aus Bild 3.

Abfrageergebnis mit allen Autoren, deren Vorname mit A beginnt.

Bild 3: Abfrageergebnis mit allen Autoren, deren Vorname mit A beginnt.

Wollen wir nun nicht alle Autoren liefern, deren Vorname mit A beginnt, sondern jene, deren Vorname mit B beginnt, müssen wir zurück in die Entwurfsansicht wechseln. Hier ändern wir den Vergleichswert für das Feld Vorname in den Ausdruck Wie ‘B*’.

Wechseln wir anschließend wieder zur Datenblattansicht, zeigt die Abfrage alle Autoren an, deren Vorname mit B beginnt.

Das kann man bestenfalls dem Entwickler einer Datenbank zumuten oder sich selbst, wenn man gelegentlich bestimmte Abfragen durchführen möchte.

Wenn wir jedoch eine Datenbank für einen Mitarbeiter oder einen Kunden entwerfen, sollten wir diesem nicht den Entwurf von Abfragen überlassen. Dafür bietet Access elegantere Möglichkeiten.

Abfrage mit Parameter ausstatten

Diese Möglichkeit nennt sich Parameterabfrage. Eine solche Abfrage ist eine normale Abfrage, bei der wir für die Felder, nach denen gefiltert werden soll, Kriterien auf eine bestimmte Art festlegen.

Innerhalb dieser Kriterien können wir in eckige Klammern eingefasste Parameter definieren, deren Wert erst beim Anzeigen der Datenblattansicht der Abfrage vom Benutzer eingegeben werden muss. Wir zeigen das an einem ersten Beispiel, in welchem wir alle Datensätze ermitteln wollen, die im Feld Vorname einen bestimmten Wert enthalten.

Dazu erstellen wir eine Kopie der zuvor verwendeten Abfrage qryAutorenMitA und speichern diese unter dem Namen qryAutorenNachNachname.

In dieser ersetzen wir das Kriterium für das Feld Vorname durch den folgenden Ausdruck:

[Welcher Vorname]

Der Abfrageentwurf sieht nun wie in Bild 4 aus.

Abfrage mit einem Parameter für das Feld Vorname

Bild 4: Abfrage mit einem Parameter für das Feld Vorname

Damit haben wir bereits die wichtigsten Elemente eines Parameters für ein Abfragefeld vorgestellt:

  • Er wird in eckige Klammern eingefasst.
  • Er enthält den Text, der später beim Abfragen des Parameterwertes angezeigt wird.

Ergebnis einer Abfrage mit Parameter anzeigen

Um diesen Parameter zu nutzen, wechseln wir einfach in die Datenblattansicht. Diese wird jedoch nicht direkt angezeigt. Zuvor erscheint eine Inputbox mit dem Titel Parameterwert eingeben und dem Text, den wir für den Parameter in eckigen Klammern festgelegt haben (siehe Bild 5).

Eingeben des Parameterwertes

Bild 5: Eingeben des Parameterwertes

Anschließend finden wir das korrekte Ergebnis wie in Bild 6 vor.

Abfrageergebnis mit dem Vornamen Albert

Bild 6: Abfrageergebnis mit dem Vornamen Albert

Regeln für die Texte von Parametern

Weiter oben haben wir einfach eine Frage in eckige Klammern eingefasst, damit diese bei der Anzeige der Inputbox zur Abfrage des Parameters angezeigt wird. Man könnte auch auf die Idee kommen, zur Abfrage des Vergleichswertes für das Feld Vorname einfach den Text Vorname in eckige Klammern zu schreiben, also [Vorname].

Einen Feldnamen in eckigen Klammern erkennt Access jedoch nicht als Parameter, sondern als Feldname. Access verwendet dann für jeden Datensatz den Wert dieses Feldes als Vergleichskriterium.

Das heißt, Access entscheidet, ob der aktuelle Datensatz dem Kriterium entspricht, in dem es den Wert des Feldes mit dem Wert des Feldes aus dem Vergleichskriterium vergleicht – und dies liefert immer True. Also werden einfach alle Datensätze angezeigt. Verwende also einfach keinen der Feldnamen als Text des Parameters.

Nicht erlaubt sind die Zeichen Punkt (.) und Ausrufezeichen (!). Verwenden wir diese, erhalten wir beim Öffnen der Abfrage eine Meldung wie in Bild 9.

Fehler bei Eingabe von Punkt (.) oder Ausrufezeichen (!) im Parametertext

Bild 7: Fehler bei Eingabe von Punkt (.) oder Ausrufezeichen (!) im Parametertext

Parameter mit Platzhaltern

Damit können wir nur nach Datensätzen suchen, die exakt den für den Parameter angegebenen Vornamen enthalten. Wollen wir wie in der zu Beginn vorgestellten Abfrage auch Datensätzen finden, deren Vorname mit A beginnt oder sogar nach solchen, die eine bestimmte Zeichenkette enthalten, müssen wir eine Änderung am Kriterium vornehmen.

Dazu gibt es verschiedene Möglichkeiten. Die wichtigste ist, dass wir das Wie-Schlüsselwort verwenden, statt keinen Vergleichsoperator anzugeben. Wenn wir keinen Vergleichsoperator angeben, ist das gleichbedeutend mit dem Gleichheitszeichen. Damit finden wir nur Datensätze, bei denen der Inhalt des Textfeldes exakt mit dem Vergleichswert übereinstimmt.

Die zweite Möglichkeit ist, dass wir entweder selbst Platzhalter wie das Sternchen für den Vergleichswert vorgeben oder dem Benutzer diese Aufgabe überlassen. Für eine flexiblere Abfrage wählen wir die zweite Variante. Das heißt, dass wir den Parameter wie in Bild 7 gestalten.

Abfragekriterium für Vergleichswerte mit Platzhaltern

Bild 8: Abfragekriterium für Vergleichswerte mit Platzhaltern

Wechseln wir nun in die Datenblattansicht, finden wir die gleiche Parameterabfrage vor wie zuvor, allerdings können wir diesmal auch Vergleichswerte mit Platzhaltern wie dem Sternchen eingeben, also zum Beispiel wie im allerersten Beispiel A* (siehe Bild 8). Damit erhalten wir dann wieder alle Datensätze, deren Wert im Feld Vorname mit A beginnt.

Platzhalter mit Sternchen eingeben

Bild 9: Platzhalter mit Sternchen eingeben

Parameterabfrage aus Sicht des Benutzers

Wichtig bei der Parameterabfrage ist natürlich, dass der Benutzer diese einfach bedienen kann. In den Beispielen wechselten wir noch zwischen Entwurfsansicht und Datenblattansicht hin und her und konnten so die Parameterwerte erneut eingeben.

Der Benutzer soll die Entwurfsansicht eigentlich gar nicht zu sehen bekommen. Genau genommen wird er in einer professionellen Anwendung noch nicht Mal Kontakt mit Abfragen haben, sondern deren Ergebnisse in einem Formular präsentiert bekommen, über das er auch die für die Parameterwerte zu verwenden Kriterien eingeben wird.

Wenn der Benutzer jedoch selbst Parameterabfragen öffnet, zeigt ihm Access das Parameterfenster vor dem Öffnen des Abfrageergebnisses an, sodass er hier die gewünschten Vergleichswerte eingeben kann.

Erneute Parameterabfrage per Tastenkombination

Weiter oben haben wir erwähnt, dass es ebenfalls umständlich ist, bei Verwendung fester Kriterien immer wieder in den Entwurf zu wechseln und die Vergleichswerte dort anzupassen, bevor man das neue Ergebnis in der Datenblattansicht erhält. Genauso könnte man nun annehmen, der Benutzer müsse die Abfrage immer wieder schließen und erneut öffnen, um die Vergleichswerte erneut einzugeben. Das ist jedoch nicht der Fall.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar