Newsgroup: it.comp.appl.access
Titolo: Calcolare l'età

Ho un campo con la data di nascita e una text non associata, dove
l'origine controllo  l la differenza tra la data di nascita e
oggi.Inquesto modo ottengo l'età che si aggiorna il primo giorno dell'anno
nuovo. Ma se volessi che il cambio avvenga il giorno del compleanno o che
l'eta sia espressa in anni e mesi  come devo fare?  Grazie
Fabio
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Normalmente l'età non va calcolata facendo riferimento al primo giorno
dell'anno o al giorno dell'ultimop compleanno, ma va calcolata facendo
riferimento alla data odierna.
Ti consiglio quindi di registrare in un modulo del tuo database questa
funzione:
Public Function Eta(DataNascita As Date)
   Dim varEta As Variant
   varEta = DateDiff("yyyy", DataNascita, Now)
   If Date < DateSerial(Year(Now), Month(DataNascita), _
   Day(DataNascita)) Then
       varEta = varEta - 1
   End If
   Eta = varEta
End Function
e se il campo di tipo Data/ora che contiene la data di nascita si chiama
DataNascita, nell'origine controllo di una casella di testo non associata
scrivi:
=IIf(IsNull([DataNascita]);Null;Eta([DataNascita]))
Se poi l'età la vuoi espressa in anni, mesi e giorni, in un modulo del tuo
database registra queste funzioni:
Public Function DiffDate(Data1 As String, Data2 As String) As String
  On Error GoTo Errore_Diffdate
  Dim anni, mesi, giorni, gnm
  ' Vengono calcolate le differenze per anni, mesi e giorni
  anni = Year(Data1) - Year(Data2)
  mesi = Month(Data1) - Month(Data2)
  giorni = Day(Data1) - Day(Data2)
  ' Esegue il controllo per gli anni bisestili
  If Year(Data2) \ 4 = Year(Data2) / 4 And Month(Data2) = 2 Then
    gnm = GiorniNelMese(Month(Data2)) + 1
  Else
    gnm = GiorniNelMese(Month(Data2))
  End If
  ' Vengono apportate le correzioni di range
  If giorni < 0 Then mesi = mesi - 1: giorni = gnm + giorni
  If giorni > gnm Then mesi = mesi + 1: giorni = giorni - gnm
  If mesi < 0 Then anni = anni - 1: mesi = 12 + mesi
  If mesi > 12 Then anni = anni + 1: mesi = mesi - 12
  ' Visualizza il risultato
  If anni < 0 Then
    DiffDate = "Date invertite"
  Else
    DiffDate = "a=" & anni & " m=" & mesi & " g=" & giorni
  End If
Exit_Diffdate:
  Exit Function
Errore_Diffdate:
  Select Case Err
    Case 13: DiffDate = "Data errata o non esistente"
    Case 94: DiffDate = "Inserire una data"
    Case Else: DiffDate = "Errore non previsto"
  End Select
  Resume Exit_Diffdate
End Function
Function GiorniNelMese(Mese)
  ' Calcola quanti giorni ha il mese
  ' Questa funzione non controlla gli anni bisestili
  Select Case Mese
    Case 1, 3, 5, 7, 8, 10, 12: GiorniNelMese = 31
    Case 2: GiorniNelMese = 28
    Case Else: GiorniNelMese = 30
  End Select
End Function
e nell'origine controllo di una casella di testo non associata scrivi:
=IIf(IsNull([DataNascita]);Null;DiffDate(Date();[DataNascita]))
Per maggiori chiarimenti vai sul Sito Comune (link qui sotto) e nella
Sezione General leggi queste due FAQ:
1) Calcola l'età in base alla data odierna di Federico Luciani
2) Differenza tra due date espressa in anni, mesi e giorni di Silvio Berruti
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------