Hallo Xperts und n' fröhliches 2007!
Ich habe in Access 2003 ein Formular zu Projekten gebaut in dem sich ein Kombifeld (cboJahr) und ein Listenfeld (lstProjekte) befindet.
Die Daten für beide Steuerelemente liefert die Tabelle projekte ...
000376 ProjektA 10.01.2006 22.01.2006
000377 ProjektB 10.04.2007 13.04.2007
000379 ProjektC 14.02.2008
000381 ProjektD Im Listenfeld werden entsprechend der im Kombifeld gewählten Projekte mit den Feldern aufgelistet.
Das Kombifeld selbst soll die in der Tabelle in "Start" enthaltenen Werte nach Jahreszahlen filtern.
Vom Prinzip ne' einfache Sache, oder?
Mein Problem ist, dass es auch Projekte gibt (und geben soll!), denen erst mal kein Startdatum zugwiesen wird.
Also brauche ich Einträge, die nicht nur das Filtern nach einzelnen Jahren zulassen, sondern auch ALLE! Projekte und auch die Projekte ermitteln, die kein Startdatum haben.
Im Kombifeld selbst werden die Werte durch folgende Abfrage generiert:
(1) ALLE (--> soll alle Projekte anzeigen, inkl. der Proj. ohne Startdatum)
(2) ohne Startdatum (--> nur Projekte ohne Startdatum)
(3) 2008
(4) 2007
(5) 2006
Solange eine Jahreszahl wie in (3)/(4)/(5)gewählt wird ist alles OK.
Wie erreiche ich aber die Anzeige der Projekte entsprechend der vorgenannten Einträge (1) und (2)?
Denn dort stehen ja keine Jahre als Kriterien, sondern Zeichenketten drin, die für die Abfrage umgewandelt werden müssen.
Für die Datenherkunft des Listenfelds lstProjekte entsprechend (1) habe ich es mit folgender Abfrage versucht:
Erstelle ich eine unabhängige Abfrage auf die Tabelle für (1) mit:
(bzw. für (2) mit WHERE projekte.Start Is Null)
Logisch
Bloß: da weiß ich nicht, wie ich das in die IIF-Anweisung einbauen sollte.
Versuche zu (2) für die erwünschte Anzeige von "Projekt D" mit ...
Meine Frage: wie bringe ich die zwei Kriterien (1) und (2) in die Abfrage für das Listenfeld?
Bin ich komplett auf dem falschen Dampfer und sollte ich lieber nach einer reinen VBA-Lösung suchen, die die Abfrage für das Listenfeld generiert?
Bin allen für Hinweise und Anregungungen dankbar.
Danke und Gruss an alle tutorianer
Ich habe in Access 2003 ein Formular zu Projekten gebaut in dem sich ein Kombifeld (cboJahr) und ein Listenfeld (lstProjekte) befindet.
Die Daten für beide Steuerelemente liefert die Tabelle projekte ...
- ID (gleich der Projektnummer)
- Projektname (Text)
- Start (Datum)
- Ende (Datum)
... in dem sich testweise folgende Datensätze befinden:- Projektname (Text)
- Start (Datum)
- Ende (Datum)
000376 ProjektA 10.01.2006 22.01.2006
000377 ProjektB 10.04.2007 13.04.2007
000379 ProjektC 14.02.2008
000381 ProjektD
Das Kombifeld selbst soll die in der Tabelle in "Start" enthaltenen Werte nach Jahreszahlen filtern.
Vom Prinzip ne' einfache Sache, oder?
Mein Problem ist, dass es auch Projekte gibt (und geben soll!), denen erst mal kein Startdatum zugwiesen wird.
Also brauche ich Einträge, die nicht nur das Filtern nach einzelnen Jahren zulassen, sondern auch ALLE! Projekte und auch die Projekte ermitteln, die kein Startdatum haben.
Im Kombifeld selbst werden die Werte durch folgende Abfrage generiert:
SELECT "ALLE" as jahreszahl,0 As ODERB FROM projekte
UNION
SELECT "ohne Startdatum" as jahreszahl,1 As ODERB FROM projekte
UNION
SELECT Format([Start],"yyyy") AS jahreszahl,2 As ODERB FROM projekte
WHERE (((Format([Start],"yyyy"))>""))
ORDER BY ODERB, jahreszahl DESC;
... was folgende 5 Einträge ergibt:UNION
SELECT "ohne Startdatum" as jahreszahl,1 As ODERB FROM projekte
UNION
SELECT Format([Start],"yyyy") AS jahreszahl,2 As ODERB FROM projekte
WHERE (((Format([Start],"yyyy"))>""))
ORDER BY ODERB, jahreszahl DESC;
(1) ALLE (--> soll alle Projekte anzeigen, inkl. der Proj. ohne Startdatum)
(2) ohne Startdatum (--> nur Projekte ohne Startdatum)
(3) 2008
(4) 2007
(5) 2006
Solange eine Jahreszahl wie in (3)/(4)/(5)gewählt wird ist alles OK.
Wie erreiche ich aber die Anzeige der Projekte entsprechend der vorgenannten Einträge (1) und (2)?
Denn dort stehen ja keine Jahre als Kriterien, sondern Zeichenketten drin, die für die Abfrage umgewandelt werden müssen.
Für die Datenherkunft des Listenfelds lstProjekte entsprechend (1) habe ich es mit folgender Abfrage versucht:
SELECT projekte.ID, projekte.Projektname, projekte.Start, projekte.Ende
FROM projekte
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE","*",[Forms]![frmProjekte]![cboJahr])))
ORDER BY projekte.ID DESC;
Ich bekomme hier nur die Projekte, denen ein Startdatum zugewiesen wurde (Projekt D fehlte).FROM projekte
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE","*",[Forms]![frmProjekte]![cboJahr])))
ORDER BY projekte.ID DESC;
Erstelle ich eine unabhängige Abfrage auf die Tabelle für (1) mit:
SELECT projekte.ID, projekte.Projektname, projekte.Start, projekte.Ende
FROM projekte
WHERE projekte.Start Is Null OR projekte.Start Is Not Null
ORDER BY projekte.ID DESC;
... werden mir auch wirklich alle Datensätze angezeigt.FROM projekte
WHERE projekte.Start Is Null OR projekte.Start Is Not Null
ORDER BY projekte.ID DESC;
(bzw. für (2) mit WHERE projekte.Start Is Null)
Logisch
Bloß: da weiß ich nicht, wie ich das in die IIF-Anweisung einbauen sollte.
Versuche zu (2) für die erwünschte Anzeige von "Projekt D" mit ...
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE",IS NULL,[Forms]![frmProjekte]![cboJahr])))
... oder ...
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE",NULL,[Forms]![frmProjekte]![cboJahr])))
... oder ...
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE",,[Forms]![frmProjekte]![cboJahr])))
... oder ...
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE",0,[Forms]![frmProjekte]![cboJahr])))
... oder ...
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE","",[Forms]![frmProjekte]![cboJahr])))
... oder was weiss ich, schlugen auch alle fehl.... oder ...
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE",NULL,[Forms]![frmProjekte]![cboJahr])))
... oder ...
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE",,[Forms]![frmProjekte]![cboJahr])))
... oder ...
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE",0,[Forms]![frmProjekte]![cboJahr])))
... oder ...
WHERE (((Year([Start])) Like IIf([Forms]![frmProjekte]![cboJahr]="ALLE","",[Forms]![frmProjekte]![cboJahr])))
Meine Frage: wie bringe ich die zwei Kriterien (1) und (2) in die Abfrage für das Listenfeld?
Bin ich komplett auf dem falschen Dampfer und sollte ich lieber nach einer reinen VBA-Lösung suchen, die die Abfrage für das Listenfeld generiert?
Bin allen für Hinweise und Anregungungen dankbar.
Danke und Gruss an alle tutorianer