Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Bernd Sowa am August 12, 2020, 16:29:25

Titel: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 12, 2020, 16:29:25
Hallo zusammen.
Ich habe ein Formular in dem ich mehrere Listenfelder mit Mehrfachauswahl und zwei Filter habe.
Nun überschreiben Sie sich ja gegenseitig immer wieder.
Ich möchte nun einen Button installieren mit dem ich auf Knopfdruck alle Auswahlen auf einmal auslösen kann.

Eines der Listenfelder filtert über einen Button:

Private Sub Befehl668_Click()
Dim sCriteria As String
    Dim varItem As Variant
    With Me
        sCriteria = "IN ("
        If .Schweißverfahren.ItemsSelected.Count > 0 Then
       
       
            For Each varItem In .Schweißverfahren.ItemsSelected
           
               sCriteria = sCriteria & "'" & .Schweißverfahren.ItemData(varItem) & "', "
               
            Next varItem
                     sCriteria = Left(sCriteria, Len(sCriteria) - 2)
                     Debug.Print sCriteria
            .Filter = "Verfahren " & sCriteria & ")"
            .FilterOn = True
            Debug.Print .Filter
        Else
            .Filter = ""
            .FilterOn = False
        End If
    End With
   
End Sub

Das andere genauso, nur die Namen sind natürlich angepasst.
Dann habe ich noch einen Filter der so aussieht:

Private Sub Befehl314_Click()
   
Me.Wand1 = Str(WdE)
Me.D1 = Str(ØE)
Me.Filter = Nz(Me!Wand1, 0) & " between WdMin and WdMax  AND " & Nz(Me!D1, 0) & " between DuMin and DuMax"
Me.FilterOn = True

End Sub

Alles für sich klappt gut, nur alle Filter auf einen Button zu legen übersteigt meine (wirklich) bescheidenen Kenntnisse.

Kann mir jemand helfen?
LG
Bernd
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: ebs17 am August 12, 2020, 16:44:43
Vor Verwendung ist ein Filter nur eine Zeichenkette (Text). Einzelfilter kann man also einfach zusammenhängen, sprich entsprechend gewünschter Logik per AND oder OR zu einem Gesamtfilter verknüpfen.
Probiere es aus.
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 13, 2020, 09:59:08
Hallo Eberhard,
Danke für die Antwort...
"einfach zusammenhängen" hört sich einfach an... (ist es für euch ja wahrscheinlich auch)
Ich habe da einige Probleme.
Hab folgendes Probiert (zwei Filter "einfach" mit AND verbunden und bekomme eine Fehlermeldung: "Fehler beim Kompilieren"

Private Sub Befehl668_Click()
Dim sCriteria As String
    Dim varItem As Variant
    With Me
        sCriteria = "IN ("
        If .SZWAuswahl.ItemsSelected.Count > 0 Then
       
       
            For Each varItem In .SZWAuswahl.ItemsSelected
           
               sCriteria = sCriteria & "'" & .SZWAuswahl.ItemData(varItem) & "', "
               
            Next varItem
                     sCriteria = Left(sCriteria, Len(sCriteria) - 2)
                     Debug.Print sCriteria
            .Filter = "SZW " & sCriteria & ")"
            .FilterOn = True
            Debug.Print .Filter
        Else
            .Filter = ""
            .FilterOn = False
        End If
    End With
AND
Dim sCriteria As String
    Dim varItem As Variant
    With Me
        sCriteria = "IN ("
        If .Schweißverfahren.ItemsSelected.Count > 0 Then
       
       
            For Each varItem In .Schweißverfahren.ItemsSelected
           
               sCriteria = sCriteria & "'" & .Schweißverfahren.ItemData(varItem) & "', "
               
            Next varItem
                     sCriteria = Left(sCriteria, Len(sCriteria) - 2)
                     Debug.Print sCriteria
            .Filter = "Verfahren " & sCriteria & ")"
            .FilterOn = True
            Debug.Print .Filter
        Else
            .Filter = ""
            .FilterOn = False
        End If
    End With
   
End Sub
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 13, 2020, 10:02:21
Noch eine Frage am Rande...
Wenn ich die Filter mit AND auslöse betrifft das ja mehrere Filter.
Was passiert wenn z.B. einer der Filter nicht gesetzt wurde weil für eine bestimmte Abfrage nicht benötigt?
Läuft er dann auch durch oder muss ich dann anders vorgehen?
LG
Bernd
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 13, 2020, 10:25:12
Hallo,

Du verkettest ja die Filterstrings mit "and" zu einem neuen String.

Wenn da ein Teilstring (ein "Filter") fehlt, dann verkettest Du einen Leerstring , den "and" -String und den zweiten Filterstring zu einem neuen.  Das führt dann unweigerlich zu einem Syntaxfehler, sofern der Gesamtstring nicht entspr. korrigiert wird.

Gebe den Gesamt->Filter-String mal mit

Debug.Print "Verfahren " & sCriteria & ")"
ins Direktfenster aus, dann siehst Du schon die Fehlerstellen.



Außerdem kann der Code insgesamt nicht funktionieren, besser so:

With Me
               sCriteria =""
        If .Schweißverfahren.ItemsSelected.Count > 0 Then
.
.

         .Filter = "SZW In (" & sCriteria & ")"
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 13, 2020, 12:53:06
Hallo Franz,
danke für die Antwort.
Die ist leider, wie so oft wenn hier geantwortet wird, nur Hilfreich für jemanden der sich mit VBA wirklich auskennt.
Ich tu das leider nicht und bin momentan so schlau wie zuvor.
Es ist ja ein guter Ansatz, die Leute zum Nachdenken anzuregen, aber häufig (so geht es mir zumindest) setzt die Antwort wieder so viel nicht vorhandenes Wissen voraus, dass es nicht hilft... Bin ja nun wirklich nicht mehr der Jüngste und mir fällt das Lernen solcher komplexen Codes echt schwer.
Am Liebsten wäre mir, wenn ich die Mehrfachauswahlen aus den Listenfeldern direkt an die dem Formular zugrunde liegende Abfrage übergeben könnte. So dass direkt in der Abfrage gefiltert wird aber alles was ich zu diesem Thema gefunden habe war so dermaßen Kryptisch für mich, dass ich so langsam resigniere...
Ich kann die Mehrfachauswahl z.B. in ein Textfeld ausgeben, immer mit einem Komma getrennt aber wie lasse ich nun die Abfrage damit arbeiten?
Gruß vom Niederrhein...
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 13, 2020, 14:58:35
Hallo,

ja nun, wenn Du schon Code benutzt, musst Du ihn auch interpretieren können, sonst wirst Du immer nie wissen, was Du tust und demzufolge auch keine Fehler eliminieren können.

Bin ja nun wirklich nicht mehr der Jüngste
Vorsicht! Nicht dass Du Dich an mir (bzw.  an einigen von uns) in dieser Beziehung messen lassen musst   ;)  ;)  :D

Lad mal die DB hier hoch, komprimiert/repariert , gezippt und evtl. datenreduziert. Dann kann der Code angepasst werden. (Beschreibe aber, wo (in welchem Form) und wann (bei Klick auf irgendwas) die Filterung stattfinden soll.




(Luftcode!):

Private Sub Befehl668_Click()

Dim sCriteria As String, _
    sCriteria1 As String, _
    varItem As Variant

    With Me
        sCriteria = ""
        If .SZWAuswahl.ItemsSelected.Count > 0 Then
       
            For Each varItem In .SZWAuswahl.ItemsSelected
               sCriteria = sCriteria & ",'" & .SZWAuswahl.ItemData(varItem) & "'"
            Next varItem

                     If Len(sCriteria) > 0 Then sCriteria = "SWZ In (" & Mid(sCriteria, 2) & ")"
                     Debug.Print sCriteria
       
        If .Schweißverfahren.ItemsSelected.Count > 0 Then

            For Each varItem In .Schweißverfahren.ItemsSelected
               sCriteria1 = sCriteria1 & ",'" & .Schweißverfahren.ItemData(varItem) & "'"
            Next varItem

                If Len(strCritera1) > 0 Then sCritera1 = sCriteria & " And Verfahren In (" & Mid(sCriteria1,2) & ")"

                If Left(sCriteria,4) = " And"  Then   sCriteria = Mid (sCriteria,6)
                Debug.Print sCriteria

            .Filter =  sCriteria
             .FilterOn = True
            Debug.Print .Filter
        Else
            .Filter = ""
            .FilterOn = False
        End If
    End With
   
End Sub
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 14, 2020, 08:23:19
Hallo Franz, du würdest mir wirklich sehr helfen...
Ich musste noch personenbezogene Daten verändern und Datensätze entfernen.
Wenn du im Startformular auf die rote Schaltfläche klickst kommst du zu meinem Sorgenkind.
Ich hoffe, ich habe es dort gut beschrieben.
Am besten wäre es, eine Filtermöglichkeit über Mehrfachauswahlen im Listenfeld in der Abfrage hinzubekommen.
Ist auch einfacher für den Bericht und die Ausgabe nach Excel...
Aber ein Button tut´s auch zur Not.
LG
Bernd
PS nicht erschrecken falls du dir die DB mal genauer ansiehst... :-)
Nicht schön aber es funzt... so weit...
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 14, 2020, 11:00:12
Hallo,

bin nicht erschrocken, bin entsetzt....  ;)  :o  :o


Hausaufgabe:

-- Tabellen normalisieren und in Beziehung setzen.
-- Aussagekräftige Benennung bei Namen verwenden
-- Keine Sonder- und Leerzeichen in Namen verwenden
-- Drastische Reduzierung der Abfragen (und auch Formulare).
-- Keine Formularsteuerelement-Bezüge in Abfragen.
-- Keine Makros.
-- In ALLEN Modulköpfen "Option Explicit" einfügen.
-- Debuggen/Kompilieren im VBA-Editor durchführen. ALLE Fehlersituationen bereinigen/eliminieren.



Ich habe keine Änderungen diesbezüglich gemacht (außer versucht zu kompilieren. Da ging es aber ins "Unendliche").  Es würde mein zeitliches Budget für diesen Thread sprengen.


Füge folgende Ereignisprozudur zu einer Schaltfläche ("Befehl668") ein:

Private Sub Befehl668_Click()

Dim sCriteria As String, _
    sCriteria1 As String, _
    varItem As Variant

 With Me
 
        '-- nur beim Filtern mittels Recordsource-------     
        .RecordSource = "SELECT * FROM Abfr_Eigenschweißer_Prüfungen WHERE (1)=1"
        '-----------------------------------------------


        sCriteria = ""
        If .SZWAuswahl.ItemsSelected.Count > 0 Then
       
            For Each varItem In .SZWAuswahl.ItemsSelected
               sCriteria = sCriteria & ",'" & .SZWAuswahl.ItemData(varItem) & "'"
            Next varItem

                     If Len(sCriteria) > 0 Then sCriteria = "SZW In (" & Mid(sCriteria, 2) & ")"
   
        End If
       
        If .Schweißverfahren.ItemsSelected.Count > 0 Then

            For Each varItem In .Schweißverfahren.ItemsSelected
               sCriteria1 = sCriteria1 & ",'" & .Schweißverfahren.ItemData(varItem) & "'"
            Next varItem

                If Len(sCriteria1) > 0 Then
                sCriteria = sCriteria & " And Verfahren In (" & Mid(sCriteria1, 2) & ")"
                End If
               
         End If
               
                If Left(sCriteria, 4) = " And" Then sCriteria = Mid(sCriteria, 6)
                       
                        ''''''   zum Filtern des Recordsets------------------------
                        ''''''            .Filter = sCriteria
                        ''''''             .FilterOn = True
                        ''''''------------------------------------------------------
                       
                       
                        ' zum Filtern der Recordsource------------------------------
                        If Len(sCriteria) > 0 Then
                          .RecordSource = Replace(.RecordSource, "(1)=1", sCriteria)
                        Else
                          .RecordSource = "SELECT * FROM Abfr_Eigenschweißer_Prüfungen WHERE (1)=1"
                        End If
                        '--------------------------------------------------------------

    End With
                   
                   
End Sub
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 14, 2020, 18:34:44
Hallo Franz
Dachte mir dass dir die Kinnlade auf die Tastatur fällt wenn du dir die DB ansiehst...  ;D
Aber wie gesagt, sie funktioniert... irgendwie...
Natürlich hast du mit allem Recht.
Aber ich habe mich ohne Vorwissen einfach mal drangetraut und sie neben meinem Job (der mit so etwas mal so gar nix zu tun hat) zusammengezimmert. Immer wenn ich mal ein Stündchen Leerlauf hatte...
Ich habe natürlich alles falsch gemacht weil mir das nötige Wissen fehlt wie man so etwas aufbaut.

Trotzdem bin ich ein kleines bisschen stolz darauf.
Lass mir das bitte...  ;)

Ich werde Montag den Code einbauen.

Und ich bin dir sehr dankbar...
Ihr seid wirklich in Ordnung.
Wie macht ihr das eigentlich? Nur so aus Spaß oder Hobby oder ist eine Organisation dahinter?

Auf jeden Fall wünsche ich dir erst einmal ein schönes Wochenende.
LG
Bernd
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Beaker s.a. am August 14, 2020, 19:03:35
Hallo Bernd,
ZitatNur so aus Spaß oder Hobby oder ist eine Organisation dahinter?
Ja, nein.
Alle, die hier helfen machen es Spass an der Freude. Und manche auch um
selber dabei zu lernen.
ZitatAber ich habe mich ohne Vorwissen einfach mal drangetraut
Und nicht einmal versucht ein Buch zu lesen? Dann tu dir jetzt den Gefallen,
und lies ein paar Seiten von Franz' Links in seiner Signatur. Ich würde 4. als
Einstieg empfehlen.
gruss ekkehard
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 15, 2020, 08:20:23
Hallo,

ZitatTrotzdem bin ich ein kleines bisschen stolz darauf.
Lass mir das bitte...  ;)

Das kannst Du auch sein, bei solchen Vorbedingungen.


Und wegnehmen will Dir das auch niemand.   :)


Ich wollte nur aufzeigen, was überprüft werden sollte, damit sich nicht irgendwo eine Fallgrube auftut, aus der man nicht mehr herauskommt.

Zur Filtergeschichte möchte ich noch anmerken, dass man genau definieren sollte, was und nach welcher Methode gefiltert werden muss:

Ob einzeln (filtern direkt nach Eingabe in ein Suchfeld oder Auswahl in einem Listen-/Kombifeld) oder kombinatorisch nach Eingabe in alle Suchfelder (auch NULL berücksichtigen?) .


"Filtern" selber sollte auch näher bestimmt werden:  Soll es die "Einschränkung" von Datensätzen (Where-Condition in Abfrage) bedeuten oder das EInschränken der DS-Anzeige in einem Form (Me.Filter ="xxx") oder lediglich die Positionieren auf einen bestimmten im Formular angezeigten Datensatz  (Me.Recordset.Findfirst "xxxx")  bedeuten.

Alle diese Methoden haben unterschiedliche Auswirkungen auf die weitere Bearbeitung von DS, auch wenn die Datenanzeige im Formular recht ähnlich aussieht.





Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 17, 2020, 11:04:35
Hallo Franz und Ekkehard,
ich werde lesen, versprochen...
Ich habe auch ein Buch, aber wenn man den Lösungsansazu für sein Problem auf seite 497 gefunden hat kann man damit nicht viel anfangen da man die Seiten 1 - 496 gelesen und verstanden haben muss um das umzusetzten :-).
Ich werde mich bessern...

Allerdings habe ich noch ein Problemchen.
auf dem Formular gibt es einen Button mit folgendem Code:

Private Sub Befehl653_Click()
 
    DoCmd.OpenReport "Bericht_Eigenschweißer_Prüfungen10_Übersicht", acViewReport, , Me.Filter _
                    , acWindowNormal

End Sub

Hat auch gut geklappt, nur jetzt werden die Mehrfachauswahlen ignoriert... Die anderen Filter werden berücksichtigt.

Könnt ihr mir noch einmal unter die Arme greifen?

LG
Bernd
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 17, 2020, 11:28:29
Hallo,

wenn Du Me.Filter benutzt, dann muss diese Eigenschaft vorher auch entspr. gesetzt worden sein.


Da funktioniert die Methode mit der Recordsource (Datenherkunft)  nicht...
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 17, 2020, 12:05:37
Es gibt aber eine Möglichkeit, die gefilterten Datensätze an den Bericht zu übergeben?
Was muss ich tun?
Ratlose Grüße
Bernd
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 17, 2020, 12:20:56
Hallo,

es werden keine DS an den Bericht übergeben, es wird eine Where-Condition (Kriterium) an den Bericht übergeben, der dann danach die DS filtert.

Ich weiß immer noch nicht, nach welcher Methode Du vorher "filterst".



Du kannst die Variable "sCriteria", die im vorherigen Code zusammengesetzt wurde, als Where-Condition an den Berichtsaufruf übergeben.

DoCmd.OpenReport "Bericht_Eigenschweißer_Prüfungen10_Übersicht", acViewReport, , sCriteria
Auf die Variable musst Du natürlich Zugriff haben, z. B. indem man sie als Public-Variable im Formularmodulkopf deklariert.

Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 17, 2020, 12:45:06
Du weißt dass ich vieles von dem was du schreibst nicht wirklich verstehe...?

Also es gibt Filter direkt über die Abfrage
z.B.
Wie "*" & [Formulare]![For_Eigenschweißer_Prüfungen]![Werkstoffgruppe] & "*"

Dann gibt es Filter die direkt im Formular filtern
z.B.
Me.Filter = Nz(Me!Wand1, 0) & " between WdMin and WdMax  AND " & Nz(Me!D1, 0) & " between DuMin and DuMax"
Me.FilterOn = True

Beide Varianten haben den inhalt des Formulares an den Bericht übergeben mit folgendem Code:
DoCmd.OpenReport "Bericht_Eigenschweißer_Prüfungen10_Übersicht", acViewReport, , Me.Filter _
                    , acWindowNormal

Seit im Formular noch über die Mehrfachauswahl gefiltert wird funktioniert die Ausgabe des Berichtes nicht mehr.
Bzw. die Mehrfachauswahlen werden ignoriert.

Dein letzter Vorschlag hat nicht funktioniert...
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 17, 2020, 16:09:34
Hallo,

zeig doch mal den Code mit der Mehrfach-Auswahl.....


Ich sag's nochmal:  Diese ganze Filtergeschichte ist nicht zielführend. Es wird immer gegenseitige Komplikationen geben.

 
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 18, 2020, 08:04:18
Hallo Franz,
die meißten Codes die es in dieser DB gibt (auch die mit der Mehrfachauswahl) habe ich aus diesem Forum.

Der, der jetzt zwar im Formular funktioniert aber nicht in dem Bericht ist der letzte, den du mir genannt hast:

[/Private Sub Befehl668_Click()

Dim sCriteria As String, _
    sCriteria1 As String, _
    varItem As Variant

 With Me
 
        '-- nur beim Filtern mittels Recordsource-------     
        .RecordSource = "SELECT * FROM Abfr_Eigenschweißer_Prüfungen WHERE (1)=1"
        '-----------------------------------------------


        sCriteria = ""
        If .SZWAuswahl.ItemsSelected.Count > 0 Then
       
            For Each varItem In .SZWAuswahl.ItemsSelected
               sCriteria = sCriteria & ",'" & .SZWAuswahl.ItemData(varItem) & "'"
            Next varItem

                     If Len(sCriteria) > 0 Then sCriteria = "SZW In (" & Mid(sCriteria, 2) & ")"
   
        End If
       
        If .Schweißverfahren.ItemsSelected.Count > 0 Then

            For Each varItem In .Schweißverfahren.ItemsSelected
               sCriteria1 = sCriteria1 & ",'" & .Schweißverfahren.ItemData(varItem) & "'"
            Next varItem

                If Len(sCriteria1) > 0 Then
                sCriteria = sCriteria & " And Verfahren In (" & Mid(sCriteria1, 2) & ")"
                End If
               
         End If
               
                If Left(sCriteria, 4) = " And" Then sCriteria = Mid(sCriteria, 6)
                       
                        ''''''   zum Filtern des Recordsets------------------------
                        ''''''            .Filter = sCriteria
                        ''''''             .FilterOn = True
                        ''''''------------------------------------------------------
                       
                       
                        ' zum Filtern der Recordsource------------------------------
                        If Len(sCriteria) > 0 Then
                          .RecordSource = Replace(.RecordSource, "(1)=1", sCriteria)
                        Else
                          .RecordSource = "SELECT * FROM Abfr_Eigenschweißer_Prüfungen WHERE (1)=1"
                        End If
                        '--------------------------------------------------------------

    End With
                   
                   
End Subcode]

Ich hoffe, dir fällt etwas ein.
Wenn ich das Ergebnis der Filtergeschichte nicht auf´s Papier bringen kann nützt mir das ganze wenig...
LG
Bernd
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 18, 2020, 16:12:10
Hallo,

entferne die Kommentarzeichen unter "zum Filtern des Recordsets".


Füge Kommentarzeichen (Hochkommata) bei "nur beim Filtern mittels Recordsource"  und "zum Filtern des Recordsets"  ein.



Entferne "    sCriteria1 As String, _"  aus dieser Prozedur und füge


Option Compare Database
Option Explicit    'Einfügen, falls nicht vorhanden

Private sCriteria1 As String


in den Prozedurkopf ein.


Rufe den Bericht so auf:

DoCmd.OpenReport "Bericht_Eigenschweißer_Prüfungen10_Übersicht", acViewReport, , sCriteria
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 18, 2020, 17:11:24
Hallo Franz,
bekomme ich irgendwie nicht hin.

einmal schreibst du: "entferne die Kommentarzeichen unter "zum Filtern des Recordsets"."
dann
"Füge Kommentarzeichen (Hochkommata) bei "nur beim Filtern mittels Recordsource"  und "zum Filtern des Recordsets"  ein.
Erst entfernen , dann wieder hinschreiben macht ja keinen Sinn. Also denke ich, dass ich dich nicht so recht verstehe...

"Entferne "    sCriteria1 As String, _"  aus dieser Prozedur und füge "
sCriteria1 Al String, _ finde ich nicht... (hast du dich vielleicht verschrieben?)

"Option Compare Database
Option Explicit    'Einfügen, falls nicht vorhanden

Private sCriteria1 As String"
Wo soll ich das dann hinschreiben?
Anstelle von " sCriteria1 As String, _"?  oder unter varItem As Variant?

Hier ist alles voller Fragezeichen...
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 18, 2020, 18:47:11
Hallo,

sorry,

meinte natürlich:

Füge Kommentarzeichen (Hochkommata) bei "nur beim Filtern mittels Recordsource"  und "zum Filtern der Recordsource"  ein.
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 19, 2020, 08:20:12
Guten Morgen Franz,
ich bin gerade etwas traurig.
Ich verstehe deine Anweisungen nicht wirklich.
Ich habe dir einige Fragen gestellt und bekomme darauf leider keine Antwort sondern du korrigierst nur eine Sache bei der du dich verschrieben hast.
Du hast mir so weit geholfen und nun komme ich beim letzten Schritt nicht weiter.

Ich weiß nicht ob ich das mit den Hochkommatas richtig verstehe, ich weiß nicht wo ich deinen ersten Code einfügen soll.
Ich bekomme immer Fehlermeldungen.


Ratlose Grüße
 
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 19, 2020, 09:13:02
Hallo Bernd,


eigentlich solltest Du die Antworten schon interpretieren und auch umsetzen können..
sorry...

Vielleicht ist es sinnvoll, sich zunächst tiefer mit den Grundlagen und Funktionsweisen von Access auseinander zu setzen.. 


Bloß Makros zusammen zu klicken und Code zu kopieren, ohne ihn nachvollziehen und ihn auch debuggen, bzw. anpassen zu können, ist nicht zielführend.


Lad die aktuelle DB mal hoch, dann könnte es zu weniger Traurigkeit führen, ob aber zu mehr Verständnis....?


Hier nochmal eine Erklärung:

Die mehrfach ausgewählten Werte in den Kombis werden mit einer "AND"- Verknüpfung per VBA-Code zu einem syntaktisch korrekten Text-String (sCriteria) als Filterbedingung (Kriterium) zusammengesetzt. 

Formular-Filter-Methode:
Dieses Kriterium kann nun an die Form-Eigenschaft ".Filter"  übergeben werden , das für die Filterung der im Formular angezeigten Datensätze sorgt.  Im folgenden Verlauf kann mit diesem Kriterium ein Bericht mit passenden Datensätzen geöffnet werden.  Dazu kann man die Filter-Eigenschaft des Forms (Me.Filter) beim Öffnen des Berichts (Where-Condition-Parameter bei der OpenReport-Methode  siehe VBA-Hilfe)  benutzen oder auch die Variable (sCriteria).  Hierfür muss allerdings in der Bericht-Öffnungs-Prozedur der Zugriff auf die Variable möglich sein, deshalb wird sie auch im Formular-Modulkopf als "Private  sCriteria" deklariert. Dadurch ist sie in allen Prozeduren des Formular-Moduls "sichtbar" und verwendbar.


"Recordsource"-Methode:
Diese nutzt nicht die Formular-Filtereigenschaft, sondern die Einstellung der Datenherkunft (Recordsource) des Formulars. Hier wird die Kriteriums-Variable (sCriteria) als "Where-Condition" in eine Abfrage eingebaut.  Die Abfrage wurde im Vorfeld mit einem "Platzhalter"-Kriterium  (  (1)=1   ) versehen, das jetzt per VBA-Code durch den Inhalt von sCritera (aktuelles Kriterium) ersetzt wird und dafür sorgt, dass nur ein Teil der DS in der Tabelle (vor)gefiltert in das Form geladen werden.  Damit stehen aber auch nur diese DS für weitere Filterung über die Filter-Eigenschaft des Formulars zur Verfügung.

Die Wahl der beiden Methoden hängt davon ab, wie man grundsätzlich filtern will und was zum gewünschten Ziel führt.




Ich hoffe, Du verstehst diesen "Jargon".  Wenn nicht, musst Du Dich ernsthaft damit auseinandersetzen.


Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 19, 2020, 10:18:28
Du hast ja mit allem Recht,
ich wurde von dieser Datei eigentlich selbst überrollt...
Am Anfang war noch nicht ganz klar welche Ausmaße das annehmen wird und nun stehe ich da.
Ich dachte mir auch, für irgendwas hat man ja irgendwann diese Makros erfunden, also habe ich sie benutzt.
Der Profi fällt natürlich hintern rüber wenn er sieht was ich da gemacht habe...
Wenn du mir noch ein letztes mal helfen würdest wäre es echt prima...
PS
Wo finde ich eigentlich diese Knöpfe "Sag Danke" und "Thema gelöst"?
Die werden bei mir nicht angezeigt oder ich bin zu (wieder mal) zu doof, sie zu finden...
LG
Bernd
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 19, 2020, 11:44:17
Hallo,

anbei die Umsetzung nach der Recordsource-Methode.

Ich empfehle Dir dringend und als Erstes, im VBA-Editor in ALLEN Modulköpfen Option Explicit einzufügen und anschließend Debuggen/kompilieren auszuführen.  ALLE auftretenden Fehler MÜSSEN eliminiert werden.

Wenn Du das nicht machst, gibt es in Folge keine Hilfe mehr von mir...



PS: den Danke-Knopf gibt es noch nicht..., soweit ich weiß.
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 19, 2020, 13:06:25
Ich bin ja bemüht...  :-[
Option Explicit
Meinst du immer ganz oben in jedem VBA-Modul z.B. über Option Compare Database?

Übrigens berücksichtigt dein Code zwar die Filter links (Schweißverfahren und Schweißzusatz-Gruppe) aber nicht die Abmessung...
Kann man das auch noch irgendwie einfügen?

 
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 19, 2020, 13:51:57
Hallo,

ja, überall wo Option Compare Database steht, muss Option Explicit hinzu.

Wie gesagt, man muss wissen, was und was alles man filtern möchte.... Diese Geschichte ist, wie auch schon gesagt, etwas verkorkst.  Dadurch kommt man nicht auf einen grünen Zweig, wenn man nicht grundsätzliche Änderungen durchführt.



Ich setze aber noch die "Form-Filter"-Methode um, vielleicht erhältst Du dann das erwartete Ergebnis.
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 19, 2020, 14:10:54
Hallo,

hier nun die Umsetzung mit der Filter-Eigenschaft des Form.  Der Bericht wird so gefiltert, wie es das Form erfahren hat.

Inwieweit Formular-Referenzen als Kriterien da mitspielen, habe ich nicht durchforstet.

Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 19, 2020, 16:00:25
Hallo Franz,
hab´s getestet...
Leider verträgt sich dein Code nicht mit dem Filter der Abmessung...
Beispiel
Verfahren .311
Schweißzusatz FM3
= 11 Datensätze
Wenn ich dann nach z.B. 2mm Wanddicke suche (es sollten 4 Datensätze sein) zeigt das Formular wieder 109 DS...
Vielleicht lasse ich die Datenbank so wie sie in der letzten Version war.
Dann kann ich die Suche eben nicht nach den Abmessungen eingrenzen.
Du hast dich schon viel zu viel mit mir rumärgern müssen.
Vielen Dank dafür...
LG
Bernd
Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: DF6GL am August 19, 2020, 16:35:40
Hallo,

hast Du die letzte Version benutzt?

Bei mir zeig sich folgendes Bild mit den 4 Ds:



Titel: Re: Mehrere Filter und Mehrfachabfragen auf Knopfdruck
Beitrag von: Bernd Sowa am August 19, 2020, 16:54:52
Du hast Recht...
Es kommt auf die Reihenfolge der Filterung an.
Erst Abmessung filtern
dann Verfahren und Zusatz.
das geht.
Anders herum funzt es nicht so recht.