Altersberechnung in Access

Hallo miteinander!!

Ich möchte in einer Access-Datenbank das Alter einer Person berechnen, ausgehend vom Geburtsdatum und dem Systemdatum.
Welche Funktion kann ich in einer Abfrage nutzen und mit welchen Parametern??

Gruß Volker

Hi Volker,

ich kenn das wohl für Excel, das gibts hier
http://home.germany.net/101/293107/start.htm
zum download.
Schau nach Stichwort „Geburtstag“

Gruß, Heike
http://come.to/heike

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke für den Tipp!!
Hallo Heike!

Ersteinmal Danke für den Tipp!!

Werde mir die Seite mal in Ruhe anschauen. Scheinen ja einige interessante Sachen dabei zu sein.

Für Excel ist das Problem mit

=DATEDIF(Geburtsdatumatum;HEUTE();„Y“)

relativ einfach zu lösen. (Y steht für die Anzeige der Jahre…)

Leider funktioniert eine ähnlich Funktion in Access nicht genauso gut.

Alter: DatDiff(„jjjj“;[Geburtsdatum];Jetzt())

zeigt zwar das Alter an, macht aber bei Geburtsdaten, die in der Zukunft liegen Probleme - jemand der im November Geburtstag hat ist jetzt schon ein Jahr älter…

Ich suche weiter!

Gruß
Volker

Das von Heike angegebene Beispiel ist zwar sehr hübsch, aber ein bißchen trivial ('tschuldigung - konnte ich mir nicht verkneifen…), versuch’s mal mit dieser Funktion:

Public Function WieAlt(GebDat, Optional Stichtag = Null)
Dim s As String, g As String, j As Long, Dat As Date
 g = Format(GebDat, "mmdd")
 If IsNull(Stichtag) Then
 Dat = Date
 Else
 Dat = Stichtag
 End If
 s = Format(Dat, "mmdd")
 j = Year(Dat) - Year(GebDat)
 If g \> s Then j = j - 1 ' Korrektur
 WieAlt = j
End Function

Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Volker
Ich habe das gleiche Problem in einem Access Formular so gelöst:

=Jahr(Datum())-Jahr([Geburtsdatum])-
Wenn((Monat(Datum())*40+Tag(Datum()))>=(Monat([Geburtsdatum])*40+Tag([Geburtsdatum]));0;1)

Also: Zuerst die Jahre voneinander subtrahieren und danach schauen, ob der Geburtstag schon vorbei ist und gegebenenfalls noch 1 Subtrahieren (noch nicht vorbei)

Gruss Armin

Also: Zuerst die Jahre voneinander
subtrahieren und danach schauen, ob der
Geburtstag schon vorbei ist und
gegebenenfalls noch 1 Subtrahieren (noch
nicht vorbei)

Nun ja - nichts für ungut, aber das ist ja doch wohl genau die von mir vorgeschlagene Funktion…

Ich würde so etwas immer in eine VBA-Funktion und nicht in eine Feldformel packen. Zum einen kann man eine Funktion leicht (und auch an anderen Stellen als im Abfrage- oder Formularentwurf) wiederverwenden, zum anderen läßt sich eine VBA-Funktion weitaus leichter debuggen.

Reinhard

Du hast ja recht…

Deine Argumente für VBA überzeugen mich.
Bis jetzt habe ich es immer mit Feldfunktionen gemacht, da die „näher“ bei Excel sind und ich dort schon drauskomme…
(auf den ERSTEN Blick sieht das VBA ja schon komplizierter aus…)

Sieht so aus, als ob ich auch noch VBA lernen muss :smile:)

Gruss und Dank
Armin

Achtung, Jahr 2000 Problem:

Access 97 (SR-2) interpretiert Daten so:
(Format: Datum kurz)
Jahr von 0 bis 29: Jahr 20XX
Jahr von 30 bis 99: Jahr 19XX

Das heisst, meine Grossmutter ist dann mit dieser Funktion -14 Jahre alt… statt 86 Jahre

Meine Lösung:

Public Function WieAlt(GebDat, Optional Stichtag = Null)
Dim s As String, g As String, j As Long, Dat As Date
 If IsNull(GebDat) Then
 j = 0
 Else
 g = Format(GebDat, "mmdd")
 If IsNull(Stichtag) Then
 Dat = Date
 Else
 Dat = Stichtag
 End If
 s = Format(Dat, "mmdd")
 j = Year(Dat) - Year(GebDat)
 If g \> s Then
 j = j - 1 ' Korrektur
 End If
 ' Problem Jahr 2000: Access 97 (SR-2)
 ' Datumwerte, Jahreszahl ??XX
 ' XX \>= 30 Jahr 19XX
 ' XX 
Ausserdem habe ich noch den Fall "kein Datum im Formular" abgefangen, da sonst eine Fehlermeldung auftritt...

Gruss
Armin



> Public Function WieAlt(GebDat, Optional
> Stichtag = Null)
> Dim s As String, g As String, j As Long,
> Dat As Date
> g = Format(GebDat, "mmdd")
> If IsNull(Stichtag) Then
> Dat = Date
> Else
> Dat = Stichtag
> End If
> s = Format(Dat, "mmdd")
> j = Year(Dat) - Year(GebDat)
> If g \> s Then j = j - 1 ' Korrektur
> WieAlt = j
> End Function

Achtung, Jahr 2000 Problem:

Access 97 (SR-2) interpretiert Daten so:
(Format: Datum kurz)
Jahr von 0 bis 29: Jahr 20XX
Jahr von 30 bis 99: Jahr 19XX

Das heisst, meine Grossmutter ist dann
mit dieser Funktion -14 Jahre alt…
statt 86 Jahre

Das ist aber kein Problem meiner Funktion, sondern liegt daran, dass du deine Datumsfelder falsch verwendest - Im Jahr 2000 ist Year(Dat) = 2000 - da braucht es auch keine Korrektur! Deine Korrektur ist insofern eher eine Verschlimmbesserung - sorry…

Reinhard

Hallo Reinhard

Du hast recht, man muss das Datumsfeld umstellen, dass die Jahreszahl 4 stellig angezeigt wird, dann funktionierts…
Aber schon heikel, die Standard Datum Formate von Access, da kann man (wieder mal ich) ganz schön auf die Nase fallen…

Ich habe nie behauptet, dass die Funktion im Jahr 2000 nicht funktioniert (OK, die Formulierung tönt ein wenig so, aber war nicht so gemeint). Ich habe falscherweise angenommen, dass die Jahreszahl nur 2 Stellig gespeichert wird…

braucht es auch keine Korrektur! Deine
Korrektur ist insofern eher eine
Verschlimmbesserung - sorry…

… die braucht jetzt wohl nicht mehr!!!

Nochmals viele vielen Dank für Deine Geduld mit mir und meiner „Unfähigkeit“ im Access bedienen…

Gruss Armin

Hallo Reinhard

Du hast recht, man muss das Datumsfeld
umstellen, dass die Jahreszahl 4 stellig
angezeigt wird, dann funktionierts…
Aber schon heikel, die Standard Datum
Formate von Access, da kann man (wieder
mal ich) ganz schön auf die Nase
fallen…

Eigentlich nicht… Man sollte aber auch tatsächlich Datumsfelder zur Speicherung von Datums-/Zeitwerten nehmen und nicht etwa Textfelder. Insofern ist meine Funktion auch ein bisschen schlampig, denn sie akzeptiert auch eine Stringvariable als Parameter. Wenn man wirklich nur Datumsfelder hat (und auch mit Date-Variablen rechnet) gibt es in Access97 kein Jahr-2000-Problem.

Das einzig mögliche Problem ist das verwendete Datumsfenster bei 2-stelligen Jahreszahlen. Das kann man entweder systemweit verstellen - oder, besser: man verwendet nur 4-stellige Jahreszahlen. Aber das hat ja nichts mit Access zu tun, sondern ist ein allgemeines Problem, das man immer hat, wenn man mit 2-stelligen Jahreszahlen hantiert.

Reinhard