Leeftijd berekenen in Access

Status
Niet open voor verdere reacties.

Drummer01

Gebruiker
Lid geworden
20 jan 2023
Berichten
24
Goedemorgen,

Ik ben nieuw op dit forum. Ik heb een vraag aan de Access specialisten onder jullie.

Ik heb voor ons shantykoor een ledendatabase gemaakt. Het ziet er allemaal top uit echter zou ik een veld in het formulier op willen nemen waar automatisch de leeftijd kan worden weer gegeven. Ik kom er alleen niet uit hoe ik dit zou moeten implementeren. Ik heb de volgende regel (script) gevonden op dit forum ik snap alleen niet waar en hoe dat zou moeten komen te staan. Is er iemand die mij daarmee kan helpen?

Alvast bedankt.

Groet
Drummer

Leeftijd: DateDiff("yyyy";[Geboortedatum];Date();2;2)+(Format(Date();"mmdd")<Format([Geboortedatum];"mmdd"))
 
Zo'n 20 jaar geleden heb ik ooit nog een functie geschreven voor een jeugdsportclub waar de leeftijd belangrijk was. Tot 1 dag voor de verjaardag mochten ze meedoen aan een wedstrijd categorie A, de volgende dag moesten ze een categorie opschuiven.

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

Als je die functie in een module plakt kan je die in een formulierveld gebruiken als
= gfgcalcage(#geboortedatum#;#datum waarop de leeftijd moet berekend worden#)
De tweede datum kan je weglaten, dan wordt de dag van vandaag genomen.

De code is al meer dan 20 jaar oud, en ik ben er zeker van dat men je hier ook andere oplossingen kan aanbieden. Echte programmeurs doen het liever met minder regels :rolleyes:
 
Zet in het veld op het formulier bij de eigenschap 'Besturingselementbron': =DateDiff("yyyy";[Geboortedatum];Date();2;2)+(Format(Date();"mmdd")<Format([Geboortedatum];"mmdd"))

Een functie zoals eerder aangedragen is ook goed bruikbaar. Het voordeel daarvan is dat je die ook kan gebruiken om de leeftijd op een andere datum dan de huidige datum te brakemen. Als je bijvoorbeeld de gemiddelde leeftijd van de leden op 1 januari 2023 wilt weten, kan je die functie makkelijk gebruiken.
 
ik snap alleen niet waar en hoe dat zou moeten komen te staan.
De code is denk ik van mij, want ik heb ‘m regelmatig gepost. Als je een query gebruikt voor je formulier, kun je de formule toevoegen aan die query; de veldnaam staat er namelijk al bij. Op je formulier voeg je dan een extra tekstveld toe dat je koppelt aan dit veld. Het extra veld vind je namelijk terug in de Lijst met velden van je formulier, en je sleept het dus gewoon naar de plek waar je ‘m hebben wilt.

Gebruik je een tabel, maak dan eerst een query voor die tabel met het extra Leeftijd veld, koppel de query aan je formulier i.p.v. de tabel en doe dan wat hierboven beschreven staat.
 
Heren bedankt, Het werkt. Super.

Groet
Drummer
 
Laatst bewerkt:
yep, en ook de vrouwen onder de heren vinden het fijn dat het werkt.
 
Dame en heren goedemorgen,

Ik wil het ticket toch nog even heropenen. Ik heb gisteren weer wat gedaan aan de database. o.a. een rapport gemaakt om te kijken hoe lang iemand lid is. Ik heb dit hetzelfde gedaan als het berekenen van de leeftijd. Ook in de tabel had ik 2 kolommen aangemaakt met "Leeftijd" en "Jarenlid". Wat schetst mijn verbazing. In het formulier werkt het goed en zet keurig het aantal jaar in de velden, echter in de tabel blijven deze kolommen leeg met als gevolg dat dit ook in het rapport leeg blijft. Wat kan ik hier aan doen? Ik heb overigens de oplossing van xps351 gebruikt!

Alvast bedankt
Drummer01
 
Je kan in een tabel inderdaad berekende velden aanmaken, maar als je de ingebouwde tabellen van access gebruikt heeft dat geen zin omdat je die niet persistent kan maken en dus ook niet kan indexeren. In het geval je access tabellen gebruikt en niet gelinkte tabellen van een database, kan je best de berekening maken in een query en deze als basis voor je rapport gebruiken.
 
Het heeft inderdaad geen zin om de berekende jaren in de tabel op te slaan. Als je vandaag de waardes berekent en volgende week het rapport afdrukt kloppen ze misschien niet meer.

"Mijn oplossing" (die voor 90% van OctaFish kwam) laat alleen de actuele leeftijd van een lid zien op het formulier (zoals je vroeg). Door bij de Besturingselementbron van het veld iets te zetten dat begint met een =, wordt het een "niet-afhankelijk" gegeven. Oftewel een gegeven dat niet aan een tabelveld is gekoppeld.

Je kan op je rapport ook van die niet-afhankelijke gegevens opnemen. Of, zoals Noella schreef, het rapport baseren op een qeury waarin je de berekening doet.
 
Sorry, ik ben een leek op dit gebied. Ik vind het al heel wat dat ik de database zo voor elkaar heb gekregen. Kunnen jullie me wat verder op weg helpen. Ik heb een query gemaakt maar deze geeft nog niet het gewenste resultaat.

Ik heb de database bijgesloten
 
Laatst bewerkt:
En het is zo simpel, als je mijn oplossing gebruikt. En die was voor het formulier, en dus óók voor het rapport: maak de berekening in de query die je voor het rapport gebruikt. Is je rapport gebaseerd op één tabel, maak dan eerst een query op basis van die tabel, en voeg daar de door mij aangegeven formule aan toe. Dan krijg je de leeftijd als extra veld in de bron voor je rapport, en zijn al je problemen opgelost. Zo simpel is het op te lossen, en zo moet je het dus dan ook doen :). Extra berekende velden op het rapport maken kan ook, maar dit is gewoon makkelijker.
 
Het lukte niet om de database te uploaden, sorry. Nu wel
 

Bijlagen

  • DMSkopie (2).zip
    62,2 KB · Weergaven: 13
Laatst bewerkt:
Ik heb een nieuw rapport voor je gemaakt (rptLeden) op basis van een nieuwe query (qLeden) en de tabel Leden aangepast, want de velden Leeftijd en JarenLid eruit gegooid. Zoals we al een aantal keren hebben gezegd: die velden horen niet thuis in je tabel, want het zijn afleidbare gegevens. Die berekeningen staan nu dus in de nieuwe query. Die kun je zowel onder het rapport hangen, als onder je formulier Leden, omdat de veldnamen in de query gelijk zijn gehouden aan jouw veldnamen. Dan hoef je dus eigenlijk niets aan te passen aan formulieren en rapporten.
 

Bijlagen

  • DMSkopie.zip
    68,7 KB · Weergaven: 14
Bedankt Octafish,
Ik zal ernaar kijken hoe je dit opgebouwd hebt en kijken of ik daar wat van leren. Ik laat het je weten.
 
Dame en heren,

Ik loop nog tegen één probleem aan wat ik zelf niet opgelost krijg. Al het andere (bovenstaande) werkt dankzij jullie naar behoren, fijn bedankt daarvoor. Het gaat om het volgende:

Als er een optreden is wordt er een programma gemaakt voor dat optreden met NAW e.d. maar ook de liedjes die gezongen gaan worden. Nu heb ik een formulier gemaakt met daar alle relevante gegevens. Onderaan dat formulier moeten de geselecteerde nummers komen te staan en dit moet vervolgens in een rapport komen te staan die afgedrukt kan worden of opgeslagen in PDF. Tot zover geen probleem.

Echter wanneer ik een keuzelijst met invoervak maak en hier een titel selecteer krijg ik die niet te zien in een daarvoor aangemaakt tekstveld. Dat tekstveld moet daarna weer opgenomen worden in het rapport. Ik heb een tabel met de liedjes en een tabel met programma. Ik krijg het niet voor elkaar. Kunnen jullie mij nog één keer helpen? Nogmaals ik ben een leek, ik vind het al heel wat, wat ik tot nu gemaakt heb :)

Groetjes
Drummer01
 
Laatst bewerkt:
Ten eerste kan je voor een nieuwe vraag beter een nieuw topic starten.

Zonder te zien wat precies de de situatie is, is deze vraag moeilijk, zo niet onmogelijk, te beantwoorden. Een geanonimiseerde voorbeeld database werkt altijd het beste.
 
Hierbij de (lege) database

Groet
Drummer01
 

Bijlagen

  • DMSkopie (2).zip
    62,2 KB · Weergaven: 16
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan