Schnellsuche optimiert

Im Beitrag Schnellsuche mit Klasse (www.access-im-unternehmen.de/784) haben wir die grundlegende Technik zur Schnellsuche und eine Klasse vorgestellt, mit der sich diese Technik mit wenigen Zeilen in Formulare integrieren lässt. Diese Technik hatte allerdings einen Haken: Sie erlaubt nicht die Eingabe von Leerzeichen am Beginn oder Ende des Suchbegriffs. Dies rüsten wir mit diesem Beitrag nach.

Die grundlegende Technik der Schnellsuche basiert darauf, den Filter für das entsprechende Unterformular oder Listenfeld nach jeder änderung des Suchbegriffs, also nach der Eingabe eines jeden Zeichens, zu erneuern. Dies brachte den Nachteil mit sich, dass auch das Textfeld zur Eingabe des Suchausdrucks aktualisiert wurde. Access hat aber die Angewohnheit, folgende Leerzeichen beim Aktualisieren von Textfeldern zu löschen – das ist ungünstig, wenn man einen Ausdruck wie Aniseed Syrup eingeben möchte: Nach Eingabe des Leerzeichens wird dieses gelöscht und die weitere Eingabe führt zu einem Suchbegriff wie AniseedSyrup. Darunter findet Access dann natürlich keinen passenden Eintrag, was beim Benutzer zunächst für Verwirrung sorgen dürfte. Es gibt einen Workaround, bei dem man erst die Begriffe eingibt und dann das Leerzeichen zwischen den einzelnen Elementen hinzufügt. Das ist aber auch maximal für im Eigengebrauch befindliche Datenbanken empfehlenswert; andere Benutzer dürften kaum auf diesen Trick kommen geschweige denn mit dieser nicht gerade ergonomischen Lösung zufrieden sein.

Abhilfe schafft das Anpassen der Ereignisprozedur Bei änderung (s. Bild 1.

Listing 1: Suchfunktion anpassen

Private Sub txtSuche_Change()
    Dim strFilter As String
    Dim intStart As Integer
    Dim strSearch As String
    strSearch = Me!txtSuche.Text
    intStart = Me!txtSuche.SelStart
    If Not Len(Me!txtSuche.Text) = 0 Then
        strFilter = "Artikelname LIKE ''" & Me!txtSuche.Text & "*''"
        Me.Filter = strFilter
        Me.FilterOn = True
        Me!txtSuche.SelStart = intStart
    Else
        Me.Filter = ""
        Me.FilterOn = False
        Me!txtSuche.SetFocus
    End If
    If Right(strSearch, 1) = Chr(32) Then
        Me!txtSuche = strSearch
        Me!txtSuche.SelStart = intStart
    End If
End Sub

pic001.png

Bild 1: Eingabe von Leerzeichen im Suchbegriff

Klasse anpassen

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