Discussion:
Datumsberechnung
(zu alt für eine Antwort)
Hansi
2007-10-15 08:07:00 UTC
Permalink
Hallo,

ich habe ein Problem in einer datenbank und komme momentan nicht weiter.
Vielleicht ist ja jemand im Forum der mir da kurz und knackig weiterhelfen
kann.

Alos, mein Problem ist folgendes: Ich habe ein Feld GEBURTSDATUM und ein
Feld STERBEDATUM. Jetzt soll im Feld ALTERTAGE, ALTERMONATE und ALTERJAHRE
die Differenz zwischen GEBURTSDATUM und STERBEDATUM eingetragen werden. Wie
dass ganze mit den Jahren funzt habe ich mit DATEDIFF schon erreicht, aber
mit den drei Feldern wäre es aussagekräftiger (speziell bei Personen, die vor
dem ersten geburtastag gestorben sind).

Wer kann mir denn mit einigen Tipps weiterhelfen?

Vielen Dank.

P.S. Es ist eine Sterbedatenbank. Hier werden Sterbedaten einer Stadt
erfasst (incl. Sterbebild unsw.).
Mark Doerbandt
2007-10-15 08:13:20 UTC
Permalink
Hallo,
Post by Hansi
Alos, mein Problem ist folgendes: Ich habe ein Feld GEBURTSDATUM und ein
Feld STERBEDATUM. Jetzt soll im Feld ALTERTAGE, ALTERMONATE und ALTERJAHRE
die Differenz zwischen GEBURTSDATUM und STERBEDATUM eingetragen werden. Wie
dass ganze mit den Jahren funzt habe ich mit DATEDIFF schon erreicht, aber
mit den drei Feldern wäre es aussagekräftiger (speziell bei Personen, die vor
dem ersten geburtastag gestorben sind).
auch das kann DateDiff.

Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beiträge senden.
Hansi
2007-10-15 08:54:00 UTC
Permalink
Hallo Amrk,

danke für die Info. Und wie kann ich das für das jeweilige Feld einstellen?
Hab mit DateDiff schon "rumexperimentiert" aber die Werte stimmten nie
überein. Beispiel: Sterbealter in Jahren 85, raus kam in Monaten 1020 und
dann noch die Jahre in Tagen. Ich möchte aber gerne (beispiel) 85 Jahre, 1
Monat, 23 Tage.

Hättest du da eine Lösung?
Post by Hansi
Hallo,
Post by Hansi
Alos, mein Problem ist folgendes: Ich habe ein Feld GEBURTSDATUM und ein
Feld STERBEDATUM. Jetzt soll im Feld ALTERTAGE, ALTERMONATE und ALTERJAHRE
die Differenz zwischen GEBURTSDATUM und STERBEDATUM eingetragen werden. Wie
dass ganze mit den Jahren funzt habe ich mit DATEDIFF schon erreicht, aber
mit den drei Feldern wäre es aussagekräftiger (speziell bei Personen, die vor
dem ersten geburtastag gestorben sind).
auch das kann DateDiff.
Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm
Bitte keine eMails auf Newsgroup-Beiträge senden.
Mark Doerbandt
2007-10-15 09:07:44 UTC
Permalink
Hallo,
Post by Hansi
danke für die Info. Und wie kann ich das für das jeweilige Feld einstellen?
Hab mit DateDiff schon "rumexperimentiert" aber die Werte stimmten nie
überein. Beispiel: Sterbealter in Jahren 85, raus kam in Monaten 1020 und
dann noch die Jahre in Tagen. Ich möchte aber gerne (beispiel) 85 Jahre, 1
Monat, 23 Tage.
ah, dann musst Du zunächst den jeweils passenden Geburtstag des
aktuellen Jahres ermitteln dafuer ist DateSerial hilfreich. Z.B.

DateDiff("m";DateSerial(Year(Date);Month(D);Day(D));Date)

wenn D Dein Datumsfeld ist und der Geburtstag dieses Jahr schon
stattfand.

Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beiträge senden.
Hansi
2007-10-15 14:12:01 UTC
Permalink
Hallo Mark,

irgendwie stehe ich auf der Leitung. Leider funzt deine Lösung nicht.

Beispiel Gebutsdatum 26.12.1950
Beispiel Sterbedatum 25.12.2000

Hier wäre die Person ja noch nicht ganz 50 Jahre sondern 49 Jahre, 11 Monate
und 30 Tage. Und as sollte in meinem Formular auch so in drei verschiedenen
Feldern (Jahre / Monate / Tage) drinstehen.

Hättest du da für einen Access-Amateur eine Lösung?

Vielen Dank.
Hansi
Post by Hansi
Hallo,
Post by Hansi
danke für die Info. Und wie kann ich das für das jeweilige Feld einstellen?
Hab mit DateDiff schon "rumexperimentiert" aber die Werte stimmten nie
überein. Beispiel: Sterbealter in Jahren 85, raus kam in Monaten 1020 und
dann noch die Jahre in Tagen. Ich möchte aber gerne (beispiel) 85 Jahre, 1
Monat, 23 Tage.
ah, dann musst Du zunächst den jeweils passenden Geburtstag des
aktuellen Jahres ermitteln dafuer ist DateSerial hilfreich. Z.B.
DateDiff("m";DateSerial(Year(Date);Month(D);Day(D));Date)
wenn D Dein Datumsfeld ist und der Geburtstag dieses Jahr schon
stattfand.
Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm
Bitte keine eMails auf Newsgroup-Beiträge senden.
Mark Doerbandt
2007-10-15 15:48:00 UTC
Permalink
Hallo,
Post by Hansi
Beispiel Gebutsdatum 26.12.1950
Beispiel Sterbedatum 25.12.2000
oh, ja, ich war in Gedanken von Lebenden ausgegangen, obwohl Du das
schon schriebst. Sorry. Ersetze also in meiner Loesung Date durch das
Sterbedatum.
Post by Hansi
Hier wäre die Person ja noch nicht ganz 50 Jahre sondern 49 Jahre, 11 Monate
und 30 Tage. Und as sollte in meinem Formular auch so in drei verschiedenen
Feldern (Jahre / Monate / Tage) drinstehen.
Ja, deshalb schrieb ich, dass das gilt, wenn der Geburtstag in diesem
Jahr schon war. Dafuer brauchst Du eine Fallunterscheidung mit IIf, in
der Du pruefst, ob das der Fall ist.

Gruss - Mark
Michael Franke
2007-11-07 11:42:38 UTC
Permalink
Hallo Hansi,
Post by Hansi
Hallo Mark,
irgendwie stehe ich auf der Leitung. Leider funzt deine Lösung nicht.
Beispiel Gebutsdatum 26.12.1950
Beispiel Sterbedatum 25.12.2000
Hier wäre die Person ja noch nicht ganz 50Jahresondern 49Jahre, 11Monate
und 30 Tage. Und as sollte in meinem Formular auch so in drei verschiedenen
Feldern (Jahre/Monate/ Tage) drinstehen.
Hättest du da für einen Access-Amateur eine Lösung?
Vielen Dank.
Hansi
einen möglichen Lösungsweg kannst Du an folgendem Beispiel
nachvollziehen:

1. Erstelle eine Tabelle tblDatum mit den Feldern Geburtsdatum und
Sterbedatum (beide als "Datum, kurz" definieren).
2. Fülle die Tabelle beliebig mit Beispieldatensätzen.
3. Kopiere den nachstehenden SQL-Code in das leere SQ-Fenster einer
neuen Abfrage:

SELECT tblDatum.Geburtsdatum, tblDatum.Sterbedatum, DateDiff("yyyy",
[Geburtsdatum],[Sterbedatum])+
(Format([Geburtsdatum],"mmdd")>Format([Sterbedatum],"mmdd")) AS Jahre,
DateDiff("m",DateAdd("yyyy",[Jahre],[Geburtsdatum]),[Sterbedatum])+
(Format([Geburtsdatum],"dd")>Format([Sterbedatum],"dd")) AS Monate,
DateDiff("d",DateAdd("m",[Monate],(DateAdd("yyyy",[Jahre],
[Geburtsdatum]))),[Sterbedatum]) AS Tage
FROM tblDatum;

4. Schalte in die Datenblattansicht um.

Die Abfrage zeigt Dir nun neben den Feldern Geburtsdatum und
Sterbedatum die Länge des Zeitraumes in Jahren, Monaten und Tagen an.
Dabei werden auch Monats- und Jahreswechsel korrekt berücksichtigt.

Vom 26.12.1950 bis zum 25.12.2000 sind es bei der
Lebensaltersberechnung übrigens nur 49 Jahre, 11 Monate und 29 Tage
(statt 50 Jahre bei der Fristberechnung nach BGB - hier werden der
erste und der letzte Tag des Zeitraumes mitgezählt).

Gruß, Michael
Hansi
2008-01-07 14:55:04 UTC
Permalink
Hallo Hr. Franke,

vielen Dank für Ihr Statement. Hat innerhalb der Abfrage super funktioniert.
Nur eine Frage hätte ich noch: Wie bekomme ich das in einem Formularfeld hin?

Vielen Dank.

HJG
Post by Michael Franke
Hallo Hansi,
Post by Hansi
Hallo Mark,
irgendwie stehe ich auf der Leitung. Leider funzt deine Lösung nicht.
Beispiel Gebutsdatum 26.12.1950
Beispiel Sterbedatum 25.12.2000
Hier wäre die Person ja noch nicht ganz 50Jahresondern 49Jahre, 11Monate
und 30 Tage. Und as sollte in meinem Formular auch so in drei verschiedenen
Feldern (Jahre/Monate/ Tage) drinstehen.
Hättest du da für einen Access-Amateur eine Lösung?
Vielen Dank.
Hansi
einen möglichen Lösungsweg kannst Du an folgendem Beispiel
1. Erstelle eine Tabelle tblDatum mit den Feldern Geburtsdatum und
Sterbedatum (beide als "Datum, kurz" definieren).
2. Fülle die Tabelle beliebig mit Beispieldatensätzen.
3. Kopiere den nachstehenden SQL-Code in das leere SQ-Fenster einer
SELECT tblDatum.Geburtsdatum, tblDatum.Sterbedatum, DateDiff("yyyy",
[Geburtsdatum],[Sterbedatum])+
(Format([Geburtsdatum],"mmdd")>Format([Sterbedatum],"mmdd")) AS Jahre,
DateDiff("m",DateAdd("yyyy",[Jahre],[Geburtsdatum]),[Sterbedatum])+
(Format([Geburtsdatum],"dd")>Format([Sterbedatum],"dd")) AS Monate,
DateDiff("d",DateAdd("m",[Monate],(DateAdd("yyyy",[Jahre],
[Geburtsdatum]))),[Sterbedatum]) AS Tage
FROM tblDatum;
4. Schalte in die Datenblattansicht um.
Die Abfrage zeigt Dir nun neben den Feldern Geburtsdatum und
Sterbedatum die Länge des Zeitraumes in Jahren, Monaten und Tagen an.
Dabei werden auch Monats- und Jahreswechsel korrekt berücksichtigt.
Vom 26.12.1950 bis zum 25.12.2000 sind es bei der
Lebensaltersberechnung übrigens nur 49 Jahre, 11 Monate und 29 Tage
(statt 50 Jahre bei der Fristberechnung nach BGB - hier werden der
erste und der letzte Tag des Zeitraumes mitgezählt).
Gruß, Michael
Michael Franke
2008-01-11 22:56:22 UTC
Permalink
Hallo Hansi,
Post by Hansi
Hallo Hr. Franke,
vielen Dank für Ihr Statement. Hat innerhalb der Abfrage super funktioniert.
Nur eine Frage hätte ich noch: Wie bekomme ich das in einem Formularfeld hin?
Vielen Dank.
HJG
wir sollten - wie in dieser Gruppe üblich - beim Du bleiben.

In einem Formular würde ich die Lösung wie folgt realisieren:

1. Zwei Textfelder txtGeburtsdatum und txtSterbedatum (Format: Datum/
kurz), drei Bezeichnungsfelder lblJahre, lblMonate und lblTage sowie
eine Schaltfläche cmdBerechnen ins Formular einfügen.

2. Hinter das Ereignis "Beim Klicken" der Schaltfläche folgenden Code
legen:
Private Sub cmdBerechnen_Click()
Dim datGeburtsdatum As Date
Dim datSterbedatum As Date
Dim intJahre As Integer
Dim intMonate As Integer
Dim intTage As Integer
If IsNull(Me!txtGeburtsdatum) Then
MsgBox "Bitte das Geburtsdatum eingeben !"
Me!txtGeburtsdatum.SetFocus
Exit Sub
ElseIf IsNull(Me!txtSterbedatum) Then
MsgBox "Bitte das Sterbedatum eingeben !"
Me!txtSterbedatum.SetFocus
Exit Sub
ElseIf Me!txtGeburtsdatum > Me!txtSterbedatum Then
MsgBox "Das Sterbedatum darf nicht vor dem Geburtsdatum
liegen !"
Me!txtGeburtsdatum.SetFocus
Exit Sub
End If
datGeburtsdatum = Me!txtGeburtsdatum
datSterbedatum = Me!txtSterbedatum
intJahre = DateDiff("yyyy", datGeburtsdatum, datSterbedatum) + _
(Format(datGeburtsdatum, "mmdd") > Format(datSterbedatum,
"mmdd"))
intMonate = DateDiff("m", DateAdd("yyyy", intJahre,
datGeburtsdatum), _
datSterbedatum) + (Format(datGeburtsdatum, "dd") > _
Format(datSterbedatum, "dd"))
intTage = DateDiff("d", DateAdd("m", intMonate, _
(DateAdd("yyyy", intJahre, datGeburtsdatum))), datSterbedatum)
Me!lblJahre.Caption = intJahre
Me!lblMonate.Caption = intMonate
Me!lblTage.Caption = intTage
End Sub

Gruß, Michael
Thomas Möller
2008-01-12 08:43:18 UTC
Permalink
Hallo Hansi,
Post by Hansi
vielen Dank für Ihr Statement. Hat innerhalb der Abfrage super
funktioniert. Nur eine Frage hätte ich noch: Wie bekomme ich das in
einem Formularfeld hin?
hast Du schon einmal probiert, die Abfrage als Datenquelle für Dein
Formular zu verwenden?

CU
--
Thomas

Homepage: www.Team-Moeller.de
Hansi
2008-01-14 07:21:00 UTC
Permalink
Hallo Thomas,

danke für den Tipp. Hab die Abfrage als Unterformular ins Hauptformular
eingebunden. Da im Ufrm. nur Daten angezeigt werden ist das meiner Meinung
nach die beste Möglichkeit.

Hansi
Post by Michael Franke
Hallo Hansi,
Post by Hansi
vielen Dank für Ihr Statement. Hat innerhalb der Abfrage super
funktioniert. Nur eine Frage hätte ich noch: Wie bekomme ich das in
einem Formularfeld hin?
hast Du schon einmal probiert, die Abfrage als Datenquelle für Dein
Formular zu verwenden?
CU
--
Thomas
Homepage: www.Team-Moeller.de
Loading...