Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

In Formularen über mehrere (Such-)Felder filtern

Begonnen von Markus Beck, August 25, 2019, 11:00:26

⏪ vorheriges - nächstes ⏩

Markus Beck

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

MzKlMu

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.
Gruß Klaus

Markus Beck

Vielen Dank für die Hinweise.
Ich bin noch blutiger Anfänger im Umgang mit solchen Foren  :-[
Werde gleich versuchen nachzubessern...

Gruss Markus

Markus Beck

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

Josef P.

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

Markus Beck

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...

Beaker s.a.

Hallo Markus,
Vielleicht hilft dir auch dieses, von Josef und mir entwickelte, kleine Tool:
SqlDebugPrint
I.Ü. hilft es beim Programmieren, wenn man sich mit der Verarbeitung von
Strings wie teilen, (neu)zusammensetzen usw. vertraut macht.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Xoar

@Ekkehard

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

Grüße

Beaker s.a.

Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

derArb

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)

Markus Beck

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.

derArb

Hallo,
ich habs mal weitergegeben, denn bei mir klappt es auch nicht.
Es öffnet sich kein Downloadfenster.

Bitsqueezer

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

derArb

Hallo,
dann hoffe ich dass Markus Beck das noch liest, um den es ja gerade aktuell ging.

Markus Beck

Download hat nun auch bei mir bestens geklappt. Vielen Dank!
Dieser Filter sieht super aus. Werde mich demnächst mal vertieft damit beschäftigen...  :)