Home Office-Hilfe.com - Wir lösen Ihr Problem mit Microsoft Excel, Word, Outlook, PowerPoint, Access gratis Forum Impressum

 [Access 2000] KeyPress-Ereignis zum aktualisieren des Formular-Filters
Neues Thema eröffnenNeue Antwort erstellen
Autor Nachricht
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 303
Wohnort: Kiel

BeitragVerfasst am: 14.05.2008, 10:56 Nach oben

Hallo, allerseits!

Ich habe hier Folgendes vor (was z.T. auch bereits klappt):

In einem Endlos-Formular befindet sich im Fußbereich ein u.a. Textfeld. Wird etwas in dieses Textfeld eingegeben, sollen die Datensätze nach dem Inhalt dieses Textfeldes ("beginnt mit ...") gefiltert werden.

Bislang habe ich das über das Textfeld und einen Button "Filter" realisiert, was auch anstandslos funktionierte. In einer Prozedur wird ein SQL-String aufgebaut und als Filter auf das Formular angewandt. (Es sind ein paar mehr Felder, nach denen in Kombination gefiltert werden kann.)

Nun kam die Bitte, daß nach diesem einen Feld möglichst ohne das lästige Button-Klicken gefiltert werden soll. Der Filter soll sich also sofort während der Eingabe aktualisieren.

Im Prinzip kein Problem, dachte ich mir so in meiner jugendlichen Unbekümmertheit, und schnappte mir die Ereignisse KeyPress, OnChange und BeforeUpdate, um mal zu gucken, wo sich die Aktualisierung des Filters am besten unterbringen lassen könnte.

Das beste Resultat scheine ich mit KeyPress erreichen zu können. Denn dort habe ich so ganz nebenbei auch noch die Möglichkeit, die Eingabe auf die Ziffern hin einzuschränken. Aber es gibt doch noch den einen oder anderen Knackpunkt:

Die Filter-Routine entnimmt .Value aus den Feldern, um den Filter aufzubauen. Meine "Manipulationen" am Textfeld im KeyPress irren zwischen .Value und .Text hin und her, aber irgendwie verwirre ich damit wohl alles. Das führt dann bis hin dazu, daß die Textanzeige im Feld eine andere ist, als der Wert, der Textinhalt auch nicht ganz markiert werden kann usw.

So baue ich den Filter auf und wende ihn auf das Formular an:
Code:
Private Sub Suchfilter_aufbauen()

    Dim v(5) As String
    Dim f(5) As String
    Dim s As String
    Dim n As Long

    v(1) = Trim$(Me!MotorNrAuswahl.Value & " "): f(1) = "motornummer"
    v(2) = Trim$(Me!MotorZylAuswahl.Value & " "): f(2) = "motorzyl"
    v(3) = Trim$(Me!MotorMuAuswahl.Value & " "): f(3) = "motormu"
    v(4) = Trim$(Me!MotorBauAuswahl.Value & " "): f(4) = "motorbau"
    v(5) = Trim$(Me!MotorVarAuswahl.Value & " "): f(5) = "motorvar"

    s = ""
    For n = 1 To 5
        If v(n) <> "" Then
            If s <> "" Then
                s = s & " AND "
            End If
            Select Case n
                Case 1
                    s = s & "([" & f(n) & "] LIKE '" & v(n) & "*')"
                Case 2, 3, 4, 5
                    s = s & "([" & f(n) & "] = '" & v(n) & "')"
            End Select
        End If
    Next n

    If s <> "" Then
        's = "(" & s & ")"
        'MsgBox s
        DoCmd.ApplyFilter , s
      Else
        DoCmd.ShowAllRecords
    End If

End Sub


Meine Versuche mit dem KeyPress sehen wie folgt aus:
Code:
Private Sub MotorNrAuswahl_KeyPress(KeyAscii As Integer)

    Dim altertext As String
    Dim neuertext As String

    'MsgBox KeyAscii

    Select Case KeyAscii

        '48 .. 58 = Ziffern 0 .. 9
        Case 48 To 58 'Ziffern werden zugelassen

            altertext = Trim$(Me!MotorNrAuswahl.Value & " ")
            neuertext = altertext & Chr$(KeyAscii)

            Me!MotorNrAuswahl.Value = neuertext
            Suchfilter_aufbauen

            'If fncRecordCount = 0 Then
            '    'Me!MotorNrAuswahl.SetFocus
            '    Me!MotorNrAuswahl.Value = altertext
            '    Suchfilter_aufbauen
            'End If

            Me!MotorNrAuswahl.SetFocus
            On Error Resume Next
            Me!MotorNrAuswahl.Text = Me!MotorNrAuswahl.Value
            Me!MotorNrAuswahl.SelStart = 255 'Len(Me!MotorNrAuswahl.Value) + 1
            Me!MotorNrAuswahl.SelLength = 0
            On Error GoTo 0
            'Me!MotorNrAuswahl.SetFocus

            KeyAscii = 0

        Case 32 To 47, 58 To 255 'andere Zeichen werden abgeblockt

            KeyAscii = 0

        Case Else

            ' Steuerzeichen werden zugelassen

    End Select

End Sub


Das ist jetzt gerade der aktuelle Stand. Ich hab schon diverse andere Varianten durchgespielt, aber irgendwie nie so recht zufriedenstellend.

Besondere Kopfschmerzen bereitet mir der z.Z. auskommentierte Block mit dem fncRecordCount. Hier soll die Eingabe des letzten Zeichens rückgängig gemacht werden, wenn es dazu führte, daß die Ergebnismenge leer ist. Aber spätestens ab dann stimmen Bildschirmausgabe und Feldwert nicht mehr überein.

Ah, ja, die fncRecordCount-Funktion:
Code:
Private Function fncRecordCount() As Long

    Dim rs As DAO.Recordset

    Set rs = Me.RecordsetClone
    On Error Resume Next
    rs.MoveLast
    On Error GoTo 0
    fncRecordCount = rs.RecordCount

End Function


Aber allgemein bereitet mir die Routine auch diverse "kann nicht, weil nicht focus" Fehlermeldungen, die trotz expliziter .SetFocus beharrlich wiederkehren.

Außerdem habe ich noch ein kleines Problem mit den Editier-Tasten: Backspace hat Code 8. Lasse ich den im SELECT mit zu, habe ich ein quadratisches Zeichen im Textfeld. Und die ENTF-Taste löst das KeyPress leider gleich gar nicht aus. Kann man da noch was machen?

Gruß, Michael
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
jens05
Newbie
Newbie


Anmeldedatum: 16.04.2008
Beiträge: 27

BeitragVerfasst am: 24.05.2008, 20:12 Nach oben

Hallo,
versuche es mal im Textfeldereignis "Bei Änderung", welches bei jeder Änderung reagiert, und lass das KeyPress Ereignis weg.

Desweiteren solltest du auf "ApplyFilter" verzichten und die Filtereigenschaft des Formulares verwenden. ;) Die Zehn Gebote
Benutzer-Profile anzeigenPrivate Nachricht senden
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 303
Wohnort: Kiel

BeitragVerfasst am: 26.05.2008, 13:08 Nach oben

jens05 hat Folgendes geschrieben:
versuche es mal im Textfeldereignis "Bei Änderung", welches bei jeder Änderung reagiert, und lass das KeyPress Ereignis weg.

Das war mein erster Ansatz und der brachte mir die gleichen oder zumindest sehr ähnliche Probleme. Vor allem das Problem mit dem aktuell im Feld angezeigten Text, der Markierung des Textes usw. in Verbindung mit SelStart und SetFocus war da ziemlich gleich.

Zitat:
Desweiteren solltest du auf "ApplyFilter" verzichten [...] Die Zehn Gebote

Ja, die kenne ich... Und genau dieser eine Punkt dürfte auch der Einzige sein, den ich beharrlich seit Jahren ignoriere. Ich kann nicht mal genau sagen, warum eigentlich. Wink

Gruß, Michael
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
jens05
Newbie
Newbie


Anmeldedatum: 16.04.2008
Beiträge: 27

BeitragVerfasst am: 26.05.2008, 19:39 Nach oben

Hallo,
kannst du das Form mal online stellen, das sollte ohne Probleme gehen ;)
Benutzer-Profile anzeigenPrivate Nachricht senden
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 303
Wohnort: Kiel

BeitragVerfasst am: 27.05.2008, 08:48 Nach oben

jens05 hat Folgendes geschrieben:
Hallo,
kannst du das Form mal online stellen, das sollte ohne Probleme gehen ;)

Das geht nicht so ganz ohne Probleme, weil dieses Form nur ein kleiner Teil eines größeren Projekts ist, in dem auch sensiblere Teile / Daten enthalten sind.

Ich werd aber mal zusehen, wie ich das Form mit der zugehörigen Tabelle separiert kriege. Wird aber diese Woche wahrscheinlich nichts mehr.

Gruß, Michael
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
Beiträge der letzten Zeit anzeigen:      
Neues Thema eröffnenNeue Antwort erstellen


Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge [Word2003] Formular mit Textfeldern e... anachronist Microsoft Word Hilfe 1 04.09.2008, 16:07 Letzten Beitrag anzeigen
Keine neuen Beiträge Excel Formular Problem Mercuryswift Microsoft Excel Hilfe 0 04.09.2008, 10:57 Letzten Beitrag anzeigen
Keine neuen Beiträge Formel aktualisieren nach Änderung vo... Frederic Microsoft Excel Hilfe 6 26.08.2008, 12:02 Letzten Beitrag anzeigen
Keine neuen Beiträge Daten aus Formular in Excel-Datei spe... Christoph Microsoft Excel Hilfe 7 25.08.2008, 20:37 Letzten Beitrag anzeigen
Keine neuen Beiträge Formular automatische Datum darstellung gottschi Microsoft Access Hilfe 1 28.07.2008, 21:48 Letzten Beitrag anzeigen


 Gehe zu:   



Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen

Haftungsausschluss/Disclaimer


SMS kostenlos versenden | Battle-Dream | Tuning Forum | Join the YoungGeneration | krankenversicherungsvergleich | Kalorienarme Rezepte!
Versicherungsvergleich | Bürobedarf | Papier | Betten

Ranking-Hits



Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Alle Zeiten sind GMT + 1 Stunde
Deutsche Übersetzung von phpBB.de