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 _ & "*';"