Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: WhiteCrow am Juni 11, 2015, 22:06:29

Titel: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juni 11, 2015, 22:06:29
Guten Abend.
Folgende Szenario:
Hab 2 Textfelder (im Formularkopf) mit "bei Taste auf" folgendem Code:


Private Sub f_SearchTitle_KeyUp(KeyCode As Integer, Shift As Integer)
a = FilterNew("f_Title LIKE '" & f_SearchTitle.Text & "*'", 1)
End Sub

und

Private Sub f_SearchBox_KeyUp(KeyCode As Integer, Shift As Integer)
a = FilterNew("f_BoxNumber LIKE '" & f_SearchBox.Text & "*'", 2)
End Sub



Außerdem noch:

Public Function FilterNew(FltWert As String, FltArt As Integer)

    If FltArt = 1 Then
        Me.Form.Filter = FltWert & " AND " & "f_BoxNumber LIKE '*" & Me.f_SearchBox & "*'"
    Else
        Me.Form.Filter = FltWert & " AND " & "f_Title LIKE '*" & Me.f_SearchTitle & "*'"
    End If
    Me.Form.FilterOn = True
   
End Function


...welche mit im Detailbereich Datensatzfilterung durchführen sollten.
Bei "setzen" von ersten Zeichen werden bereits Datensätze korrekt gefiltert.
Je doch beim setzten von zweiten und jeden weiteren Zeichen (also weiterschreiben),
wird das erste gelöscht bzw. ersetzt. und bleibt letzte als einzige "stehen".
Was habe ich da Falsch gemacht?
Für Info bedanke mich im voraus,
Gruß
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juni 12, 2015, 10:41:10
schon gefunden.
Feldbezeichnungen überarbeitet
BIGsry
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juli 01, 2015, 09:36:14
Dazu noch andere Frage:
Kann man diesen Filter, irgenwie um 2 weitere Textfelder ergenzen?


Public Function FilterNew(FltWert As String, FltArt As Integer)

    If FltArt = 1 Then
        Me.sfrm_Search.Form.Filter = FltWert & " AND " & "f_Title LIKE '*" & Me.f_Title & "*'"
    Else
        Me.sfrm_Search.Form.Filter = FltWert & " AND " & "f_BoxNumber LIKE '*" & Me.f_BoxNumber & "*'"
    End If
    Me.sfrm_Search.Form.FilterOn = True
   
End Function

...nach meinem Wissen (Stand) und goggelle Recherchen,
darf man nur ein mal End If (im disen Beispiel) verwenden.
Je doch werde auf 4 Textfelder angewisen.

Danke im voraus!
Gruß
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: DF6GL am Juli 01, 2015, 11:42:49
Hallo,

vermutlich suchst Du sowas:


Public Function FilterNew(FltWert As String, FltArt As Integer)

    If FltArt = 1 Then
        Me.sfrm_Search.Form.Filter = FltWert & " AND " & "f_Title LIKE '*" & Me.f_Title & "*'"
    ElseIf FltArt = 2
        Me.sfrm_Search.Form.Filter = FltWert & " AND " & "f_BoxNumber LIKE '*" & Me.f_BoxNumber & "*'"


    ElseIF FltArt = 3

' tu hier das, was gewollt ist...

    End If
    Me.sfrm_Search.Form.FilterOn = True
   
End Function


Besser in solchen Fällen wäre

Select Case FltArt
Case 1
'mach hier, wenn FltArt = 1
Case 2
'mach hier, wenn FltArt = 2

Case 3
'mach hier, wenn FltArt = 3

Case else
'mach hier, wenn nix zutrifft

End Select
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juli 01, 2015, 17:54:21
Hi!
zum ersten Vorschlag -bekomme ständig Koplifehler
beim Cases Vorschlag:
Hab schon bereits so gehabt:

Private Sub f_BoxNumber_Change()
    Call FilterNew(Me!f_BoxNumber.Text, 1)
    Me!f_BoxNumber.SelStart = 100
End Sub

Private Sub f_Title_Change()
    Call FilterNew(Me!f_Title.Text, 2)
    Me!f_Title.SelStart = 100
End Sub

Private Sub f_Genre_Change()
    Call FilterNew(Me!f_Genre.Text, 3)
    Me!f_Genre.SelStart = 100
End Sub

Private Sub f_MPRS_Change()
    Call FilterNew(Me!f_MPRS.Text, 4)
    Me!f_MPRS.SelStart = 100
End Sub

Private Sub Form_Open(Cancel As Integer)
    Call FilterNew
End Sub

Private Function FilterNew(Optional ByVal sFltWert As String = "", _
                           Optional ByVal iFltArt As Integer = 0)
    Select Case iFltArt
      Case 0:
        Me!sfrm_Search.Form.Filter = ""
      Case 1:
        Me!sfrm_Search.Form.Filter = "f_BoxNumber LIKE '*" & sFltWert & "*' " & _
                                "AND f_Title LIKE '*" & Me!f_Title & "*' " & _
                                "AND f_Genre LIKE '*" & Me!f_Genre & "*' " & _
                                "AND f_MPRS LIKE '*" & Me!f_MPRS & "*' "

      Case 2:
        Me!sfrm_Search.Form.Filter = "f_Title LIKE '*" & sFltWert & "*' " & _
                                "AND f_BoxNumber LIKE '*" & Me!f_BoxNumber & "*' " & _
                                "AND f_Genre LIKE '*" & Me!f_Genre & "*' " & _
                                "AND f_MPRS LIKE '*" & Me!f_MPRS & "*' "
      Case 3:
        Me!sfrm_Search.Form.Filter = "f_Genre LIKE '*" & sFltWert & "*' " & _
                                "AND f_BoxNumber LIKE '*" & Me!f_BoxNumber & "*' " & _
                                "AND f_Title LIKE '*" & Me!f_Title & "*' " & _
                                "AND f_MPRS LIKE '*" & Me!f_MPRS & "*' "
      Case 4:
        Me!sfrm_Search.Form.Filter = "f_MPRS LIKE '*" & sFltWert & "*' " & _
                                "AND f_BoxNumber LIKE '*" & Me!f_BoxNumber & "*' " & _
                                "AND f_Title LIKE '*" & Me!f_Title & "*' " & _
                                "AND f_Genre LIKE '*" & Me!f_Genre & "*' "
    End Select
    Me!sfrm_Search.Form.FilterOn = iFltArt > 0
End Function

... je doch mit selben Resultat:
Erste zwei Textfelder ( f_BoxNumber und f_Title) funktionieren 1A
aber jede weitere Texfeld ( f_Genre und f_MPRS) zerhauen ohne Fehlermeldung die Suche/Filterung.

noch ein Tip? ^^
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: DF6GL am Juli 01, 2015, 18:21:20
Hallo,

was heißt denn nun "zerhauen "  ??

Wird das Falsche gefiltert, oder überhaupt nichts?

Bist Du sicher, dass es die eingegeben Kombinationen überhaupt gibt?

Stimmen die Datentypen ?
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juli 01, 2015, 18:56:59
Zitat
was heißt denn nun "zerhauen "  ??
Wird das Falsche gefiltert, oder überhaupt nichts?
...Das heißt wen ich im dritten oder 4ten Textfeld nach etwas suche wird im UF (sfrm_Search) kein gefiltertes DS bleiben,
sondern sofort alles ist wek bzw. komplett geleert.

ZitatBist Du sicher, dass es die eingegeben Kombinationen überhaupt gibt?
Stimmen die Datentypen ?

Bin mir sicher aber auch total verunsichert.
Ist bestimmt wider etwas, was so offensichtlich ist, das man nicht druff kommt. :P
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: DF6GL am Juli 01, 2015, 22:22:46
Hallo,

nun, bei den Datentypen hast Du gelogen..   Die sind vom Datentyp Zahl und zudem noch als Nachschlagefeld in der Tabelle ausgeführt.  Wirf diese Nachschlagefelder heraus und benutze ein Kombifeld im Formular stattdessen. Dann wird das Ganze klarer...
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juli 02, 2015, 08:39:11
Zitat von: DF6GL am Juli 01, 2015, 22:22:46
nun, bei den Datentypen hast Du gelogen...
was heißt "gelogen"? Dachte das spielt keine rolle. o_O?
Zu wenig nachgedacht und zu schnell geantwortet.

ZitatDie sind vom Datentyp Zahl und zudem noch als Nachschlagefeld in der Tabelle ausgeführt.
Stimmt, Autowert, andere Tabelle usw. ...mist *hust.
Mache mich sofort am Werk
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juli 02, 2015, 10:32:25
Hab auch mit Kombis und veränderten Bezihungen versucht.
So oder so, beim Auswahl passiert garnichts. (keine DS weniger).
Meine befürchtung ist jetzt: -Das funktioniert nur mit Textfldern und mit nichts anderen.
Jetzige Status ist 2 Textfelder sind ok, aber auf die weiteren zwei Filterungsmöglichkeiten -muss ich erstmal verzichten.
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: DF6GL am Juli 03, 2015, 17:54:24
Hallo,

da der Code so geschrieben ist, dass er Textdaten "verarbeitet" (Like-Operator, Hochkommata),funktioniert das auch nur mit Textfeldern (Tabellenfelder mit Datentyp "Text")..

Zitatwas heißt "gelogen"?
Gelogen heißt, die Unwahrheit gesagt zu haben...  ;-)
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juli 03, 2015, 18:15:55
Wie könnte ich das anders lösen (2 auf Text, 2 auf Zahl)? Alternativvorschlag?
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: DF6GL am Juli 03, 2015, 18:19:54
Hallo,

zeig erst mal ein konkretes Beispiel der dahinterliegenden Tabellen und -Felder und nach was dabei gefiltert werden soll...  sonst eiern wir weiter im Dunkeln herum.

Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: MaggieMay am Juli 03, 2015, 19:01:12
Hallo,
Zitat von: DF6GL am Juli 03, 2015, 17:54:24da der Code so geschrieben ist, dass er Textdaten "verarbeitet" (Like-Operator, Hochkommata),funktioniert das auch nur mit Textfeldern (Tabellenfelder mit Datentyp "Text")
das ist nicht zutreffend, man kann auch Zahlen mit LIKE und Suchmustern filtern, und sogar bei Datumsfeldern funktioniert das. Zwangsläufig kommen dabei dann auch Hochkommata zum Einsatz.

---und wie stehst du nun zur Definition von "gelogen"?!   ;)
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juli 03, 2015, 21:23:54
Leider ist mit die (https://onedrive.live.com/redir?resid=18FD78B551081696%21184) "Materie" noch zu hoch...
deswegen kann nur Teilweise oder gar nichts drüber rausgogelln.
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: MaggieMay am Juli 03, 2015, 22:31:10
Hi,

was gibt es da zu googeln? Einfach mal überprüfen, ob alles so umgesetzt wurde, wie es geplant war.
Wenn es Ereignisprozeduren gibt, muss auch die zugehörige Ereigniseigenschaft des Steuerelements auf "Ereignisprozedur" eingestellt sein. Andernfalls werden diese natürlich auch nicht ausgeführt.
Das kann man auf verschiedene Art und Weise leicht feststellen:
1. Nachsehen
2. Haltepunkt in die Prozedur setzen und Ereignis auslösen - wenn nix passiert, dann stimmt etwas nicht

PS:
Bei genauerem Hinsehen kann festgestellt werden, dass die Kombination aller Kriterien eigentlich gar keinen Sinn macht, zumindest was die Boxnumber betrifft, denn Boxnumber ist ein eindeutiger Schlüssel und braucht keine weitere Einschränkung. Und warum sollte man durch Eingabe von "1" nach Boxnumber "1" oder "12" oder "31" suchen wollen? Hier wäre also ebenfalls der Einsatz eines Kombifeldes, das konkrete Werte zur Auswahl anbietet, vorzuziehen.

PS-2:
Bei der Suche mit Hilfe von Kombifeldern (insbesondere mit der Einstellung "Nur Listeinträge") ist das AfterUpdate-Ereignis (="Nach Aktualisierung") dem Change-Ereignis vorzuziehen, da es hier darum geht, die ausgewählte ID weiterzuverwenden und nicht den damit verbundenen Text.
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juli 04, 2015, 11:07:56
Zitat von: MaggieMay am Juli 03, 2015, 22:31:10
was gibt es da zu googeln?
paar Begriffe, empfohlene Prozeduren usw. -einfach um selber dazu lernen.

ZitatWenn es Ereignisprozeduren gibt, muss auch die zugehörige Ereigniseigenschaft des Steuerelements auf "Ereignisprozedur" eingestellt sein. Andernfalls werden diese natürlich auch nicht ausgeführt.
das ist mir schon klar, :) zZt. war nicht "eingestellt", da so oder so -nicht funktioniert, bzw. um dabei das Problembereich zur beschreiben/zeigen.

Zitatwarum sollte man durch Eingabe von "1" nach Boxnumber "1" oder "12" oder "31" suchen wollen?
um einem freien oder frei liegenden  Fach/BoxNumber am d.Datenträger zuordnen können (und/oder andersherum).

ZitatHier wäre also ebenfalls der Einsatz eines Kombifeldes, das konkrete Werte zur Auswahl anbietet, vorzuziehen.
Ja... stell Dir die 1000 DS und die Scroll-Action dabei.
Klar man kann auch im Kombifeld schreiben aber... dann kann ich gleich bei Textfeld bleiben wen's schon sogar funktioniert -und mit Kombis komme gar keinem schritt weiter.

Zitat
Bei der Suche mit Hilfe von Kombifeldern (insbesondere mit der Einstellung "Nur Listeinträge") ist das AfterUpdate-Ereignis (="Nach Aktualisierung") dem Change-Ereignis vorzuziehen, da es hier darum geht, die ausgewählte ID weiterzuverwenden und nicht den damit verbundenen Text.
Hab mich glaube zur fest am Microsofts Cinecity -Informationen gehalten. Als sei es vorbildlich. ^^
Sehe das bring jetzt noch nichts. Lege das erst ab -oder mache mir Gedanken über Neubeginn.
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: MzKlMu am Juli 04, 2015, 11:29:12
Hallo,
ZitatJa... stell Dir die 1000 DS und die Scroll-Action dabei.
und ein Kombi hat die wunderbare Eigenschaft "Automatisch ergänzen" wenn die auf Ja steht bringt Dich jeder eingegeben Buchstabe dem gewünschten Eintrag näher.
Meist reichen schon 2-3 Buchstaben um ohne zu scrollen zur richtigen Auswahl zu kommen. Und Tippfehler können auch keine gemacht werden.
Das Kombi ist in diesem Fall dem Textfeld vorzuziehen.
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: DF6GL am Juli 05, 2015, 08:49:10
Hallo,

nochmal zum "Like":

https://msdn.microsoft.com/en-us/library/bb208897(v=office.12).aspx


Auch wenn es mit Tabellenfeldern vom Datentyp Datum/Uhrzeit oder Zahl (scheinbar) funktioniert, kann der Like-Operator nur auf Strings angewendet werden. Dass Access nun dem User das Leben erleichtern will (wirklich?) und bei der Anwendung von Like auf Zahlen, bzw. Datum diese Datentypen intern zunächst auf "Text" konvertiert und so ein "Funktionieren" erzwingt, halte ich für einen faux pas.
Titel: Re: Merkwürdige Verhalten im FilterTexfeld
Beitrag von: WhiteCrow am Juli 09, 2015, 17:17:40
So. Paar intensive Tage dabei gesessen,
Nachschlagefelder gelöscht, mit Zahlenfeldern ersetzt, Beziehung hergestellt und mehrere Codes getestet
aber so ein Gemisch... -ist glaube mit keinem Textfeld und Kombifeld zusammen zur schaffen.

Aktuelle (https://onedrive.live.com/redir?resid=18FD78B551081696%21184) Datenmodel ist schon gewaltig anders, deswegen jetzt noch mal meine Frage:
Welche Empfehlung könnt Ihr mir dafür geben? Textfelder oder Kombis? welchen Code/Filter? usw.

Zum Filtern benötigt werden 4Felder mit "Fremdkeys" (also Zahl) dann ein Text- und chkBox- Feld
Alle weiteren die hier im Vorlage nicht vorhanden sind, -sind auch im Filterung irrelevant
Dankeschön im voraus
Gruß
*crow