Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage mit Kombinationsfeld als wenn-Kriterium

Begonnen von Steffen.Gatzke, Juni 06, 2025, 13:49:44

⏪ vorheriges - nächstes ⏩

Steffen.Gatzke

Hallo liebe Mitglieder,

ich bin Access-Neuling und sammle fleißig meine Programmiererfahrungen. Ich soll eine bestehende DB verwalten und erweitern und stoße auf mein erstes "unlösbares" Problem... was für den einen oder anderen hier wahrscheinlich eine Kleinigkeit ist.

zu meinem Problem:
ich habe eine Tabelle, die in 2 Spalten mit jeweils einer anderen Tabelle verknüpft ist. Über ein Unterformular werden verschiedene Filter eingestellt, unteranderem mit ein Kombinationsfeld, der mir eine ID liefert. Soweit auch alles gut.
In der Abfrage, die als Abruf für den Bericht dient ist nun bei den Kriterien folgendes hinterlegt gewesen:

Wie [Forms]![frm_Übersicht_Quellen]![comboWerk] & "*"

Es wird also der Wert des "comboWerk"-Feldes als Abfragekriterium genutzt, wobei das "*" als Platzhalter die Probleme bereitet.
Wenn bei der comboWerk-Auswahl die ID 1 ausgewählt wurde, bringt er laut Kriterium in der Abfrage alles, wo eine 1 auftaucht.... also 1, 10, 11 usw. Lässt man das comboWerk-Feld frei, so erscheinen alle Datensätze, was auch so gewollt ist.
Wenn ich jetzt das Kriterium ändere in: Wie [Forms]![frm_Übersicht_Quellen]![comboHersteller] & ""
dann bringt er mir zwar sauber die entsprechenden ID´s, aber bei leerem comboWerk-Feld zeigt er dann gar keine Datensätze an, sondern der Bericht ist leer.
 Ich hatte gedacht, ich bekomme das gelöst, indem ich bei dem Kriterium über eine wenn-Funktion gehe...aber irgendwie funktioniert das nicht, da ich das "sonst" nicht definiert bekomme.

Folgendes soll dabei rauskommen:
mache die Abfrage nach dem Kriterium, welches in dem comboWerk-Feld ausgewählt wurde und wenn nichts ausgefählt wurde, dann zeige alles an.

Ich hoffe, ich habe mich verständlich ausgedrückt.
Über Eure Hilfe würde ich mich echt freuen!

Danke schon mal vorab.
Steffen

Knobbi38

Hallo Steffen,

ZitatÜber ein Unterformular werden verschiedene Filter eingestellt
Ist erstmal ungewöhnlich, weil Filterbedingungen in den meisten Fällen im selben Formular definiert werden, z.B. im Header oder Footer, gelegentlich auch in einem separatem Formular, z.B. als POPUP.

Dann solltest du in der Abfrage diese Referenz auf ein Formularfeld weglassen und stattdessen schlichtweg die Datensätzen per Filter einschränken. Wird kein Filter definiert, werden dann alle Datensätze angezeigt, ansonsten nur die DS, welche der Filterbedingung entsprechen.

Die Filterbedingungen können z.B. mit VBA im AfterUpdate Ereignis der Komboxbox angepasst werden.

Für weitere Hilfestellungen wäre dann eine BeispielDB ganz hilfreich.

Gruß Knobbi38
 






Steffen.Gatzke

Danke schon mal für die Hilfe. Ich habe es jetzt mit den Kriterien hinbekommen.
Für alle, die auch mal an der Stelle scheitern hier mal mein Ansatz:

Kriterium: Wie Wenn([Forms]![frm_Übersicht_Quellen]![comboWerk]);"*";[Forms]![frm_Übersicht_Quellen]![comboWerk])

Dabei ist [comboWerk] das Kombinationsfeld, welches sich im Formular [frm_Übersicht_Quellen] befindet. mit der Formulierung Wie Wenn(IstNull) habe ich definiert, dass bei keiner Eintragung im Kombinationsfeld alles angezeigt wird "*"; ansonsten das, was im Kombinationsfeld steht.

(Wenn ich das richtig verstanden habe)

Danke trotzdem allen Hilfsbereiten und schönes WE

Normalo0815

#3
Zitat von: Steffen.Gatzke am Juni 06, 2025, 16:28:29Für alle, die auch mal an der Stelle scheitern hier mal mein Ansatz:
Kriterium: Wie Wenn([Forms]![frm_Übersicht_Quellen]![comboWerk]);"*";[Forms]![frm_Übersicht_Quellen]![comboWerk])
Dabei ist [comboWerk] das Kombinationsfeld, welches sich im Formular [frm_Übersicht_Quellen] befindet. mit der Formulierung Wie Wenn(IstNull) habe ich definiert, dass bei keiner Eintragung im Kombinationsfeld alles angezeigt wird "*"; ansonsten das, was im Kombinationsfeld steht.
Wenn man die Filterung über einen Formularbezug macht, wäre die übliche und bei vielen Datensätzen performantere Lösung:
Kriterium: [Forms]![frm_Übersicht_Quellen]![comboWerk] Or [Forms]![frm_Übersicht_Quellen]![comboWerk] Is Null
Siehe auch:
https://www.donkarl.com?FAQ3.14
Freundliche Grüße
Normalo0815   :)

Beaker s.a.

Hallo Steffen,

Der richtige Filter wurde dir ja gerade gezeigt.

Du solltest dich aber vielleicht mal mit dem Kombifeld-Objekt näher
auseinander setzen.
Ein Kombi gibt immer den kompletten Inhalt der gebundenen Spalte
zurück, unabhängig von deren Sichtbarkeit.
Dies ist in den meisten Fällen eine ID. Da macht dann ein Vergleich mit
LIKE (Wie) wenig Sinn, weil es keine zusätzlichen Zeichen ( & "*") geben
kann.

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)

Steffen.Gatzke

Zitat von: Normalo0815 am Juni 06, 2025, 17:49:36
Zitat von: Steffen.Gatzke am Juni 06, 2025, 16:28:29Für alle, die auch mal an der Stelle scheitern hier mal mein Ansatz:
Kriterium: Wie Wenn([Forms]![frm_Übersicht_Quellen]![comboWerk]);"*";[Forms]![frm_Übersicht_Quellen]![comboWerk])
Dabei ist [comboWerk] das Kombinationsfeld, welches sich im Formular [frm_Übersicht_Quellen] befindet. mit der Formulierung Wie Wenn(IstNull) habe ich definiert, dass bei keiner Eintragung im Kombinationsfeld alles angezeigt wird "*"; ansonsten das, was im Kombinationsfeld steht.
Wenn man die Filterung über einen Formularbezug macht, wäre die übliche und bei vielen Datensätzen performantere Lösung:
Kriterium: [Forms]![frm_Übersicht_Quellen]![comboWerk] Or [Forms]![frm_Übersicht_Quellen]![comboWerk] Is Null
Siehe auch:
https://www.donkarl.com?FAQ3.14

Danke für die Hilfe, so ist das natürlich bei Weitem einfachen.
So, wie ich das Kriterium verstehe funktioniert das also so...:
filter nach dem, was dir das comboWerk-Feld rausgibt, oder wenn comboWerk leer ist (gibts ja nichts zu filtern, also bringt er dann alle Werte?

Steffen.Gatzke

Zitat von: Beaker s.a. am Juni 07, 2025, 12:30:27Ein Kombi gibt immer den kompletten Inhalt der gebundenen Spalte
zurück, unabhängig von deren Sichtbarkeit.
Dies ist in den meisten Fällen eine ID. Da macht dann ein Vergleich mit
LIKE (Wie) wenig Sinn, weil es keine zusätzlichen Zeichen ( & "*") geben
kann.

Hi, das habe ich jetzt nicht wirklich verstanden. Habe bereits versucht mich mit den Kombinationsfeldern auseinander zu setzen... aber den Zusammenhang bekomme ich jetzt nicht hin. Werde wohl noch mal durch die einschlägige Literatur blättern. Danke trotzdem

Knobbi38

Da gibt es nicht viel zu verstehen. Der Operator Like wird vorzugsweise in Verbindung mit Text eingesetzt und nicht bei Zahlen. Bei Zahlen kann man mit den Vergleichsoperatoren Gleich, Ungleich, Kleine, Größer und deren Kombinationen einen Bereich definieren, was wesentlich effizienter ist.

Gruß Knobbi38

Normalo0815

Zitat von: Steffen.Gatzke am Juni 08, 2025, 19:27:03So, wie ich das Kriterium verstehe funktioniert das also so...:
filter nach dem, was dir das comboWerk-Feld rausgibt, oder wenn comboWerk leer ist (gibts ja nichts zu filtern, also bringt er dann alle Werte?
Die beiden Filterbedingungen sind mit "Or" bzw. "Oder" verknüpft, d. h. nur eine der Bedingungen muss "Wahr" ergeben, damit der betreffende Datensatz angezeigt wird. Das Ergebnis der anderen Bedingung ist dann egal.

Wenn die zweite Bedingung ([Forms]...Is Null) "Wahr" ergibt, dann ist logischerweise bei jedem Datensatz das nötige eine Wahr vorhanden, weil sich der Formularfeldinhalt nicht ändert während der Abfrageausführung.

Es ist vielleicht leichter verständlich, wenn man sich in der SQL-Ansicht den WHERE-Teil ansieht.

Noch eine Anmerkung:
Wenn mehrere Formularfelder als Kriterium für eine Abfrage herhalten sollen mit UND-Verknüpfung, dann müssen diese Kriterien von runden Klammern umgeben sein:

KriteriumFeld1: ( [Forms]... Or [Forms]... Is Null )
KriteriumFeld2: ( [Forms]... Or [Forms]... Is Null )
usw.
Freundliche Grüße
Normalo0815   :)

Steffen.Gatzke

Zitat von: Normalo0815 am Juni 08, 2025, 21:53:16Noch eine Anmerkung:
Wenn mehrere Formularfelder als Kriterium für eine Abfrage herhalten sollen mit UND-Verknüpfung, dann müssen diese Kriterien von runden Klammern umgeben sein:

Code [Auswählen] Erweitern
KriteriumFeld1: ( [Forms]... Or [Forms]... Is Null )
KriteriumFeld2: ( [Forms]... Or [Forms]... Is Null )
usw.

Aahhh... das hilft mir jetzt extrem weiter, da die anderen Filterkriterien, die ich ähnlich definiert hatte, nicht funktioniert haben. Jetzt läuft es!

Ganz, ganz herzlichen Dank!