Guten Tag
Ich möchte gerne ein Formular so umstellen, dass der Filter nicht mehr auf der Abfrage basiert sondern direkt im Formular ausgeführt wird.
Die zugrundeliegende Abfrage funktioniert.
Die Codes für die Filterung der einzelnen Felder funktionieren auch.
Private Sub Suchfilter()
'------------------------
'Suchfilter für Abfrage
'------------------------
If Not IsNull(Me.ArtDescCN) Or Not IsNull(Me.ArtDescEN) Or Not IsNull(Me.ArtNo) Then
Me.filter = "ArtikelNr LIKE '" & "*" & Me.ArtNo & "*" & "' " And _
Me.filter = "Bezeichnung LIKE '" & "*" & Me.ArtDescEN & "*" & "'" And _
Me.filter = "Description_CN LIKE '" & "*" & Me.ArtDescCN & "*" & "'"
FilterOn = True
Else
MsgBox "Fehler"
End If
End Sub
Was ich nicht auf die Reihe kriege ist, den Code mit einer UND Bedingung zu verknüpfen, so dass alle Suchbegriffe berücksichtigt werden.
Hat jemand eine Idee?
Vielen Dank
Markus
Hallo,
es ist unsinnig Code als Bild hier zu zeigen. Da lässt sich ja nichts ändern.
Veröffentliche den Code hier als Text (mit Codetags) damit man das nicht abschreiben muss.
Du solltest auch Deine Versuche beschreiben und die Fehlermeldungen zitieren.
Der im Bild gezeigte Code kann ja so auch nicht funktionieren, Du weist ja in jeder Zeile den Filter erneut zu.
Vielen Dank für die Hinweise.
Ich bin noch blutiger Anfänger im Umgang mit solchen Foren :-[
Werde gleich versuchen nachzubessern...
Gruss Markus
Zitat von: MzKlMu am August 25, 2019, 11:08:20
Der im Bild gezeigte Code kann ja so auch nicht funktionieren, Du weist ja in jeder Zeile den Filter erneut zu.
Das habe ich verstanden. Es war aber die einzige versuchte Konstellation die nicht in einer Fehlermeldung endete.
Für mich logisch wäre folgender Code gewesen:
Private Sub Suchfilter()
'------------------------
'Suchfilter für Abfrage
'------------------------
If Not IsNull(Me.ArtDescCN) Or Not IsNull(Me.ArtDescEN) Or Not IsNull(Me.ArtNo) Then
Me.filter = "ArtikelNr LIKE '" & "*" & Me.ArtNo & "*" & "' " And _
"Bezeichnung LIKE '" & "*" & Me.ArtDescEN & "*" & "'" And _
"Description_CN LIKE '" & "*" & Me.ArtDescCN & "*" & "'"
FilterOn = True
Else
MsgBox "Fehler"
End If
End SubDie Fehlermeldung darauf...
---
Run-time error '13':
Type mismatch
---
Damit kann ich leider gar nichts anfangen.
Gruss Markus
Hallo!
Du verbindest Strings mit And statt den And-Ausdruck im String zu speichern.
Allg. Tipp:
Geh (gedanklich) von dem fertigen Filterausdruck aus, der als String an Me.Filter übergeben werden soll.
Beispiel:
Ziel: ArtikelNr LIKE '*12345*' And Bezeichnung LIKE '*abc*' And Description_CN LIKE '*xyz*'
dim FilterString as string
FilterString = "ArtikelNr LIKE '*12345*' And Bezeichnung LIKE '*abc*' And Description_CN LIKE '*xyz*'"
Me.Filter = FilterString
Me.FilterOn = true
Diesen Ausdruck (nur mit passenden Werten) testest du. Wenn richtig gefiltert wird, weißt du zumindest schon einmal, dass der Filterausdruck passt.
Der obige Ausdruck ist noch nicht dynamisch. Das machst du in den folgenden Schritten.
Zuerst teilst du die Werte, welche später aus einem Steuerelement kommen sollen, als String ab. Dafür fügst du " & " davor und dahinter ein.
=>
dim FilterString as string
FilterString = "ArtikelNr LIKE '*" & "12345" & "*' And Bezeichnung LIKE '*" & "abc" & "*' And Description_CN LIKE '*" & "xyz" & "*'"
Me.Filter = FilterString
Me.FilterOn = true
Als letzte Anpassung erstetzt du die statischen Stringwerte durch die jeweiligen Steuerelementwerte.
Z.B. "12345" ersetzen durch Me.ArtNo.Value
dim FilterString as string
FilterString = "ArtikelNr LIKE '*" & Me.ArtNo.Value & "*' And Bezeichnung LIKE '*" & Me.ArtDescEN.Value & "*' And Description_CN LIKE '*" & Me.ArtDescCN.Value & "*'"
Me.Filter = FilterString
Me.FilterOn = true
mfg
Josef
Hallo Josef
Vorab vielen Dank für Deine Unterstützung.
Beim Lesen glaube ich, es verstanden zu haben. Für die Umsetzung brauche ich aber etwas Zeit, da sonst noch viel um die Ohren im Moment. Melde mich wieder...
Hallo Markus,
Vielleicht hilft dir auch dieses, von Josef und mir entwickelte, kleine Tool:
SqlDebugPrint (http://"http://access-codelib.net/download/addins/SqlDebugPrint.zip")
I.Ü. hilft es beim Programmieren, wenn man sich mit der Verarbeitung von
Strings wie teilen, (neu)zusammensetzen usw. vertraut macht.
gruss ekkehard
@Ekkehard
Der Link klappt bei mir leider nicht. Kannst den bitte einmal überprüfen?
Grüße
versuche es hiermit
http://access-codelib.net/download/addins/SqlDebugPrint.zip (http://access-codelib.net/download/addins/SqlDebugPrint.zip)
Hallo,
http://www.ccedv.de/downloads/start.php?lang=de
hier gibt es ein äusserst elegantes und flexibles Filterformular, welches
mit ganz wenigen und simplen Änderungen ein Höchstmass an Flexibilität
anbietet. Es ist als CCFilterV2_7 zum downloaden dort verfügbar und absolut kostenlos.
Es ist insofern auch immer noch up to date, weil der Programmierer sich
nachweislich in einem anderen Access-Forum für Fragen dazu immer noch
meldet (Sein Benutzername ist "Bitsqueezer" im Forum http://www.office-loesung.de/p)
an alle für Eure sehr hilfreichen Beiträge: VIELEN DANK!!!
@Josef: Deine Schritt für Schritt - Anleitung ist der Hammer. Ich habe jetzt nicht nur die Lösung sonder kann in Zukunft selbständig solche Strings aufbauen. Lerneffekt 100%. Einfach super!
@Beaker s.a.: Die Dateien konnte ich runterladen und die SqlDebugPrint.mdb läuft auch. Werde sehr gerne später damit experimentieren.
@ derArb: Der Link funktioniert. Leider erhalte ich eine Fehlermeldung beim Versuch die Datei runterzuladen. Siehe Anhang.
Hallo,
ich habs mal weitergegeben, denn bei mir klappt es auch nicht.
Es öffnet sich kein Downloadfenster.
Hallo,
vielen Dank für den Hinweis an derArb.
Das Downloadskript ist schon älteren Datums, mein Host-Provider hat aber kürzlich die PHP-Version von 5 auf 7 hochgedreht, hier gibt es offenbar eine kleine Inkompatibilität bei Funktionsaufrufen, bei denen man für optionale Parameter nun ein "= Null" hinzufügen muß, was vorher nicht notwendig war.
Nachdem ich diese Anpassung gemacht habe, läuft das Skript wieder und die Downloads starten wieder.
Happy Downloading...:-)
Es kommt immer mal wieder vor, daß die Downloadseite komplett leer ist, das ist irgendein Fehler im Skript (das nicht von mir geschrieben ist), bei der die Datei, in der die Downloadliste steht, auf 0 Bytes gesetzt wird. Ich muß das dann immer per FTP wieder restaurieren. Solltet Ihr also eine leere Liste sehen, einfach kurz bescheid sagen, ich schaue da nicht jeden Tag drauf.
Gruß
Christian
Hallo,
dann hoffe ich dass Markus Beck das noch liest, um den es ja gerade aktuell ging.
Download hat nun auch bei mir bestens geklappt. Vielen Dank!
Dieser Filter sieht super aus. Werde mich demnächst mal vertieft damit beschäftigen... :)