Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Kloso am November 16, 2016, 13:38:07

Titel: SQL Datumeingabe - Mögliche Varianten
Beitrag von: Kloso am November 16, 2016, 13:38:07
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
Titel: Re: SQL Datumeingabe - Mögliche Varianten
Beitrag von: Kloso am November 16, 2016, 13:59:16
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:]))
Titel: Re: SQL Datumeingabe - Mögliche Varianten
Beitrag von: crystal am November 16, 2016, 14:42:21
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.
Titel: Re: SQL Datumeingabe - Mögliche Varianten
Beitrag von: Kloso am November 16, 2016, 14:49:28
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.
Titel: Re: SQL Datumeingabe - Mögliche Varianten
Beitrag von: ebs17 am November 16, 2016, 15:34:05
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] + 1


Vergleiche mit der bisherigen Lösung: Es ist durchaus machbar, eine einfache und trotzdem variable Filtermöglichkeit zu erstellen, die zudem Indizes nutzen kann.