Listenfeld nach Tastendruck aktualisieren (Access 97, 2000)

30.12.2003

Frage:

Ich habe ein Formular mit einem Textfeld und einem Listenfeld. Die Datensatzherkunft des Listenfeldes ist eine Abfrage mit den Feldern Name und TelefonNr. Als Bedingung vom Name-Feld habe ich

Wie[Formulare]![TelnrSuchen]![txtName] & "*"

eingegeben. Wenn ich nun im Name-Feld den ersten Buchstaben des Namens eingebe, werden im Listenfeld nur die Namen angezeigt, dessen erster Buchstabe mit der Eingabe übereinstimmt. Als Ereigniseigenschaft des Textfeldes BeiTasteAuf habe ich

Forms![TelnrSuchen]![lstNamesliste].Requery

eingegeben damit nach Eingabe jedes weiteren Buchstaben das Listenfeld aktualisiert wird. Diese Aktualisierung funktioniert aber nur, wenn ich kurz in die Entwurfsansicht und wieder in die Formularansicht wechsle.

Wie kann das Listenfeld nach Eingabe jedes Buchstaben aktualisiert werden? Die Einfügemarke sollte dabei das Textfeld nicht verlassen.

Antwort:

Access-97-Datenbank mit Demo-Datenbank

Das Problem mit der Lösung mit BeiTasteAuf ist, dass der Wert des Textfeldes nicht nach jedem Tastendruck aktualisiert wird, obwohl Sie die eingebenden Buchstaben im Feld sehen. Das Feld wird erst dann aktualisiert, wenn Sie das Feld verlassen.

Auch das BeiÄnderung-Ereignis nutzt uns nichts, weil die Listenfeld-Abfrage keinen aktuellen Textfeldwert erhält. Sie müssten also die NachAktualisierung-Ereignisprozedur implementieren, die das Listenfeld nach dem vollständigen Eingabewert filtert und aktualisiert.

Um das Listenfeld wirklich nach jedem Tastendruck zu aktualisieren, verwenden Sie eine statische Variable innerhalb der BeiTasteAuf-Prozedur. Dieser Variable wird jedem eingegebenen Buchstaben hinzugefügt. Die Variable behält auch ihren aktuellen Wert bei jedem Aufruf der Prozedur:

Static strLikeText As String

Je nach Buchstaben können Sie die neuen Zeichen in der BeiTasteAuf-Prozedur hinzufügen bzw. löschen:

Select Case KeyCode

    Case vbKeyBack ' Ein Zeichen löschen

        If Len(strLikeText) > 0 Then
            strLikeText = Left$(strLikeText, Len(strLikeText) - 1)
        End If

    Case vbKeyEscape ' Auswahl löschen
        strLikeText = ""

    Case 65 To 90 ' Das Zeichen (A-Z) hinzufügen

        strLikeText = strLikeText & Chr$(KeyCode)

End Select

Diese Variable können Sie dann als Where-Klausel für die Listenfeld-Abfrage verwenden:

Me!lstFirmen.RowSource = "SELECT Firma, Telefon FROM Kunden
WHERE Firma Like '" & strLikeText _ & "*';"

Dienstleistungen

Als starker Partner an Ihrer Seite unterstützen wir Sie in folgenden Breichen:

Access-Programmierung

Benötigen Sie Unterstützung bei der Programmierung von Access-Anwendungen? Wir bieten die gesamte Bandbreite von der Access-Programmierung auf Stundenbasis bis zur Durchführung eines Software-Projektes als Auftragsarbeit an. Kontaktieren Sie uns für ein kostenloses Erstgespräch.

Software-Beratung

Haben Sie ein Software-Projekt und Sie wissen nicht, ob Access die richtige Plattform ist? Wir haben über 20 Jahre Erfahrung beim Erstellen von Windows-, Web und mobilen Anwendungen. Kontaktieren Sie uns für eine kostenlose Erstberatung.