Suchformulare, Teil 1

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

Schreibe einen Kommentar