Altersberechnung in Access

Von: , Frage gestellt am Di, 5. Okt 1999

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

10 Antworten zu dieser Frage

    • Antwort von nach 16 Stunden hilfreich
      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

  1. Antwort von nach 20 Stunden hilfreich
    Re: Altersberechnung in Access

    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]

    • Antwort von nach 11 Tagen hilfreich
      Re^2: Altersberechnung in Access

      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 <  30 Jahr 20XX
      ' Meine Lösung: Falls das Alter negativ ist, 100 dazuzählen
      ' Das Alter einer Person kann nie negativ sein....
      If j < 0 Then
      j = j + 100
      End If
      End If
      WieAlt = j
      End Function
      

      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
      

      • Antwort von nach 12 Tagen hilfreich
        Re^3: Altersberechnung in Access

        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

        • Antwort von nach 12 Tagen hilfreich
          Re^4: Altersberechnung in Access

          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

          • Antwort von nach 13 Tagen hilfreich
            Re^5: Altersberechnung in Access

            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

  2. Antwort von nach 6 Tagen hilfreich
    Re: Altersberechnung in Access

    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

    • Antwort von nach 9 Tagen hilfreich
      Re^2: Altersberechnung in Access

      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



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!