Opgelost Leeftijd

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

Frandor

Gebruiker
Lid geworden
14 apr 2020
Berichten
61
Ik heb bij andere vragen over hoe de leeftijd te berekenen gekeken, maar niet gevonden waar ik naar op zoek ben.
Het gaat over een database van een begraafplaats, graag wil ik de leeftijd berekenen van de personen.
Ik heb twee datum velden Gebd. en Ovld. er naast een tekstveld genoemd leeftijd.
Ik heb begrepen dat dit het beste kan in een Query kan, maar hoe??
 
Het tekstveld 'leeftijd' bevat dan deze query.

Code:
Leeftijd: DateDiff("yyyy", [Geboortedatum], [Overlijdensdatum]) - IIf(Format([Geboortedatum], "mmdd") > Format([Overlijdensdatum], "mmdd"), 1, 0)

PS: Gebruik gewoon duidelijke namen in plaats van wazige afkortingen zoals Gebd. en Ovld.
 
De formule kan wel wat simpeler:
Code:
Leeftijd: DateDiff("yyyy", [Gebd], [Ovld]) + (Format([Gebd], "mmdd") > Format([Ovld], "mmdd"))
 
Je kan ook een functie maken voor de berekening. Voordeel is dat je die op meerdere plaatsen kan gebruiken en met verschillende peildatums kan werken (hoe oud zou iemand vandaag zijn geweest). Bijvoorbeeld zoiets (kan vast korter, maar niet per se simpeler (te begrijpen):cool:):
Code:
Function LeeftijdOp(Geboortedatum As Date, Peildatum As Date) As Date

If Format(Geboortedatum, "mmdd") > Format(Peildatum, "mmdd") Then
    LeeftijdOp = DateDiff("yyyy", Geboortedatum, Peildatum) - 1
Else
    LeeftijdOp = DateDiff("yyyy", Geboortedatum, Peildatum)
End If

End Function

In de query komt dan:
Code:
Leeftijd: LeeftijdOp(Gebd; Ovld)
 
Ik heb het niet zo op functies die veel te lang zijn:

Code:
Function LeeftijdOp(Geboortedatum As Date, Option Peildatum As Date) As Date
    If IsNull(peildatum) Then Peildatum = Date
    LeeftijdOp = DateDiff("yyyy", [Geboortedatum], [Peildatum]) + (Format([Geboortedatum], "mmdd") > Format([Peildatum], "mmdd"))

End Function

Daarnaast is het fijn als je ook de leeftijd kan berekenen van mensen die nog leven :).
 
Hartelijk dank ieder voor deze tips, maar waar plaats ik dan die code?
 
Code zoals in deze voorbeelden moet je in een Module zetten. Daarvoor kun je het beste vanuit de geopende database op<Alt>+<F11> drukken, dan kom je in de VBA editor. Vervolgens kun je via het menu <Invoegen> een nieuwe module invoegen, en daar plak je dan één van de twee procedures. Ze doen allebei hetzelfde, maar die van mij werkt dus ook als er geen overlijdensdatum is.

Dus je kunt hem op twee manieren gebruiken:
Code:
Leeftijd: LeeftijdOp(Gebd; Ovld)
Leeftijd: LeeftijdOp(Gebd)

Modules worden automatisch opgeslagen (uiteraard wel het opslaan bevestigen) en het maakt niet uit hoe de module heet, of in welke module (als je er meer hebt) de procedure staat.

De code die ik hier in dit bericht heb gezet, plaats je in een leeg veld in een query. Of op een formulier.
 
Module gemaakt met zo'n duidelijke uitleg was dat makkelijk.
De laatste code kan ik daarvoor het tekst veld "leeftijd "gebruiken? zo ja moet hij dan leeg zijn?
heb daar inmiddels handmatig heel wat leeftijden ingevuld.
Of is het handiger om daar een nieuw veld voor aan te maken en later de oude te verwijderen.
Moet de code ingevuld worden bij het eigenschappenvenster van het tekst veld?

Groet,

Frandor.
 
Je vragen snap ik niet helemaal; normaal gesproken (althans: dat zou ik doen) zou ik in de query die je voor je formulier gebruikt een extra veld maken waarin je de functie (of dus het query voorbeeld uit #3) zet om de leeftijd in de query te berekenen. Dat levert dan een extra veld op dat je op het formulier kan zetten, dus dan ben je gelijk klaar.

Gebruik je de functie die je op de module hebt gezet, dan gebruik je de formule die in #7 staat in de query. Verder verandert er niets aan het verhaal.
 
Ondanks de uitleg kom ik er niet uit... begin mijn verhaal opnieuw, in een tabel heb ik twee datum velden en een tekst veld leeftijd opgenomen die ik handmatig ingevuld heb afgerond 67 jaar bv.
Nu wil ik die leeftijd automatisch berekenen.
advies is om dit via een Query te doen, als ik die open staan er kolommen met naam en kolommen zonder naam waar ik echter geen code kan invullen. wat doe ik verkeerd? of zit ik helemaal op het verkeerde pad.
 
Blijkbaar heb je al een query gemaakt? In dat geval zet je de Leeftijd formule in het bovenste vakje van een lege kolom.
 
En zoals gezegd, leeftijd hoort niet in de tabel thuis.
 
Dat was me al snel duidelijk...

Ik had wel de juiste rij maar kreeg een foutmelding Syntaxisfout?
eerst de code Leeftijd: LeeftijdOp(Gebd; Ovld) werkt niet en volgens voorbeeld Leeftijd: LeeftijdOp([Gebd]; [Ovld]) ook niet
 
Dan wordt het tijd om een (geanonimiseerde) voorbeelddatabase te plaatsen.
 
Ik had wel de juiste rij maar kreeg een foutmelding Syntaxisfout?
Zoals Peter al zei: er komt een moment dat een voorbeeld bestandje handiger is :). Maar een sytaxis fout kan een aantal zaken betekenen:

1. de veldnamen kloppen niet
2. de veldstructuur klopt niet, bijvoorbeeld doordat je de datumvelden als tekstveld hebt vastgelegd
3. de functie bevat tóch een fout

Bijvoorbeeld:
Ik heb twee datum velden Gebd. en Ovld. er naast een tekstveld genoemd leeftijd.
Wíj gaan er steeds vanuit dat die velden [Gebd] en [Ovld] heten, maar voor hetzelfde geld heb jij er dus een punt in staan, en dan moet het zo zijn: [Gebd.] en [Ovld.]
Overigens zéér onverstandig om leestekens (en spaties) in veldnamen te gebruiken, daarmee maak je het jezelf nodeloos moeilijk. Tenzij je van extra uitdagingen houdt, is dat dus niet aan te bevelen :).
 
Bij het invoeren van de code in de Query Leeftijd: LeeftijdOp(Gebd; Ovld) geeft hij een syntaxisfout en word het stukje tekst LeeftijdOp zwart ?
 
Je herhaalt min of meer wat je eerder al hebt geschreven in #14. Daarbij gebruik je twee schrijfwijzen die in beginsel identiek zijn; [GebDat] is hetzelfde als GebDat. De enige (noodzakelijke) reden om rechte haken om een Veldnaam te zetten is bij velden met een spatie of koppelteken. Dus bij [Geb Dat] en [Geb-Dat] heb je rechte haken nodig. Daar is bij jouw velden geen sprake van.

Het probleem zit ‘m dus ofwel in de functie, ofwel in de velden zelf. En op onze vragen daarover geef je dus geen antwoord.
 
En welke functie heb je gebruikt? Ik heb die van mij ‘uit het hoofd’ opgeschreven, en daar zou een kleine fout in kunnen zitten. Dan zou je deze variant moeten hebben:

Code:
Function LeeftijdOp(Geboortedatum As Date, Optional Peildatum As Date) As Date
    If IsNull(peildatum) Then Peildatum = Date
    LeeftijdOp = DateDiff("yyyy", [Geboortedatum], [Peildatum]) + (Format([Geboortedatum], "mmdd") > Format([Peildatum], "mmdd"))

End Function

Ik zal dat zometeen nog even checken.
 
En het is inderdaad Optional, geen Option. Waarvoor excuses :). Kom je er nog steeds niet uit: laat dan in ieder geval jouw query Ontwerp scherm zien dat je hebt gebruikt om de query te maken (zoals Peter ook heeft gedaan), en eventueel een afdruk van je Tabelontwerp met daarin de datumvelden en hun eigenschappen. Je kunt er maar één tegelijk laten zien, maar dat geeft niet: als we er één zien, gaan we er vanuit dat de ander hetzelfde is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan