Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Geburtstage in xxx Tagen anzeigen im Dezember (https://www.delphipraxis.net/172739-geburtstage-xxx-tagen-anzeigen-im-dezember.html)

ereetzer 19. Jan 2013 21:18

Geburtstage in xxx Tagen anzeigen im Dezember
 
Hallo,

ich ermittle die nächsten anstehenden Geburtstage. (DB = Access)

Delphi-Quellcode:
      DM.ADOEreignisGeburtstag.SQL.Add('SELECT * FROM Adressen WHERE Format(Geburtstag, "mmdd") Between Format(Date(), "mmdd") And Format(DateAdd("d", :RANGE, Date()), "mmdd") ORDER BY 1');
      DM.ADOEreignisGeburtstag.Parameters.ParamValues['RANGE'] := Edit2.Text;
Das geht auch super solange wir nicht grad Dezember haben. Da bringt´s falsche Ergebnisse sobald es übers Jahr hinaus geht.

Hat jemand eine Idee;

Gruß.

Bummi 19. Jan 2013 21:53

AW: Geburtstage in xxx Tagen anzeigen im Dezember
 
Wenn man es gleich in beide Richtungen offen halten will, also x Tage vor heute bis y Tage nach heute sollte das hier funktionieren, sonst halt abspecken

im Beispiel x = 30 y = 20

Code:

SELECT *
 
FROM Datum

where
DateSerial(Year(Date())-1, Month([Datum]), Day([DATUM])) between Date()-30 and Date() +20 
or
DateSerial(Year(Date()), Month([Datum]), Day([DATUM])) between Date()-30 and Date() +20
or
DateSerial(Year(Date())+1, Month([Datum]), Day([DATUM])) between Date()-30 and Date() +20

ereetzer 20. Jan 2013 06:23

AW: Geburtstage in xxx Tagen anzeigen im Dezember
 
Danke für Deine Antwort.

Leider werden dabei gar keine Ergebnisse mehr zurückgeliefert (in allen Monaten)

Bummi 20. Jan 2013 07:35

AW: Geburtstage in xxx Tagen anzeigen im Dezember
 
Das wundert mich. Wenn ich die Bereiche versuchsweise mit ausgeben lasse

Code:
SELECT *,
DateSerial(Year(Date())-1, Month([Datum]), Day([DATUM])) as Vorjahr,
DateSerial(Year(Date()), Month([Datum]), Day([DATUM])) as Jahr,
DateSerial(Year(Date())+1, Month([Datum]), Day([DATUM])) as Folgejahr,
Date()-30 as Untergrenze,
Date() +20 as Obergrenze
FROM Datum

where
DateSerial(Year(Date())-1, Month([Datum]), Day([DATUM])) between Date()-30 and Date() +20 
or
DateSerial(Year(Date()), Month([Datum]), Day([DATUM])) between Date()-30 and Date() +20
or
DateSerial(Year(Date())+1, Month([Datum]), Day([DATUM])) between Date()-30 and Date() +20

bekomme ich folgendes Ergebnis

Code:
Vorjahr   Jahr   Folgejahr   Untergrenze   Obergrenze   ID   Datum
01.01.2012   01.01.2013   01.01.2014   21.12.2012   09.02.2013   1   01.01.1965
01.01.2012   01.01.2013   01.01.2014   21.12.2012   09.02.2013   4   01.01.2000
20.01.2012   20.01.2013   20.01.2014   21.12.2012   09.02.2013   6   20.01.1955
02.02.2012   02.02.2013   02.02.2014   21.12.2012   09.02.2013   7   02.02.2000
31.12.2012   31.12.2013   31.12.2014   21.12.2012   09.02.2013   8   31.12.2000

ereetzer 20. Jan 2013 08:52

AW: Geburtstage in xxx Tagen anzeigen im Dezember
 
Danke nochmal, ich konnte jetzt nachvollziehen das sobald das Geburtsdatumfeld leer ist, folgende Fehlermeldung kommt:
(das keine Daten angezeigt wurden lag daran das es kein passendes Geburtsdatum gab)

"Datentypen in kriterienausdruck unverträglich".

Bis zu diesem leeren Feld kommen die Ergebnisse, beim leeren Feld bricht es ab.
Kann man in der Abfrage unterbringen, das NULL-Felder nicht berücksichtigt werden sollen?

Danke
ereetzer

Furtbichler 20. Jan 2013 09:37

AW: Geburtstage in xxx Tagen anzeigen im Dezember
 
'IS NOT NULL'.... Googeln hilft auch.

ereetzer 20. Jan 2013 10:29

AW: Geburtstage in xxx Tagen anzeigen im Dezember
 
hatte es nicht geschrieben, aber IS NOT NULL an sich war mir schon klar, nur an der ausführung hapert as bei mir.

Delphi-Quellcode:
SELECT * FROM Adressen where( Geburtstag IS NOT NULL) AND
(DateSerial(Year(Date())-1, Month([Geburtstag]), Day([Geburtstag])) between Date()-30 and Date() +20
or
DateSerial(Year(Date()), Month([Geburtstag]), Day([Geburtstag])) between Date()-30 and Date() +20
or
DateSerial(Year(Date())+1, Month([Geburtstag]), Day([Geburtstag])) between Date()-30 and Date() +20 )
Das geht zum Beispiel nicht (gleiche Fehlermeldung). Und mir fehlen leider auch die Grundkenntniss um diese (für mich) schwierige Abfrage allein zu meistern.

Vielleicht hat noch jemand eine Idee?
Danke.

Bummi 20. Jan 2013 10:59

AW: Geburtstage in xxx Tagen anzeigen im Dezember
 
Code:
SELECT *
Where
IIF(DATUM is NULL,false,

DateSerial(Year(Date())-1, Month([Datum]), Day([DATUM])) between Date()-30 and Date() +20 
or
DateSerial(Year(Date()), Month([Datum]), Day([DATUM])) between Date()-30 and Date() +20
or
DateSerial(Year(Date())+1, Month([Datum]), Day([DATUM])) between Date()-30 and Date() +20
)

ereetzer 20. Jan 2013 11:13

AW: Geburtstage in xxx Tagen anzeigen im Dezember
 
IIF also, danke. Genauso geht´s

ereetzer


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz