Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Markus Beck am August 25, 2019, 11:00:26

Titel: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Markus Beck am August 25, 2019, 11:00:26
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
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: MzKlMu am August 25, 2019, 11:08:20
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.
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Markus Beck am August 25, 2019, 11:17:16
Vielen Dank für die Hinweise.
Ich bin noch blutiger Anfänger im Umgang mit solchen Foren  :-[
Werde gleich versuchen nachzubessern...

Gruss Markus
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Markus Beck am August 25, 2019, 11:40:54
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 Sub


Die Fehlermeldung darauf...

---
Run-time error '13':
Type mismatch
---

Damit kann ich leider gar nichts anfangen.

Gruss Markus
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Josef P. am August 25, 2019, 14:59:27
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
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Markus Beck am August 26, 2019, 06:00:21
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...
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Beaker s.a. am August 26, 2019, 13:29:48
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
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Xoar am August 26, 2019, 14:17:02
@Ekkehard

Der Link klappt bei mir leider nicht. Kannst den bitte einmal überprüfen?

Grüße
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Beaker s.a. am August 26, 2019, 14:36:06
versuche es hiermit
http://access-codelib.net/download/addins/SqlDebugPrint.zip (http://access-codelib.net/download/addins/SqlDebugPrint.zip)
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: derArb am August 27, 2019, 13:03:21
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)
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Markus Beck am August 28, 2019, 02:49:12
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.
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: derArb am August 28, 2019, 12:54:45
Hallo,
ich habs mal weitergegeben, denn bei mir klappt es auch nicht.
Es öffnet sich kein Downloadfenster.
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Bitsqueezer am August 28, 2019, 13:39:51
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
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: derArb am August 28, 2019, 13:59:16
Hallo,
dann hoffe ich dass Markus Beck das noch liest, um den es ja gerade aktuell ging.
Titel: Re: In Formularen über mehrere (Such-)Felder filtern
Beitrag von: Markus Beck am August 29, 2019, 02:21:29
Download hat nun auch bei mir bestens geklappt. Vielen Dank!
Dieser Filter sieht super aus. Werde mich demnächst mal vertieft damit beschäftigen...  :)