Hallo Community,
- ich habe nur eine kurze Frage die mir eventuell etwas Arbeit nehmen würde.
Ich führe mit meinen Queries Statistiken durch.
Manchmal brauche ich sie für einen bestimmten Monat manchmal aber für ein kompletes Jahr, (vielleicht auch irgendwann für einen bestimmten Tag)
- die "Datum_Spalte" sieht wie folgt aus (tt.mm.jjjj hh:mm:ss) (16.11.2016 13:34:45)
...
WHERE (((Format([Tabelle.Datum_Spalte],"mm\.yyyy"))=[das Datum wie folgt eingeben: mm punkt yyyy]));
- Damit bekomme ich einen "Enter Parameter Value" in dem ich das Datum z.Bsp "11.2016" eingeben kann. Alles funktioniert super.
- Wenn ich nun aber für ein Jahr das selbe Spiel haben möchte, habe ich bisjetzt den Querie kopiert und den Code wie folgt geändert:
...
WHERE (((Format([Tabelle.Datum_Spalte],"yyyy"))=[das Datum wie folgt eingeben: yyyy]));
- Damit konnte ich dann z.Bsp "2016" eingeben. Alles funktioniert super.
- Könnte man eventuell den Code einfach umschreiben, dass ich sowohl 11.2016 wie auch nur 2016 eingeben könnte? Oder vieleicht sogar 21.10.2016
Liebe Grüße Kloso
Hätte ich bloß die Zeit die ich in das Thema erstellen investiert habe, lieber in mehr Logisches Denken investiert :)
Habe es eben simple mit OR gelöst
WHERE (((Format([Tabelle.Datum_Spalte],"mm\.yyyy"))=[das Datum wie folgt eingeben: mm punkt yyyy]))
OR
WHERE (((Format([Tabelle.Datum_Spalte],"yyyy"))=[das Datum wie folgt eingeben: yyyy]))
OR
WHERE (((Format([Tabelle.Datum_Spalte],"dd\.mm\.yyyy"))=[das Datum wie folgt eingeben: dd punkt mm punkt yyyy]));
Klappt wunderbar, sieht zwar wieder nach viel aus, aber es klappt
PS: Was natürlich praktisch wäre: (funktioniert so leider nicht)
WHERE (((Format([Tabelle.Datum_Spalte],"mm\.yyyy" OR "yyyy" OR "dd\.mm\.yyyy))=[das Datum eingeben:]))
Hallo Kloso,
eine schöne, pragmatische Lösung, ich gratuliere!
Eine Variante könnte sein, eine der drei Möglichkeiten (Jahr, Monat, Tag) in einem Formular auszuwählen (Optionsfeld) und dann die Eingabe an SQL zu übergeben, so dass du nicht mehr von der Abfrage selbst nach Parametern gefragt wirst.
lg
crystal
PS: es ist schön zu sehen, dass du inzwischen mehr und mehr von Access verstehst und anzuwenden weißt.
Hallo crystal,
danke dir. Ich habe verstanden was du meinst. Da wir uns leider mit den Formularen noch nicht duzen, bleibe ich erstmal bei meiner OR-Variante, soweit ich keinen besseren Code entdecke.
Werde mich aber demnächst an die Formulare rantasten, habe mitlerweile 40 Queries, der Überblick geht sogar für mich verloren, abgesehen von dem nächsten Anwender. Werde dann ein benutzerfreundliches Formular erstellen.
PS: ja habe mich in nur ein Paar Monaten schnell eingearbeitet und macht sogar relativ Spaß muss ich sagen :D sobald man es besser versteht und schnell zu logischen Schritten kommt.
Zum Thema zwei Anmerkungen:
WHERE Format(Datum_Spalte, "mm\.yyyy") = [das Datum wie folgt eingeben: mm punkt yyyy]Eine Berechnung auf das Tabellenfeld (hier Formatanweisung) unterbindet die mögliche Nutzung eines Index auf diesem Feld. Der Filter funktioniert, aber er verschenkt mögliche Performance, die vielleicht dringend gebraucht wird.
Siehe auch Grundlagen - SQL ist leicht (8) - Index (http://www.ms-office-forum.net/forum/showthread.php?t=317707)
ZitatManchmal brauche ich sie für einen bestimmten Monat manchmal aber für ein kompletes Jahr, (vielleicht auch irgendwann für einen bestimmten Tag)
Ein Tag, ein Monat, ein Jahr ... das sind Zeiträume. Zeiträume werden durch ihre Grenzen definiert. Derart kann man dann auch Filter setzen, die dann recht variabel sind:
WHERE Datum_Spalte >= [Starttag]
AND Datum_Spalte < [Endetag] + 1Vergleiche mit der bisherigen Lösung: Es ist durchaus machbar, eine einfache und trotzdem variable Filtermöglichkeit zu erstellen, die zudem Indizes nutzen kann.