Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: MarkusR am Mai 02, 2012, 10:18:13

Titel: Per Button Filtern von leeren Feldern
Beitrag von: MarkusR am Mai 02, 2012, 10:18:13
Guten Morgen zusammen,

ich brauch mal wieder Eure Hilfe :)

Ich möchte in einem Formular per Button einen Filter setzen. Der Filter soll alle Datensätze filtern, wo ein bestimmtes Feld leer ist. Das Feld ist vom Typ ein Datumsfeld. Irgendwie steh ich grad aufm Schlauch...

So funktionierts auf jeden Fall schonmal nicht:

Private Sub UeberwiesenAm_Bezeichnungsfeld_Click()
    Me.Filter = "Forms!Kundenrechnungen!UeberwiesenAm Is Null"
    Me.FilterOn = True
End Sub


Über jegliche Tipps bin ich sehr dankbar!

Viele Grüße,
Markus
Titel: Re: Per Button Filtern von leeren Feldern
Beitrag von: MzKlMu am Mai 02, 2012, 10:40:45
Hallo,
den Formularbezug halte ich für überflüssig.
Ob das der Fehler ist, weis ich nicht. Der Code sieht ansonsten sauber aus.
Versuche es mal so:
Private Sub UeberwiesenAm_Bezeichnungsfeld_Click()
    Me.Filter = "UeberwiesenAm Is Null"
    Me.FilterOn = True
End Sub
Titel: Re: Per Button Filtern von leeren Feldern
Beitrag von: MarkusR am Mai 02, 2012, 10:55:53
Hey,

das ist ja witzig. Es lag tatsächlich an dem Formularbezug. Hätte ich nicht gedacht...Vielen Dank!

Andere Frage...wie kann man einen Filter setzen, ohne den Filter der schon aktiv ist zu löschen? Habs versucht mit:

Private Sub Kunde_Bezeichnungsfeld_Click()
    Dim KundenFilter As String
   
    KundenFilter = InputBox("Nach welchem Kunden möchten Sie filtern?")
    Me.Filter = Me.Filter & "And Kunde = '" & KundenFilter & "'"
    Me.FilterOn = True
End Sub


Aber da gibt er mit einen Laufzeitfehler '3075' zurück. (Syntaxfehler (fehlender Operator) in Abfrageausdruck 'UeberwiesenAm Is NullAnd Kunde = 'ABC' And Kunde = 'ABC' And Kunde = 'ABC".)

Nochmal Danke im voraus :)

Titel: Re: Per Button Filtern von leeren Feldern
Beitrag von: MzKlMu am Mai 02, 2012, 11:00:03
Hallo,
der Filterstring muss immer komplett zusammengebaut werden unter Einschluss der vorherigen Filter.
Du kannst aber den Filterstring eine Variablen zuweisen und diese dann ergänzen.
Titel: Re: Per Button Filtern von leeren Feldern
Beitrag von: MarkusR am Mai 02, 2012, 11:02:04
Hey,

und wenn ich nicht weiß, wonach vorher gefiltert wurde?
Titel: Re: Per Button Filtern von leeren Feldern
Beitrag von: Josef P. am Mai 02, 2012, 11:09:52
Hallo!

Zitat'UeberwiesenAm Is NullAnd Kunde = 'ABC'

Fällt dir an diesem Code nichts auf?

Wie gefällt dir zum Vergleich:
'UeberwiesenAm Is Null And Kunde = 'ABC'

Noch eines musst du beachten:
Was ist, wenn der User einen weiteren Kundennamen eingibt?
Dann entsteht möglicherweise folgendes:
'UeberwiesenAm Is Null And Kunde = 'ABC' And Kunde = 'XYZ'
Ob es dann noch Treffer gibt? ;)

=> Filter immer aus allen Filtersteuerelementen (oder Variablen) dynamisch zusammensetzen und diesen String an Form.Filter übergeben.
Beispiele dafür findest du bestimmt in diesem Forum oder per Suchmaschine.

mfg
Josef
Titel: Re: Per Button Filtern von leeren Feldern
Beitrag von: DF6GL am Mai 02, 2012, 11:12:25
Hallo,

"und wenn ich nicht weiß, wonach vorher gefiltert wurde?"


und wozu willst Du das (zu diesem Zeitpunkt) noch "wissen"?

Solche Filterzusammensetzungen gehen vielleicht einmal, vielleicht auch zweimal, aber dann ergibt sich eine Where-Conditon, die gar keine DS mehr liefert....


Ansonsten korrigiere den Bedingungsausdruck:






Me.Filter = Me.Filter & "  And Kunde = '" & KundenFilter & "'"
Titel: Re: Per Button Filtern von leeren Feldern
Beitrag von: MarkusR am Mai 02, 2012, 11:19:16
Zitat von: Josef P. am Mai 02, 2012, 11:09:52
=> Filter immer aus allen Filtersteuerelementen (oder Variablen) dynamisch zusammensetzen und diesen String an Form.Filter übergeben.

Heißt das, dass ich per Button nur einen (oder mehrere) bestimmte Filter setzen kann und keine vorher gesetzten Filter übernehmen kann? Sinn und Zweck soll einfach sein, dass ich z.B. nur nach einem Kunden filtern möchte ODER nur nach noch nicht überwiesenen Rechnungen von einem Kunden filtern möchte...
Titel: Re: Per Button Filtern von leeren Feldern
Beitrag von: Josef P. am Mai 02, 2012, 11:24:02
Hallo!

Dein Code ist grundsätzlich (bezogen auf Syntax) korrekt - bis auf das fehlende Leerzeichen und den Fall, dass Form.Filter noch keinen Wert enthält. Der Code kann aber inhaltlich falsch werden, wenn der User 2x nach einem Kunden filtert, ohne zuvor den Filter zu entfernen.
Was du genau benötigst und wie der Filterablauf sein soll, kann ich aus den bisherigen Beschreibungen nicht entnehmen. Daher kann dein Vorhaben grundsätzlich passen oder komplett verkehrt sein. ;)

Private Sub Kunde_Bezeichnungsfeld_Click()
   Dim KundenFilter As String
   dim VorhandenderFilter as String
   
   KundenFilter = InputBox("Nach welchem Kunden möchten Sie filtern?")
   if len(Me.Filter)> 0 then
        VorhandenderFilter = Me.Filter & " And "
   end If
   Me.Filter = VorhandenderFilter & "Kunde = '" & replace(KundenFilter, "'", "''") & "'"
   Me.FilterOn = True
End Sub


mfg
Josef
Titel: Re: Per Button Filtern von leeren Feldern
Beitrag von: MarkusR am Mai 02, 2012, 13:26:53
Hey Josef,

Deine Idee fand ich gut...hat nur leider nicht funktioniert.

Ich habs jetzt so gelöst, dass ich zwei nicht sichtbare Textfelder Filter1 und Filter2 erstellt habe. Dort werden dann einfach die jeweiligen Filter eingefügt und dann überprüft, ob es einen Filter gibt und der wird dann übernommen. Zudem schaut er, obs im aktuellen Feld schon einen Filter gibt -> gibt es einen Filter, löscht er nur diesen einen (acCmdRemoveFilterFromCurrentColumn)

Somit klappt jetzt alles :)

Danke nochmal für Eure Hilfe!
Titel: Re: Per Button Filtern von leeren Feldern
Beitrag von: oma am Mai 02, 2012, 17:07:15
Hallo Markus,

und warum übernimmst du nicht den Vorschlag von Josef in #5 und stellst einen dynamischen Suchstring zusammen!!?
Hier im Forum gibt es genügend Beispiele


Gruß Oma