Newsgroup: it.comp.appl.access
Titolo: calcolo età

Lo so ci sono centinaia di post sull'argomento!
E si sa benissimo che la funzione è:
Function Age (varBirthDate As Variant) As Integer
    Dim varAge As Variant
    If IsNull(varBirthdate) then Age = 0: Exit Function
    varAge = DateDiff("yyyy", varBirthDate, Now)
    If Date < DateSerial(Year(Now), Month(varBirthDate), _
            Day(varBirthDate)) Then
            varAge = varAge - 1
    End If
    Age = CInt(varAge)
End Function
Ma io sono quello che chiede come si fa l'uovo sodo agli esperti
cuochi di Dentice alla Maitre d'hotel
Per semplificarvi la vita chiedo: non esiste un tutorial illustrato?
No?
Allora ascoltate la mia ignoranza: Ho la mia bella mascherina con
i miei bei campi Nome Cognome DataNascita Età (che fanno
riferimento alla tabella, ovvio); ora apro un bel modulo e ci
schiaffo dentro la bella funzione di cui sopra....
E MO???? Che brutta l'ignoranza....!!! come faccio a far sì che
quel maledetto quadratino bianco che corrisponde all'età decida
di far apparire "46" se il 17/11/2006 inserisco Pippo Bianchi
nato il 17/11/1960?
Cioè come costringo quel maledetto campo a leggere il fatto che
mi deve effettuare quel calcolo senza rompere troppo gli zebedei?
E tutto questo senza click o pulsanti di sorta.....
Lì metto la data e tu mi devi calcolare l'età, punto e stop!!!
Quali sono questi meravigliosi passettini da compiere?
--  
Postato da Virgilio Newsgroup: scopri i nuovi gruppi 
Eros, foto e video a 
http://newsgroup.eros.virgilio.it

 ha scritto nel messaggio 
news:10525512.1164230811662.JavaMail.newsgroup@sc-ng-1...

=Age([DataNascita])
da inserire nell'origine controllo di una casella di testo.
da non memorizzare nella tabella, ma calcolare nella maschera.
Daniele

Mi viene fuori #Nome?
Quindi: ho creato una maschera "guidata" utilizzando i campi
della tabella ID Nome DataNascita, poi ho crato un campo di testo
e selezionando proprietà nella stringa "origine controllo" ci ho
spappolato dentro =Age([DataNascita]) ma quando poi visualizzo la
maschera per l'inserimento dati, mi apare quella roba là, che
sembra il logo di un quiz del vecchio Mike Bongiorno!!!
cidi ha scritto:



 sembra il logo di un quiz del vecchio Mike Bongiorno!!!
Ipotizzando che la casella di testo dove inserisci la data di nascita
sia denominata TxtDataNascita,e la casella di testo dove vuoi
visualizzare l'età si chiami TxtEta;
Apri l'editor di visual basic e sull'evento AfterUpdate o Exit della
Casella di Testo TxtDataNascita dovresti scrivere:
Private Sub TxtDataNascita_Exit(Cancel As Integer)
Me.TxtEta.Value = Age(Me.TxtDataNascita.Value)
End Sub
---------------------------------------------------------------------------------------------------------------------------------
Naturalmente così come ti ha suggerito Cidi il valore Età non ha
motivo di essere registrato in Tabella in quanto lo si puo' definire
come campo calcolato, e poi non ti serve che sia scritto in una tabella
essendo un valore che va solo letto .
Saluti
Diego

 Diego
--------------------------------------------------------------------------------------------------------------------------------
Scusa per maggior completezza rettifico quanto sopra ; la soluzione
suggerita e per
l'evento Exit , per l'evento dopo aggiornamento va così:
Private Sub TxDataNascita_AfterUpdate()
Me.TxtEta.Value = Age(Me.TxtDataNascita.Value)
End Sub
Saluti
Diego





quando rispondi scrivi dopo il testo, come sto facendo io. grazie
copia e incolla in un modulo:
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
nella casella di testo metti: =Eta([DataNascita])
dopo aver inserito una data nel controllo DataNascita, nella casella
avrai l'età in anni.
Ciao
Daniele 

 Quali sono questi meravigliosi passettini da compiere?
Come ti ha già scritto Cidi non si salva l'età nella tabella.
Per calcolarla in alternativa ad usare la funziona basta copiare
questa espressione (in 1 riga) nella proprietà Origine Controllo
di una nuova casella di testo (che chiama txtEta) nella maschera:
=DateDiff("aaaa";[DataNascita];Date())+(Format(Date();"mmgg")<Format([DataNascita];"mmgg"))
Vedi anche 
www.donkarl.com/it
 2.7 Calcolare l'età
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it

 mentre il povero Age resta blu.....dov'l'arcano?
Allora...le soluzioni suggerite da Cidi e da Karl sono piu' che
ottime....per quanto riguarda il mio suggerimento, davo per scontato
che la funzione Age tu ll'avessi gia' in un modulo o quantomeno che
l'avessi già importata nel modulo stesso della Form.
Ora per quanto iguarda gli errori i casi sono due:
1) se il debug ti dice Sub o Function non definita vuol dire che non
trova la function Age e quindi prima ancora i scrivere quello che ti ho
suggerito devi avere in un modulo del tuo db la funzione,, Altrimenti a
cosa fa riferimento il codice se non c'e' nulla?
2) se ho capito bene tu hai detto di aver aperto il modulo con il
metodo Proprietà del controllo,schiacci i tre puntini neri relativi
all'evento Dopo Aggiornamento  o Uscita, e cancelli quello che ti
appare in automatico, Giusto?
se hai fatto così hai sbagliato alla grande, nel mio post precedente
io i ho detto ipotizzando che si chiamino i tuoi controlli
TxtDataNascita e TxtEta, se i tuoi controlli si chiamano Pappa e Ciccia
non devi cambiare in txtDataNascita e TxtEta perche' altrimenti ti
darà sempre errore visto che non trova i controlli TxtDataNascita e
TxtEta, ma fara riferimento a controlli con nome diverso.
quindi quando tu apri il modulo VB relativo al controllo dove vai a
scrivere la data di nascita
tu non devi cancellare proprio nulla
ti apparira qualcosa del genere :
Private sub NomeDelControlloDoveScriviLaDataDiNascita_AfterUpDate
End Sub
(NomeDelControlloDoveScriviLaDataDiNascita=Nome che tu hai dato al
controllo dove inserire la data di nascita)
a questo punto devi solo inserire quella riga di codice che ti ho
suggerito cioè
NomedelControlloCheVisualizzaL'Eta=Age(NomeDelControlloDoveScriviLaDataDiNascita)
quindi:
evento dopo aggiornamento
------------------------------------------
Private sub NomeDelControlloDoveScriviLaDataDiNascita_AfterUpDate
NomedelControlloCheVisualizzaL'Eta=Age(NomeDelControlloDoveScriviLaDataDiNascita)
End Sub
evento su uscita
------------------------
Private sub NomeDelControlloDoveScriviLaDataDiNascita_Exit(Cancel as
Integer)
NomedelControlloCheVisualizzaL'Eta=Age(NomeDelControlloDoveScriviLaDataDiNascita)
End Sub
naturalmente tutto ciò funziona ..e dico funziona perche' funziona,
solo se hai nel tuo Db la Funzione Age.
Saluti
Diego

 "mmgg")<Format([DataNascita];"mmgg"))
funziona!!!!!!!
Grazie mille......
Ultima domanda, ma il dato dove va a finire?
Cioè se poi voglio creare query e grafici su quanti 20enni ho nel
db, a cosa mi riferisco?
Query e grafici li so fare, quindi su quello state
tranquilli......Mi serve solo capire come faccio a leggere il
risultato


 risultato
Puoi usare la stessa espressione anche in un campo calcolato
di una query:
Eta: DateDiff("aaaa";[DataNascita];Date())+(Format(Date();
"mmgg")<Format([DataNascita];"mmgg"))
Il resto cioè criteri, funzione Count ecc. è lo stesso per quest'età
calcolata come sarebbe per l'età salvata in una tabella. Il vantaggio
è che così è sempre attuale senza lavoro aggiuntivo.
-- 
HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: 
http://www.donkarl.com
 

 è che così è sempre attuale senza lavoro aggiuntivo.
In questa query, se voglio inserire l'età avendo come dati fissi il NOME e
la DATANASCITA, mentre la data odierna su cui calcolare l'età deve essere
volatile, ho provato a fare la query con il seguente codice:
SELECT tblanagrafica2006.COGNOME, tblanagrafica2006.DATANASCIT,
DateDiff("yyyy",[DataNascit],Date())+(Format(Date(),"mmdd")<Format([DataNascit],"mmdd"))
AS Eta, [oggi] AS Espr1
FROM tblanagrafica2006
WHERE ((([oggi])=Date()));
ma non funziona perchè invece di inserire la data di oggi  in automatico
mi chiede di inserire la data manualmente,
dove sbaglio?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 dove sbaglio?
Nel [oggi]. Cosa vuoi ottenere con questo campo e criterio?
Siccome Date() è sempre oggi basta completamente:
SELECT tblanagrafica2006.COGNOME, tblanagrafica2006.DATANASCIT,
DateDiff("yyyy",[DataNascit],Date())+(Format(Date(),"mmdd")<Format([DataNascit],"mmdd"))
AS Eta
FROM tblanagrafica2006


Karl Donaubauer ha scritto:

Grazie, veramente grazie mille.
Anche se con qualche incidente di percorso nel mettere in pratica
tutto ciò che mi è stato consigliato, alla fine ce l'ho fatta.
Vi ringrazio tantissimo
