Suche in Lookupfeldern

Die Suche nach Datensätzen mit bestimmten Werten in Text- oder Zahlenfeldern haben wir in Acces [basics] bereits bearbeitet. Aber was ist, wenn es um Kombinationsfelder geht, welche die Daten aus einer Lookup-Tabelle anzeigen So wie im einfachsten Fall bei den Anreden einer Kundentabelle Dann werden Sie in der Regel erstmal nicht an die Eingabe eines Suchetextes denken, sondern dem Benutzer die Möglichkeit geben wollen, den gesuchten Datensatz auch im Suchfeld per Kombinationsfeld auszuwählen. Dieser Artikel zeigt, wie das gelingt.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1706_Lookupsuche.accdb.

Artikel nach Kategorie durchsuchen

Die Datenblattansicht von Access bietet seit einigen Access-Versionen die Möglichkeit, über den Pfeil nach unten ein Menü zu öffnen, mit dem Sie alle Einträge des aktuellen Feldes anhaken und damit die Suche nach Datensätzen mit diesem Inhalt im entsprechenden Feld starten können (siehe Bild 1).

Eingebaute Suche nach einem Eintrag

Bild 1: Eingebaute Suche nach einem Eintrag

Das Ergebnis entspricht dann wie in Bild 2 genau den Erwartungen. Was aber nun, wenn wir diese Suche nicht anbieten können oder wollen und eine eigene Suche implementieren müssen, die so ähnlich arbeitet – und in diesem Fall zumindest ein Kombinationsfeld anbieten soll, um die passenden Datensätze zu ermitteln

Suchergebnis mit eingebauter Suche

Bild 2: Suchergebnis mit eingebauter Suche

Dann benötigen wir zunächst ein Formular, welches das Datenblatt mit den zu durchsuchenden Datensätzen in einem Unterformular anzeigt. Dazu erstellen Sie zunächst ein Unterformular namens sfmLookupsuche und weisen der Eigenschaft Datenherkunft die Tabelle tblArtikel zu.

Ziehen Sie dann alle Felder dieser Tabelle aus der Feldliste in den Detailbereich des Formularentwurfs und stellen Sie noch die Eigenschaft Standardansicht auf den Wert Datenblatt ein. Speichern und schließen Sie das Formular nun.

Legen Sie ein neues Formulars namens frmLookupsuche an, welches als Hauptformular dienen soll. Ziehen Sie das Unterformular sfmLookupsuche aus dem Navigationsbereich in den Detailbereich des neuen Formulars. Stellen Sie die Eigenschaften Navigationsschaltflächen, Datensatzmarkierer, Bildlaufleisten und Trennlinien des Hauptformulars auf Nein und die Eigenschaft Automatisch zentrieren auf Ja ein. Fügen Sie über dem Unterformular schließlich noch das Kombinationsfeld hinzu, mit dem wir die Suchbegriffe festlegen wollen (siehe Bild 3). Das Kombinationsfeld nennen wir cboSucheLieferant.

Suchformular mit Kombinationsfeld

Bild 3: Suchformular mit Kombinationsfeld

Filterausdruck ermitteln

Wenn Sie wissen wollen, welchen Filterausdruck Access automatisch einstellt, wenn Sie mit der eingebauten Filtermöglichkeit arbeiten wollen, welche wir eingangs vorgestellt haben, brauchen Sie nur das Formular zu öffnen und den Filter festzulegen.

Nun öffnen Sie den VBA-Editor und geben im Direktbereich einen Ausdruck ein, der den aktuellen Wert der Filter-Eigenschaft des Unterformulars ausgibt:

 Forms(0).sfmLookupsuche.form.filter

Die Ausgabe lautet wie folgt:

([Lookup_LieferantID].[Firma]="Bigfoot Breweries")

Was ist nun [Lookup_LieferantID].[Firma] für ein Ausdruck Wir konnten es nicht herausfinden. Selbst wenn wir den Code des Formulars mit der folgenden Methode in eine Textdatei exportiert haben, konnten wir diese Zeichenfolge nicht finden:

SaveAsText acForm, "sfmLookupsuche", CurrentProject.Path & "\form.txt"

Fest steht jedenfalls, dass Access wohl hier irgendwie auf ein Recordset zugreift, das sich hinter dem Kombinationsfeld zur Auswahl des Lieferanten verbirgt und diesen als Feld im Filterausdruck einsetzt.

Kombinationsfeld mit Daten füllen

Wie auch immer: Wir können uns nicht auf irgendwelche nirgends offensichtlich definierten Feldnamen beziehen, wenn wir programmieren, und füllen zunächst unser Kombinationsfeld mit den Daten, die wir zur Suche nach den Lieferanten auswählen wollen.

Dazu stellen wir die Eigenschaft Datensatzherkunft des Kombinationsfeldes auf die Abfrage aus Bild 4 ein. Damit es das Primärschlüsselfeld als gebundene Spalte verwendet und diese aber ausblendet, stellen sie die Eigenschaft Spaltenanzahl auf den Wert 2 und die Eigenschaft Spaltenbreiten auf den Wert 0cm ein. Das Zwischenergebnis sieht dann wie in Bild 5 aus.

Das Kombinationsfeld im Einsatz

Bild 4: Das Kombinationsfeld im Einsatz

Abfrage als Datensatzherkunft für das Such-Kombinationsfeld

Bild 5: Abfrage als Datensatzherkunft für das Such-Kombinationsfeld

Nun müssen wir noch eine Ereignisprozedur hinzufügen, die nach der Auswahl eines der Einträge des Kombinationsfeldes ausgelöst wird und die Daten des Datenblatts entsprechend des Filterkriteriums filtert.

Dazu stellen Sie für die Eigenschaft Nach Aktualisierung des Kombinationsfeldes den Wert [Ereignisprozedur] ein und klicken auf die Schaltfläche mit den drei Punkten (…) neben der Eigenschaft.

Dies öffnet den VBA-Editor und zeigt gleich die neue, leere Prozedur cboSucheLieferanten_AfterUpdate an (siehe Bild 6). Diese füllen wir nun wie folgt:

Neue Ereignisprozedur im VBA-Editor

Bild 6: Neue Ereignisprozedur im VBA-Editor

Private Sub cboSucheLieferant_AfterUpdate()
    Dim lngLieferantID As Long
    Dim strSQL As String
    lngLieferantID = Nz(Me!cboSucheLieferant, 0)
    If Not lngLieferantID = 0 Then
        strSQL = "LieferantID = " & lngLieferantID
        Me!sfmLookupsuche.Form.Filter = strSQL
        Me!sfmLookupsuche.Form.FilterOn = True
    Else
        Me!sfmLookupsuche.Form.Filter = ""
    End If
End Sub

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