Updaten leeftijd bij openen formulier

Status
Niet open voor verdere reacties.

tonp60

Gebruiker
Lid geworden
29 jul 2009
Berichten
136
Hallo

Ik heb een database gemaakt die ik gebruik als telefoonboek / adressenlijst / verjaardag kalender etc. Hierin gebruik ik 3 tabellen (Persoon/partner/kind) waarbij ik om gegevens aan elkaar te koppelen een uniek ID-nr gebruik. Zie afbeelding.
Relatie.jpg
Ik gebruik een hoofdformulier om alle gegevens van een record te tonen. Om de leeftijd van iemand bij te houden gebruik ik onderstaande formule:
Code:
Private Sub Form_Load()
    Me.Leeftijd.Value = DateDiff("yyyy", Me.Geboortedatum, Date) + (DateSerial(Year(Date), Month(Me.Geboortedatum), Day(Me.Geboortedatum)) > Date)
End Sub
De gegevens van een eventuele partner en kinderen worden getoond in 2 subformulieren op het hoofdformulier. Om de leeftijd van de partner bij te houden gebruik ik onderstaande formule:
Code:
Me.SubformulierPartner.Form!PartnerLeeftijd.Value = DateDiff("yyyy", Me.SubformulierPartner.Form!PartnerGeboortedatum, Date) + (DateSerial(Year(Date), Month(Me.SubformulierPartner.Form!PartnerGeboortedatum), Day(Me.SubformulierPartner.Form!PartnerGeboortedatum)) > Date)
en iets soortgelijks voor eventuele kinderen.
Nu doet het probleem zich voor dat als er geen partner of kinderen aanwezig zijn, er een foutmelding verschijnt: "Fout 94 tijdens uitvoering". Ik begrijp dat dit komt, omdat het veld geboortedatum in de sub formulieren leeg is.
Maar als er geen partner of kinderen zijn, kan ik ook niets invullen :cool:

Hoe voorkom ik de foutmelding als er geen geboortedatum van een partner of kind is om in te vullen?
 
Niet de handigste constructie, want het lijkt mij veel handiger om alle personen in één tabel te hangen. Een genormaliseerde database heeft voor elke entiteit aparte tabellen. Zo is een bedrijf géén persoon en zijn dat derhalve aparte tabellen. Bij mij is een partner dus gewoon een mens, en een kind (hoe graag je ze ook anders zou bestempelen) in essentie óók in staat om er een te worden. En aangezien mensen in essentie dezelfde eigenschappen hebben, beschouw ik ze dus als één entiteit. Is ook handiger, omdat je dan heel makkelijk verbanden kan leggen met een ParentID veld. En wat doe je als de kinderen kinderen gaan kweken?

Je leeftijdformule kan ook een stuk korter, maar als het werkt, dan werkt het. Daarnaast is het berekenen van de leeftijd in het formulier dus nogal foutgevoelig, zoals je hebt gemerkt. Zet je de berekening in de onder de formulieren liggende query (moet je dan wel maken natuurlijk) dan heb je dát probleem in ieder geval niet, want dan zit de leeftijd gewoon als veld in de bron.
 
Probeer de functie Nz eens te gebruiken.

Code:
Me.Leeftijd.Value = DateDiff("yyyy", nz(Me.Geboortedatum, 0), Date) + (DateSerial(Year(Date), Month(nz(Me.Geboortedatum,0)), Day(nz(Me.Geboortedatum,0))) > Date)


Uiteraard kan je die 0 ook vervangen door bijvoorbeeld Date... dan is de afstammeling telkens 0 jaar
 
Ik had aan de Nz functie gedacht, maar wist niet hoe ik deze moest gebruiken. Ik heb je voorbeeld gebruikt en het werkt. Bedankt voor de hulp:)
 
Ik ben blij dat je de slimste oplossing niet gebruikt hebt :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan