none
Suchfeld für Suche nach jeder Tastatureingabe - Problem mit Ereignsreihenfolge

    Frage

  • Hallo Zusammen,

    ich habe ein Endlosformular für das ich gerne ein Suchfeld erstellen möchte, welches die angezeigten Datensätze nach jeder Eingabe in das Feld eingrenzt.

    Hierzu verändere ich jeweils die SQL Recordsource des Formulars.

    Das funktioniert auch sehr gut. Nur habe ich das Problem, dass die Anzeige der Eingabe hinterher hängt.

    Ich habe als Ereignis meinFeld_Change gewählt.

    Bei der ersten Buchstabeneingabe passiert noch gar nichts. Bei der zweiten wird der Inhalt auf Basis des ersten Buchstabens gefiltert usw.

    Wie schaffe ich es, dass nach jeder Zeicheneingabe der dann im Feld sichtbare Inhalt an die Variable übergeben wird.

    Und wie schaffe ich es, dass, wenn der Inhalt des Feldes wieder ganz gelöscht wird, auch dies als Ereignis wahrgenommen wird.

    Vielen Dank für Hilfe

    Patrick

    Montag, 16. September 2013 11:01

Alle Antworten

  • ich habe ein Endlosformular für das ich gerne ein Suchfeld erstellen möchte, welches die angezeigten Datensätze nach jeder Eingabe in das Feld eingrenzt.

    Das funktioniert auch sehr gut. Nur habe ich das Problem, dass die Anzeige der Eingabe hinterher hängt.

    Bei der ersten Buchstabeneingabe passiert noch gar nichts. Bei der zweiten wird der Inhalt auf Basis des ersten Buchstabens gefiltert usw.

    Wie schaffe ich es, dass nach jeder Zeicheneingabe der dann im Feld sichtbare Inhalt an die Variable übergeben wird.

    Und wie schaffe ich es, dass, wenn der Inhalt des Feldes wieder ganz gelöscht wird, auch dies als Ereignis wahrgenommen wird.

    Hallo Patrick,

    du musst meinFeld.Text verwenden und nicht meinFeld[.value].


    Viele Grüße Stefan

    Montag, 16. September 2013 13:20
  • Hallo Stefan,

    vielen Dank. Das klappt. Allerdings habe ich jetzt das Problem beim löschen des Feldinhaltes. Da erhalte ich dann die Meldung:

    Laufzeitfehler 2185

    Sie können auf die Eigenschaften oder Methoden eines Steuerelements nur verweisen wenn das Steuerelement den Fokus hat.

    Hast Du dazu auch noch eine Idee?

    Viele Grüße

    Patrick

    Montag, 16. September 2013 13:23
  • Allerdings habe ich jetzt das Problem beim löschen des Feldinhaltes. Da erhalte ich dann die Meldung:

    Laufzeitfehler 2185

    Sie können auf die Eigenschaften oder Methoden eines Steuerelements nur verweisen wenn das Steuerelement den Fokus hat.

    Hast Du dazu auch noch eine Idee?

    Hallo Patrick,

    da wäre jetzt schön, den Code dieser Funktion zu sehen.

    Evtl. hast du für ein Element im Detailbereich des Endlosformulars ein SetFocus gesetzt. Wenn das Endlosformular leer ist, kann da natürlich kein Element den Fokus bekommen.

    Sollen alle DS angezeigt werden oder keine, wenn das Suchfeld leer ist?

    Abhängig davon, evtl. das Filtern/Anzeigen ausführen.

    IF nz(me!meinFeld.text,"") = "" then

    else

    endif


    Viele Grüße Stefan

    Montag, 16. September 2013 14:11
  • Hallo Stefan,

    hier der Code:

    Private Sub Suchen()
    Dim strAnzahl As String
    Me!txt_Suchbegriff.Value = Me!txt_Suchen.Text
    cbo_Kunde_AfterUpdate
    Me!txt_Suchen.SetFocus 'Suchfeld den Fokus zurück geben um dort weiter Zeichen eingeben zu können
    strAnzahl = Me.Form.RecordsetClone.RecordCount
    If strAnzahl > 0 Then
    If Len(Me!txt_Suchbegriff) > 0 Then
    Me!txt_Suchen.SelStart = Len(Me!txt_Suchen) 'Cursor ans Ende der Zeichenkette stellen
    Else
    Me!txt_Suchbegriff = Null
    Me!txt_Suchen = Null
    End If
    End If
    End Sub

    Private Sub cbo_Kunde_AfterUpdate()
    Dim strSQL As String, strSQLWhere As String
    Dim strSubjektNr As String
    Dim strSuchen

    If Not IsNull(Me!txt_Suchbegriff) Then
    strSuchen = Me!txt_Suchbegriff
    End If

    If IsNull(Me!cbo_Kunde) Then
    strSQLWhere = "WHERE (ReminderTime IS NULL OR " & _
    "ReminderTime < GETDATE()) AND (Betreff LIKE '%" & strSuchen & "%') OR " & _
    "(ReminderTime IS NULL OR ReminderTime < GETDATE()) AND (Meldung LIKE '%" & strSuchen & "%')"

    Else
    strSubjektNr = Me!cbo_Kunde
    strSQLWhere = "WHERE (ReminderTime IS NULL OR " & _
    "ReminderTime < GETDATE()) AND (KundeNr = " & strSubjektNr & ") AND (Betreff LIKE '%" & strSuchen & "%') OR " & _
    "(ReminderTime IS NULL OR " & _
    "ReminderTime < GETDATE()) AND (KundeNr = " & strSubjektNr & ") AND (Meldung LIKE '%" & strSuchen & "%')"

    End If

    strSQL = "SELECT dbo.Sicht_offeneTickets_BestellungenUndStoerungen.* " & _
    "FROM dbo.Sicht_offeneTickets_BestellungenUndStoerungen " & _
    strSQLWhere & _
    "ORDER BY ZeitBisRot, Prioritaet"

    Me.Form.RecordSource = strSQL
    End Sub

    Montag, 16. September 2013 14:28
  • Hallo Bernhard,

    Me!txt_Suchbegriff.Value = Me!txt_Suchen.Text
    warum so umständlich?

    Erstelle eine Funktion, die das SQL-Statement erzeugt. Also im Prinzip was in cbo_Kunde_AfterUpdate() steht. Als Übergabewert verwendest du txt_Suchen.Text

    Diese Funktion/Sub rufst du von

    txt_Suchen_Change() und cbo_Kunde_AfterUpdate() auf.

    Private Sub cbo_Kunde_AfterUpdate()
    	Call DeineSuchenFunktion(nz(Me!txt_Suchen.Text,""))
    End Sub


    Viele Grüße Stefan


    Montag, 16. September 2013 14:52
  • Hallo Stefan,

    das habe ich jetzt gemacht, bekomme aber dann, wenn ich die Eingabe im Suchfeld lösche, wieder die gleiche Fehlermeldung

    Laufzeitfehler 2185

    Sie können auf die Eigenschaften oder Methoden eines Steuerelements nur verweisen wenn das Steuerelement den Fokus hat.

    Außerdem habe ich so auch wieder das Problem, dass mein Suchfeld nach jeder Eingabe den Fokus verliert und ich somit nicht flüssig eingeben kann.

    Vielleicht nochmal die Zieldefinition:

    Ich habe ein Endlosformular das Datensätze anzeigt. Diese Datensätze kann ich auf zwei Weisen eingrenzen die miteinander kombinierbar sein sollten:

    1. Durch Auswahl eines Wertes im Feld cbo_Kunde

    Danach werden eben nur noch die Daten des ausgewählten Kunden angezeigt.

    2. Durch Eingabe einer Zeichenfolge.

    Diese Zeichenfolge wird dann in den Datensätzen in den Feldern "Betreff" und "Meldung" gesucht. Es werden nur noch die Datensätze angezeigt die a) vom ausgewählten Kunden sind (wenn denn einer ausgewählt wurde) und b) in "Betreff" und/oder "Meldung" die Zeichenfolge haben.

    Wenn die Zeichenfolge zu keinem Ergebnis führt möchte ich die Eingabe bspw. durch Backspace oder markieren und entfernen oder überschreiben entfernen und dann wieder alle Datensätze angezeigt bekommen.

    Dieser letzter Absatz macht Probleme. Das andere habe ich schon mal hinbekommen...

    Vielen Dank für Hilfe.

    Patrick

    Montag, 16. September 2013 15:52
  • das habe ich jetzt gemacht, bekomme aber dann, wenn ich die Eingabe im Suchfeld lösche, wieder die gleiche Fehlermeldung

    Laufzeitfehler 2185

    Sie können auf die Eigenschaften oder Methoden eines Steuerelements nur verweisen wenn das Steuerelement den Fokus hat.

    Außerdem habe ich so auch wieder das Problem, dass mein Suchfeld nach jeder Eingabe den Fokus verliert und ich somit nicht flüssig eingeben kann.

    Hallo Patrick,

    Am Fokusverlust ist das Endlosformular schuld.

    Ich verwende idR Listenfelder und daher auch kein Problem mit Fokusverlust.

    Private Sub txt_Suchen_Change()
    	Call DeineSuchenFunktion(nz(Me!txt_Suchen.Text,""))
    	' Set Focus auf txt_Suchen
    	' Cursor an das Feldende positionieren: http://www.donkarl.com?FAQ4.24
    End Sub



    Viele Grüße Stefan

    Dienstag, 17. September 2013 07:43