Mai 25, 2022, 11:20:17

Neuigkeiten:

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


Endlosformular filtern über Kombinationsfeld (mit Nullwerten)

Begonnen von Umbauwfb, April 08, 2022, 09:43:35

⏪ vorheriges - nächstes ⏩

Umbauwfb

Hallo,
ich möchte ein Formular über ein Kombinationsfeld filtern.

Das Formular heißt "TaskF"
Datenquelle ist die Abfrage "TaskQ"
Das Kombinationsfeld heißt "cboFilterFirma"
Der Filter (Kriterien) in der Abfrage steht im Feld "AdressdatenID"

Ziel:
- Wenn das Kombinationsfeld leer ist, sollen ALLE Daten angezeigt werden
- Wenn in dem Kombinationsfeld ein Suchbegriff selektiert wurde, sollen nur Daten gelistet werden, die zutreffen

Kombinationsfeld
Datensatzherkunft: AdressdatenID
Gebundene Spalte:1 (ID)
Spaltenanzahl: 7
Spaltenbreiten: 0cm;0cm;0cm;3cm;3cm;3cm;3cm
Die Auswahl des Kombinationsfelds funktioniert

Warum funktioniert der nachfolgende Filter (Kriterien) im Feld "AdressdatenID" der Abfrage nicht?

Wenn(IstNull([Forms]![TaskF]![cboFilterFirma]);Wie "*";[Forms]![TaskF]![cboFilterFirma])


Wenn ich dort nur     Wie "*"     eintrage werden ALLE Daten gelistet...

Kann sich das mal jemand anschauen?

Vielen Dank
Harry

Beaker s.a.

Hallo Harry,
Nimm das Kriterium aus der Abfrage, öffne somit das Form mit allen
DS. Das Kombi filtert dann nach Auswahl. Den Code hast du zwar nicht
gezeigt, aber wenn du da auch mit "LIKE" filterst, ändere das zu "=".
Ein Kombi gibt immer den kompletten Inhalt der angeforderten Spalte
zurück, da ist kein Suchmuster nötig.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Umbauwfb

Hallo Ekkehard,

ich verstehe nicht genau, was Du mir sagen willst...und versuche meine Vorgehensweise noch einmal zu erklären:

Ich filtere Formulare sehr oft in der beschriebenen Vorgehensweise.
Ich habe ein Kombinationsfeld im Formular...dem Feld wird eine Tabelle zugewiesen...ein Datensatz wird dann ausgewählt und bildet den Suchbegriff.

In der Abfrage steht in der zugehörigen Spalte im Bereich Kriterien dann der verwendete Code. Der den ausgewählten Inhalt des aus Kombinationsfelds liest und mit diesem Inhalt filtert.

In diesem Beispiel:

Wenn(IstNull([Forms]![TaskF]![cboFilterFirma]);Wie "*";[Forms]![TaskF]![cboFilterFirma])

---------------------------
Normalerweise geht man dem Problem mit Null-Werten aus dem Weg mit dem Code

Wie "*" &  [Forms]![TaskF]![cboFilterFirma] & "*"

Wenn man sich aber auf eine ID bezieht, hat man das Problem, dass nach der Auswahl im Kombinationsfeld mit z.B einem Wert, der die ID 4 hat, auch Datensätze mit ID 14 oder ID 24 oder ID 134...gefiltert wird.
Deswegen kann ich nicht mit dieser Variante arbeiten..
---------------------------
Aus diesem Grund muss ich mit der gezeigten Variante zugreifen, um abzuprüfen, ob in der Kombobox noch nichts eingegeben ist und - wenn das der Fall ist - ALLE Datensätze zeigen (Wie "*")
Ansonsten nur die in dem Kombinationsfeld ausgewählten Datensätze ([Forms]![TaskF]![cboFilterFirma])
----------------------------------

Der Aufbau der Formel ist aber offensichtlich nicht ganz korrekt...ich erhalten immer KEINEN Datensatz...

Das ist jetzt MEINE prinzipielle Vorgehensweise...

Wie würdest Du filtern, ohne in der Abfrage in der zugehörigen Spalte eine Formel zu hinterlegen?

Gruß
Harry




Umbauwfb

Hallo Ekkehard,

ich habe eine kleine Datenbank mit den nötigen Tabellen, der Abfrage und dem Formular zusammengestellt und hier hochgeladen.

Vielleicht wills du Dir das mal anschauen...
- momentan ist der Code in der Abfrage eingetragen...
- das Formular zeigt keinen Datensatz

Wenn Du den Code ausschneidest (um ihn später wieder einsetzen zu können) und das Formular öffnest, erhälst Du dann natürlich alle Datensätze...

Ich will ja aber nach dem Inhalt des Kombinationsfelds Filtern! (rechts oben im Formular)

An diesem Problem arbeite ich jetzt schon den zweiten Tag...auch mit Nz...etc...ich bin inzwischen ratlos...


Gruß Harry



MzKlMu

Hallo,
wenn Du dich auf ein ID beziehst, macht Like absolut keinen Sinn. Und ein Kombi mit der ID als gebunden Spalte kann niemals nur einen Teil der ID enthalten.
Du solltest das so machen wie von Ekehard vorgeschlagen und das Formular nach dem Öffnen filtern.
Im Ereignis "Nach Aktualisierung" des Kombis:

Me.Filter = "AdressdatenID = " & Me.cboFilterFirma
Me.FilterOn = True
Wenn man alle DS sehen will löscht man den Filter mit einem Button:
Me.Filter = ""
Me.FilterOn = False
Wenn man es besonders elegant machen will nimmt man zu der Abfrage für das Kombi per Union noch <Alle> hinzu.
Ein solches Kombi kann niemals Null sein, eine Prüfung auf Null oder die Behandlung von Null ist somit ersatzlos überflüssig.

Dein Beispieldb kann ich nicht öffnen, neuere Version von Access erforderlich.
Gruß
Klaus

Umbauwfb

Hallo Klaus,

ich mache das natürlich gerne, wie vorgeschlagen...ich muss aber nicht nur 1 Filterfeld abprüfen, sondern 3 Filterfelder (siehe Anhang)

Bisher habe ich dann immer in jeder entsprechenden Spalte der Abfrage den nötigen Code eingetragen...

Wenn ich das über VBA über Aktualisieren mache, muss ich mit dem Anstoßen über das jeweilige Feld auch die gesetzten Filter in den beiden anderen Feldern berücksichtigen... ich muss also in irgendeiner Weise sagen

Me.Filter = FilterFeld1 und FilterFeld2 und FilterFeld3

wie wäre das im Code umzusetzen?

Gruß Harry

P.S. Die ID wird in der bisherigen Vorgehensweise nicht "aufgesplittet"...
Korrekt ist: wenn ich im Kombinationsfeld einen Datensatz auswähle, der z.B. die ID 4 besitzt, werden auch Datensätze mit ID 14 oder ID 24....gefiltert, weil die 4 enthalten ist (Wie...)
Aber das ist ja vielleicht alles müßig, wenn alles über VBA geregelt werden kann :)

Schade dass Du die Access-Datei nicht öffnen kannst...ich benutze noch Access2016...
Ich habe 2 Screenshots angehängt, um das Ganze transparenter zu machen...

Gruß Harry
 

Beaker s.a.

@Umbauwfb
Dein Vorhaben ist völlig überflüssig, weil du das, was du erreichen
willst mit meinem Vorschlag (Abfrage ohne Kriterium) direkt umgesetzt
wird. Ein Öffnen ohne Filter ist ja das Gleiche wie ein Kriterium
LIKE "*".
Ein Filter mit den drei Feldern sieht im Prinzip dann so aus
Me.Filter = "Tabellenfeld1 = " & Me.DeinKombi1 & _
    " AND Tabellenfeld2 = " & Me.DeinKombi2 & _
    " AND Tabellenfeld = " & Me.DeinKombi3
Einfacher wäre es wahrscheinlich, wenn du die Kombis voneinander
abhängig gestaltest.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Umbauwfb

Vielen Dank für Eure Hilfe :)
Formular und Filter laufen jetzt perfekt...

Ich habe noch eine Bitte an Klaus, Ekkehard oder...
Ich habe noch eine weiteres offenes Problem gepostet...dazu habe ich bisher leider noch keine
Antwort erhalten.
Es geht um das Erkennen von Emails, die eine bestimmte Kennung im Betreff haben.

Der gesamte Code läuft perfekt für den Outlook-Ordner Posteingang olFolderInbox
Der Code soll jetzt ergänzt werden (OR) mit dem Ordner Gesendete Objekte olFolderSentMail
Ich denke, dass das mit 2 Zeilen Code erledigt werden kann...wenn man es kann...

Die gesamte Programmiertechnik, die dort angewandt wird, ist noch zu komplex für mich.
Könnt Ihr Euch das bitte mal anschauen

link: https://www.access-o-mania.de/forum/index.php?topic=26062.0

Danke Harry