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ß
schon gefunden.
Feldbezeichnungen überarbeitet
BIGsry
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ß
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
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? ^^
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 ?
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
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...
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
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.
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... ;-)
Wie könnte ich das anders lösen (2 auf Text, 2 auf Zahl)? Alternativvorschlag?
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.
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"?! ;)
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.
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.
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.
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.
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.
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