Opgelost Leeftijd

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.
Sorry, maar de velden zijn data velden met als naam Gebd en Ovld en indd zonder puntjes.
Nieuwe functie van blz 19 in de module geplaatst en beide codes van 7 in de query gezet .
geen foutmelding maar rare uitkomst zie schermafbeeldingen.
 

Bijlagen

  • Schermafbeelding 2024-07-11 192420.png
    Schermafbeelding 2024-07-11 192420.png
    14,1 KB · Weergaven: 5
  • Schermafbeelding 2024-07-11 192513.png
    Schermafbeelding 2024-07-11 192513.png
    37 KB · Weergaven: 5
Dat is ook niet verwonderlijk omdat de functie als uitkomst een datum geeft:
Code:
Function LeeftijdOp(Geboortedatum As Date, Optional Peildatum As Date) As Date

Misschien moet @OctaFish zijn codes eerst even testen voordat hij ze in de groep gooit 😊

Probeer eens:
Code:
Function LeeftijdOp(Geboortedatum As Date, Optional Peildatum As Date) As Variant

of

Function LeeftijdOp(Geboortedatum As Date, Optional Peildatum As Date) As Byte
 
Codes van 7 uiteraard afzonderlijk geprobeerd.
maar geen leeftijd in het leeftijd veld.
 
Misschien moet @OctaFish zijn codes eerst even testen voordat hij ze in de groep gooit 😊
Leuk om mij te verwijten dat er een fout in de functie zit; ik heb hem letterlijk van jou gekopieerd en dus (dat dan wel) verbeterd.
Leeftijden zijn gewoon getallen, dus gebruik ook geen Variant, maar Integer.
Code:
Function LeeftijdOp(Geboortedatum As Date, Optional Peildatum As Date) As Integer

Zelfs dit:
Code:
Function LeeftijdOp(Geboortedatum As Date, Optional Peildatum As Date) As Byte
werkt perfect, er vanuit gaande dat er in het verleden nog geen mensen ouder zijn geworden dan 254 jaar :D.
Overigens zijn de uitkomsten in de berekening wel correct; ik vermoed dat je zelfs met het alleen aanpassen van de Opmaak van de kolom naar Vast al de juiste uitkomsten ziet.
 
Leuk heren deze gesprekken. leer ik ook van. inmiddels heb ik wel hele getallen , als er een overlijd binnen een jaar is die persoon 0 is het mogelijk ?? om jaar-maand en dag te krijgen dat vooral voor de kinderen die hier in staan?
 
Tuurlijk kan dat, al is de huidige formule technisch gezien natuurlijk een correcte uitkomst :). Ik zal daar morgen even naar kijken.
Overigens is het dan wél de vraag wat je uiteindelijk wilt zien: een functie die iets berekent, doet dat ongeacht de interpretatie die je daar aan wilt geven. Dus ofwel je wilt alle leeftijden met maand en dag, ofwel je wilt van alle personen de werkelijke leeftijd zien (de huidige situatie).

Op het moment dat je onderscheid gaat maken tussen bepaalde groepen, zoals je dat nu aangeeft, krijg je dus een hele andere situatie. En nu snap je wellicht waarom het zó belangrijk is dat je van tevoren aangeeft wat je nu eigenlijk wilt zien als uitkomst. Want een ontwerper kan van tevoren niet ruiken of jij onderscheid wilt maken tussen personen die een bepaalde leeftijd hebben, en de rest. Voor hetzelfde geld wil je jonge kinderen tussen 0-2 een andere weergave geven. Dat zou voor mij net zo'n legitiem onderscheid zijn.
 
Dus ofwel je wilt alle leeftijden met maand en dag, ofwel je wilt van alle personen de werkelijke leeftijd zien
Dat hoeft niet. In de functie bereken je de leeftijd. Op basis van de berekende waarde kan je dan bepalen hoe je de uitkomst gaat weergeven. Je kunt er bijvoorbeeld ook voor kiezen om geen nulwaardes weer te geven. "0 jaar, 3 maanden en 0 dagen" vind ik lelijk staan; dat zou ik dan als "3 maanden" willen zien.

Maar zoals mijn collega al zei, geef vooral (veel) voorbeelden (geboortedatum, overlijdensdatum en verwachte uitkomst). Dan heb je meteen testgevallen waarmee je kan toetsen of de functie doet wat hij zou moeten doen.
 
Dat hoeft niet. In de functie bereken je de leeftijd.
Ik gaf slechts aan hoe de huidige functie werkt: dat die dus een getal oplevert. Daar hoef je verder uiteraard niet op te reageren, want dat ís nu eenmaal het resultaat.
Zelf zou ik de functie dan ombouwen naar een tekststring die op basis van de berekende leeftijd het gewenste resultaat teruggeeft. Maar dat had ik al aangegeven dat dat kon, dus het is fijn dat Peter dat óók vindt ;).
 
Ik wist niet wat er allemaal mogelijk is, maar als er een keuze is, dan kies ik voor jaar-maand-dag voor iedereen.
 
Geen idee wat je met die informatie moet, want het is onbetrouwbare informatie. De wetenschap dat iemand 76 jaar, 4 maanden en 4 dagen oud is geworden is namelijk geen correcte weergave van de échte leeftijd. Waarom niet? Omdat niet elke maand hetzelfde aantal dagen heeft. Dus iemand die op 28 november is geboren en op 2 april is overleden zou dan x jaar, 4 maanden en 4 dagen oud zijn.
Een persoon die op 28 september is geboren, en op 2 februari is overleden is dan ook x jaar, 4 maanden en 4 dagen oud. Maar klopt dat wel?

Persoon 1: november: 2 dagen, december: 31, januari: 31, februari: 28, maart: 31, april: 2 = 125.
Persoon 2: september: 2 dagen, oktober: 31, november: 30, december: 31, januari: 31, februari: 2 = 127.

Kortom: de ene persoon is 2 dagen ouder dan de ander, maar dat zie je dus niet terug in de uitkomst van jouw formule. Het is ook heel ongebruikelijk om zo inaccuraat gegevens te willen hebben; de enige juiste berekening is dan ook: jaartallen + aantal dagen. Elimineer dus de maanden uit het verhaal, omdat de maanden nu eenmaal niet hetzelfde aantal dagen hebben, en je er dus niet accuraat mee kan rekenen.

En dan heb ik het nog niet eens gehad over de afwijking door de schrikkeljaren :).
 
Ik begrijp het probleem om het overzichtelijk te houden, laat ik het zo.
Bedankt voor de vele uitleg aan deze leek, ik heb nu tenminste een jaartal.
en ben een paar mogelijkheden wijzer.
groeten.
Frandor
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan