Montag, 20. November 2017

Home
Tipps
Bücher
Software
News / Links
Hilfe
Impressum

Sponsored by
QualityHosting

Frage und Antwort
Listenfeld nach Tastendruck aktualisieren (Access 97, 2000)
von Berhard Kern
Problem:

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 der TriniDat GmbH:

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


Ein Service der TriniDat Software-Entwicklung GmbH - Am Wehrhahn 45 - 40211 Düsseldorf

  Suche
Suche starten
  Service
Leserbrief / Frage zu Access
Kontakt
  NewsLetter
NewLetter bestellen
NewsLetter abbestellen
  Partner-Seiten
HyperLink

www.trinidat.de


HyperLink

www.fulldotnet.de