Exacte leeftijd berekenen

jlsaccess

Nieuwe gebruiker
Lid geworden
30 apr 2022
Berichten
3
Ik ben nieuwkomer en heb een vraag gesteld die naar nu blijkt uit de reactie's niet op de juiste wijze is gesteld. Mijn excuses daarvoor. Ik hoop het nu beter te doen.
Mijn vraag is hoe kan ik een leeftijd exact berekenen. Dus bijvoorbeeld, 56 jaar, 7 maanden en 20 dagen. Ik weet nu dat ik een module moet aanmaken (dat is ook gelukt dankzij Octafish, waarvoor dank) en daarna een query met een query met parameter en daar stopt de kennis voor mij en krijg ik het dus niet voor elkaar. Het is niet voor een vereniging maar uitsluitend bedoelt om ACCESS te leren.
 

Bijlagen

De leeftijd berekenen zoals je dat wilt, is in Access dus behoorlijk lastig. Weliswaar kent Access de functie DateDiff, maar die werkt (helaas) niet hetzelfde als de gelijknamige functie in Excel, waar je het simpel met andere argumenten kunt opvragen ("y" voor jaar, "ym" voor maanden en "md" voor dagen). Dus je zult het hele traject moeten doorrekenen. Dat kan, en ik ben daar ook al aan begonnen (want ik wist dat die vraag ging komen :)). Maar hij is nog niet perfect. Dus ik ga daar morgen verder mee.
 
In afwachting van een meer complete en betere oplossing door Octafish, hier een functie die ik zo'n 20 jaar geleden heb gebruikt toen ik nog Access apps ontwikkelde. De functie werd toen gebruikt in een jeugdsportvereniging om de juiste leeftijd te berekenen op de dag van de wedstrijd. De functie geeft het aantal jaren terug.

datDateB = geboortedatum
datDatec = dag van de wedstijd (of datum waarop leeftijd wordt berekend. Indien deze leeg blijft dan wordt deze ingevuld met de huidige datum

Code:
Public Function gfgCalcAge(datDateB As Date, Optional datDateC As Date) As Integer
On Error GoTo Err_gfgCalcAge

    Dim intYears As Integer
   
    If datDateC <= #1/1/1900# Then datDateC = Date
    If datDateB > datDateC Then
        gfgCalcAge = -1
        GoTo Exit_gfgCalcAge
    End If
    intYears = Year(datDateC) - Year(datDateB)
    If Month(datDateC) < Month(datDateB) Then
        intYears = intYears - 1
    End If
    If Month(datDateC) = Month(datDateB) And Day(datDateC) < Day(datDateB) Then
        intYears = intYears - 1
    End If
    gfgCalcAge = intYears
   

Exit_gfgCalcAge:
    Exit Function
   
Err_gfgCalcAge:
    gfgCalcAge = -1
    Resume Exit_gfgCalcAge

End Function
 
Terug
Bovenaan Onderaan