Zusammenfassung
Lernen Sie, wie Sie per VBA Suchkriterien auf Basis von Formularsteuerelementen zusammenstellen.
Techniken
Formulare, VBA
Voraussetzungen
Access 97 und höher
Beispieldatenbank
SQLPerVBA97.mdb, SQLPerVBA00.mdb
André Minhorst, Duisburg
Fast immer, wenn man den Benutzer einer Anwendung Suchkriterien zusammenstellen lässt, baut im Hintergrund eine VBA-Routine eine passende SQL-Anweisung zusammen, die dann die gewünschten Datensätze ermittelt. Der vorliegende Beitrag stellt gängige Konfigurationen vor und zeigt, wie man aus der Eingabe in verschiedenen Steuerelementen passende SQL-Anweisungen erzeugt.
Die erste Frage, die man sich vor dem Erstellen eines Suchformulars in einer Datenbank stellt, dreht sich um den Umfang und die Erweiterbarkeit der gewünschten Suchfunktion.
Wenn das Suchformular nur die Einträge einer Adressenliste mit bestimmten Vor- oder Nachnamen heraussuchen soll, reichen zwei Textfelder zur Eingabe der Suchbegriffe wohl aus.
Wenn die zu durchsuchende Datenherkunft aber viele Felder enthält, die als Suchkriterien herhalten können – wäre dann nicht ein Suchformular angebracht, mit dem der Benutzer sich die passenden Suchkriterien per Kombinationsfeld zusammenklicken kann – wie in Bild 1
Prinzipiell ist eine solche Lösung sicher übersichtlicher, aber nicht alle potenziellen Benutzer werden diese Lösung ohne Anleitung einsetzen können (das ist leider wirklich so).
Auch die Konfiguration einer solchen Lösung ist nicht besonders einfach; immerhin können die Suchfelder unterschiedliche Datentypen aufweisen, denen man etwa die zur Verfügung stehenden Vergleichsoperatoren anpassen muss.
Der vorliegende Beitrag konzentriert sich daher auf „statische“ Suchformulare, die feste Suchfelder enthalten.
Hinweis
Der Beitrag zeigt das Zusammenstellen von SQL-Ausdrücken auf Basis der für die Suche zur Verfügung stehenden Steuerelemente. Das Ergebnis aller nachfolgenden Beispiele ist demnach ein SQL-Ausdruck, der im Folgenden als Datenherkunft eines Formulars mit der Ergebnisliste oder als Datensatzherkunft eines Steuerelements wie etwa eines Listenfeldes verwendet werden kann. Dies ist auch das Ziel, das Sie beim Bau eines Suchformulars zunächst im Auge haben sollten: Den SQL-Ausdruck können Sie einfach im Abfragefenster testen; erst wenn dieser das gewünschte Ergebnis liefert, brauchen Sie sich um dessen Ausgabe in einer Liste zu kümmern. Deshalb enthalten die nachfolgend vorgestellten Routinen auch eine Anweisung, die den ermittelten SQL-Ausdruck im Direktfenster ausgibt – von dort können Sie ihn direkt in die SQL-Ansicht einer neuen Abfrage kopieren und diese testen.
Bild 1: Ein Suchformular mit dynamischen Suchfeldern
Die einfachste denkbare Suche enthält lediglich ein Feld, in das man den gesuchten Inhalt eines Feldes der Datenherkunft einträgt und alle Datensätze anzeigt, die dem angegebenen Suchkriterium entsprechen.
Einzelnes Suchfeld
Bild 2 zeigt ein einfaches Beispiel für ein solches Formular: Es enthält lediglich ein Feld zur Eingabe des gesuchten Artikelnamens und eine Schaltfläche zum Starten des Suchvorgangs.
Bild 2: Entwurfsansicht eines einfachen Suchformulars
Am einfachsten für den Programmierer, aber am unflexibelsten für den Benutzer ist die Eingabe des exakten Artikelnamens als Suchbegriff.
Die von der passenden Routine aus Quellcode 1 ermittelte SQL-Anweisung sieht dann etwa so aus:
SELECT * FROM Artikel WHERE Artikelname = ''Chai''
Da der Benutzer die genaue Bezeichnung des gesuchten Artikels in der Regel aber nicht kennt, vereinfachen Sie die Aufgabe durch den Einsatz von Platzhaltern.
Das kann auf zwei Arten erfolgen: Entweder Sie nehmen ihm diese Aufgabe ab und formulieren die Suchanfrage um in „Geben Sie einen Teil des gesuchten Artikelnamens ein“ oder Sie überlassen ihm selbst das Einfügen der Platzhalter.
Hinweis
Je nach dem Datentyp des zu durchsuchenden Feldes muss man den Suchbegriff „vorbehandeln“. So interpretiert Access Zeichenketten in Vergleichsausdrücken ohne Anführungszeichen als Parameter und fragt diese beim Ausführen der Abfrage ab – also packt man Zeichenketten wie in dem SQL-Ausdruck aus Quellcode 1 in Anführungszeichen. Da der SQL-Ausdruck selbst bereits in Anführungszeichen eingefasst ist, muss man entweder doppelte Anführungszeichen oder Hochkommata verwenden. Bei Datumsangaben gibt es wiederum spezielle Maßnahmen – diese finden Sie unter anderem im Beitrag Access-FAQ: Rund um Access (Shortlink 329) im Kapitel Datum an SQL-String übergeben.
Automatische Platzhalter
Die erste Lösung zieht ein Formular wie in Bild 3 und den Code aus Quellcode 2 nach sich. Der Suchbegriff wird dabei automatisch von Sternchen-Platzhaltern (*) eingerahmt. Als Ergebnis gibt die erzeugte Abfrage alle Artikel zurück, deren Artikelname die als Suchbegriff eingegebene Zeichenfolge enthält.
Die Suche nach dem Buchstaben „A“ gibt also etwa alle Artikel zurück, deren Name ein A beinhaltet. Das funktioniert im übrigen nur mit dem LIKE-Operator, nicht mit dem Gleichheitszeichen (=).
Quellcode 1: Ausgabe einer einfachen SQL-Anweisung
Private Sub cmdSuchen_Click() Dim strSQL As String strSQL = "SELECT * FROM Artikel WHERE Artikelname = ''" & Me!txtArtikelname & "''" Debug.Print strSQL End Sub
Quellcode 2: Diese Routine fügt dem Suchausdruck automatisch Platzhalter hinzu.
Private Sub cmdSuchen_Click() Dim strSQL As String strSQL = "SELECT * FROM Artikel WHERE Artikelname LIKE ''*" & Me!txtArtikelname & "*''" Debug.Print strSQL End Sub
Bild 3: Entwurf des Formulars frmSucheEinfachMitAutomatischemPlatzhalter
Benutzerdefinierte Platzhalter
Die vorherige Lösung ist etwas unflexibel: Der Benutzer kann etwa nicht festlegen, dass der SQL-Ausdruck beispielsweise nur Datensätze zurückgibt, deren Artikelname mit „A“ beginnt.
Der folgende Ansatz überlässt dem Benutzer die Eingabe der Platzhalter. Wichtig ist hierbei, dass Sie den Benutzer über die Möglichkeiten und Funktionen der verfügbaren Platzhalter informieren.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo