PDA

Vollständige Version anzeigen : Abfrage filtern


miky
27.09.2005, 14:51
Hallo,
Ihr könnt mir sicherlich bei der richtigen Syntax helfen, habe dies in dem Forum nicht finden können oder falsche Suchwörter eingegben.

In einem HF soll durch mehrere Combifelder ein Endlos UF gefiltert werden. Dem UF liegt eine Abfrage zu Grunde die ich nach den Combifeldern filtere. Dies funktioniert solange, wie für jedes Combifeld ein Wert ausgewählt wurde, nicht aber wenn der Inhalt leer ist. Nun versuche ich dies in der Abfrage vorzusehen, aber bekomme ich nicht hin.

Auf cmbSteuerung soll nur gefiltert werden, wenn cmbSteuerung nicht leer ist.

Hiermit: Wenn([Formulare]![OsziAuswahl]![cmbSteuerung]="";"*";[Formulare]![OsziAuswahl]![cmbSteuerung]) geht es nicht.

Was mache ich falsch?

Großer Meister
27.09.2005, 15:00
so dürfte es gehen:
Wenn([Formulare]![OsziAuswahl]![cmbSteuerung]="" or isnull([Formulare]![OsziAuswahl]![cmbSteuerung]);true;WertausAbfrage=[Formulare]![OsziAuswahl]![cmbSteuerung])

miky
27.09.2005, 15:39
Hi, danke für die Antwort, habe ich gleich ausprobiert, hat aber leider noch nicht zum Erfolg geführt.

Bei dem Einfügen Deines Vorschlags hänge ich bei "Wert aus Abfrage". Datenherkunft des UF ist eine Abfrage die ich im Eigenschaftsfenster bei Datenherkunft öffne (Abfrage Generator). Die im UF anzuzeigenden Steuerelemente sind ausgewählt und bei den entsprechenden Steuerlementen wo gefiltert werden soll, gebe ich die Bedingung ein. Access ändert die IstNull Syntax. Wie heißt denn die Abfrage im Abfrage Generator?? Habe stattdessen das Steuerelement des Formulars eingegeben, es werden aber keine Daten angezeigt.

Wenn([Formulare]![OsziAuswahl]![cmbProzess]="" Oder ([Oszilist].[Prozess])=IstNull([Formulare]![OsziAuswahl]![cmbProzess]);Wahr;[Formulare]![OsziAuswahl]![Oszilist].[Form]![Prozess]=[Formulare]![OsziAuswahl]![cmbProzess])

Wenn Du Dich da nochmal erbarmen könntest.

Großer Meister
27.09.2005, 16:06
so sollte der Filter des UF aussehen:
Wenn([Formulare]![OsziAuswahl]![cmbProzess]="" Oder ([Oszilist].[Prozess])=IstNull([Formulare]![OsziAuswahl]![cmbProzess]);Wahr;
[Prozess]=[Formulare]![OsziAuswahl]![cmbProzess])
wobei [Prozess] ein Wert aus der Abfrage des UF sein muss.
Mit filteron=true könnte dieser filter dann z.b. gesetzt werden

miky
27.09.2005, 16:38
Hi Großer Meister

Filter setzten klingt für mich nach VBA. Ich wollte nur das Kriterium in der generierten Abfrage so setzen, das 4 Spalten gefiltert werden in Abhängigkeit von den Kombifeldern im HF. Wenn in einem Kombifeld kein Eintrag drin ist(""), soll nur nach den 3 anderen wo etwas drin steht gefiltert werden.
In den Spalten steht auch nur Text, keine Zahl. Wenn ich den Code in das Kriteriumfeld der Abfrage eingebe, erhalte ich keine Filterung (es werden keine Datensätze angezeigt)

Großer Meister
27.09.2005, 17:02
dann poste mal bitte den SQL-Text der Abfrage.

miky
27.09.2005, 17:16
Hi Großer Meister,

hier der SQL Code für die Abfrage bei der ich erst 2 Filterkriterien eingegeben habe (Typ und Prozess). In dem HF habe ich ein Button durch den nach Auswahl ein Requery auf das UF ausgeführt wird.

SELECT Oszilist.filename, Oszilist.Typ, Oszilist.Feldbezeichnung, Oszilist.Beschreibung, Oszilist.Datum, Oszilist.Uhrzeit, Oszilist.Anlage, Oszilist.Prozess, Oszilist.Class FROM Oszilist WHERE (((Oszilist.Typ)=IIf(Formulare!OsziAuswahl!cmbTyp="" Or (Oszilist.Typ)=IsNull(Formulare!OsziAuswahl!cmbTyp),True,Oszilist!Typ=Formulare! OsziAuswahl!cmbTyp)) And ((Oszilist.Prozess)=IIf(Formulare!OsziAuswahl!cmbProzess="" Or (Oszilist.Prozess)=IsNull(Formulare!OsziAuswahl!cmbProzess),True,Oszilist!Prozes s=Formulare!OsziAuswahl!cmbProzess)));

Weder werden beim Öffnen des HF Datensätze angezeigt noch wenn eines der beiden Kombifelder (cmbTyp und cmbProzess) einen Wert haben.

Großer Meister
27.09.2005, 17:47
die Null-Bedingung ist nicht ganz korrekt,
habe das mal geändert:
SELECT Oszilist.filename, Oszilist.Typ, Oszilist.Feldbezeichnung, Oszilist.Beschreibung, Oszilist.Datum, Oszilist.Uhrzeit, Oszilist.Anlage, Oszilist.Prozess, Oszilist.Class
FROM Oszilist
WHERE ((IIf(Formulare!OsziAuswahl!cmbTyp=""
Or IsNull(Formulare!OsziAuswahl!cmbTyp),True,Oszilist!Typ=
Formulare!OsziAuswahl!cmbTyp))
And (IIf(Formulare!OsziAuswahl!cmbProzess=""
Or IsNull(Formulare!OsziAuswahl!cmbProzess),True,Oszilist!Prozess=
Formulare!OsziAuswahl!cmbProzess)));

miky
27.09.2005, 19:01
Hi,

muss Dich leider enttäuschen. Mit
SELECT Oszilist.filename, Oszilist.Typ, Oszilist.Feldbezeichnung, Oszilist.Beschreibung, Oszilist.Datum, Oszilist.Uhrzeit, Oszilist.Anlage, Oszilist.Prozess, Oszilist.Class FROM Oszilist WHERE (((Oszilist.Typ)=IIf(Formulare!OsziAuswahl!cmbTyp="" Or (Oszilist.Typ)=IsNull(Formulare!OsziAuswahl!cmbTyp),True,Oszilist!Typ Like Formulare!OsziAuswahl!cmbTyp)) And ((Oszilist.Prozess)=IIf(Formulare!OsziAuswahl!cmbProzess="" Or (Oszilist.Prozess)=IsNull(Formulare!OsziAuswahl!cmbProzess),True,Oszilist!Prozes s Like Formulare!OsziAuswahl!cmbProzess)));

bekam ich sogar eine Meldung "... zu komplex..." dann ging das Formular doch auf aber leider funzt die Filterung nicht. Beim Öffnen des HF sind die Kombos leer, es sollten im UF also alle DS angezeigt werden, tut es aber nicht. Selektion bei einen der beiden Kombos oder beiden ergibt auch keinen DS.

Großer Meister
27.09.2005, 19:08
das Abfragekriterium war nicht ganz richtig,
anstatt
WHERE (Oszilist.Typ)=IIf(Formulare!OsziAuswahl!cmbTyp...
muss es heissen:
WHERE IIf(Formulare!OsziAuswahl!cmbTyp...
und anstatt
AND (Oszilist.Prozess)=IIf(...
einfach nur
IIf(...
das ergibt dann diese Abfrage:
SELECT Oszilist.filename, Oszilist.Typ, Oszilist.Feldbezeichnung, Oszilist.Beschreibung, Oszilist.Datum, Oszilist.Uhrzeit, Oszilist.Anlage, Oszilist.Prozess, Oszilist.Class
FROM Oszilist
WHERE ((IIf(Formulare!OsziAuswahl!cmbTyp=""
Or IsNull(Formulare!OsziAuswahl!cmbTyp),True,Oszilist!Typ=
Formulare!OsziAuswahl!cmbTyp))
And (IIf(Formulare!OsziAuswahl!cmbProzess=""
Or IsNull(Formulare!OsziAuswahl!cmbProzess),True,Oszilist!Prozess=
Formulare!OsziAuswahl!cmbProzess)));

miky
27.09.2005, 19:50
Hi Großer Meister,

Habe die anderen 2 Kombos auch noch dran gehängt und so funzt es super.

Vielen, vielen Dank