Neuigkeiten:

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

Mobiles Hauptmenü

Per Button Filtern von leeren Feldern

Begonnen von MarkusR, Mai 02, 2012, 10:18:13

⏪ vorheriges - nächstes ⏩

MarkusR

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

MzKlMu

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

MarkusR

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 :)


MzKlMu

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

MarkusR

Hey,

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

Josef P.

#5
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

DF6GL

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 & "'"

MarkusR

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

Josef P.

#8
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

MarkusR

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!

oma

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
nichts ist fertig!