Newsgroup: it.comp.appl.access
Titolo: aggiungere giorni ad una data

Salve, come spesso mi accade ultimamente mi avvalgo delle vostre
capacità, dunque ho questo problema, in una maschera prendendo i dati
da una tabella chiamiata infrazioni scelgo l'articolo ed
automaticamente con un codice vba in u campo della maschera mi appare
il periodo di fermo..es. scelgo art.170 e mi appare 60 giorni il tutto
mi si salva in un altra tabella chiamata gestione.Quello che vorrei è
che : scelgo art 170 mi appre in un altro campo 60 giorni, questi 60
giorni mi si sommassero alla dataingresso e nel campo scandenza mi
appaia la somma...es dataingresso 01/10/2008 scelgo art. 170 mi appare
60 giorni nel campo scadenza deve scrivere 01/12/2008.
Tenete presente che gli articoli sono una quindicina con giorni
diversi.
Ho provato con una macro con la funzione Dateadd ma in automatico non
funziona. Senz'altro sbaglio qualcosa, ma non so cosa.
Spero di essere stato chiaro altrimenti chiedete e cerchero di
spiegarmi meglio.
Grazie Fabio


siccome si tratta di calcoli (aggiunta di giorni ad una data) , è
generalmente sconsigliato salvare il dato in una tabella ma farlo
calcolare di volta in volta al database all'esecuzione di
un'interrogazione (generalmente query, recordset, ecc...)
fatta questa doverosa premessa, mi sembra inutile utilizzare la macro,
soprattutto perchè non puoi gestire eventuali errori.
lavora sempre da codice vba.
nel tuo caso penso che l'evento migliore su cui far eseguire il
calcolo sia quello del dopo aggiornamento della casella da cui
selezioni l'articolo (tra l'altro mi sembra di capire che si parli di
multe ... ahi ahi ...)
in tal caso usi la funzione date add che è la migliore perchè puoi
definire quali "cose" aggiungere alla data (che in realtà sarebbe
comprensiva dell'orario) quindi giorni,  minuti, ore ,secondi mesi
secoli anni eccc....
quindi potresti avere un campo non associato, contenente la funzione,
che effettua il requery oppure una vera e propria valorizzazione dello
stesso.
per farla breve:
controllo non associato:
=DateAdd("d";[giorni];[datainfrazione])
oppure su dopo aggiornamento:
me.dataCalcolata:dateadd("d",5,dataInfrazione)
nota differenza tra generatore di espressioni del controllo calcolato
non associato e del vba

 ha scritto nel messaggio 
news:98df2609-6c91-49cd...@c65g2000hsa.googlegroups.com...

proprietà del controllo Scadenza --> Origine dati --> inserisci la formula
=DateAdd("g";[periodo di fermo];[dataingresso])
dovrebbe funzionare
Ciao 

 ha scritto nel messaggionews:98df2609-6c91-49cd...@c65g2000hsa.googlegroups.com...

Vi ringrazio intanto, per la solertia nelle risposte ma vorrei
chiarire alcune cose che mi ero dimenticato invece sono molto
importanti.
Nell'esempio ho scritto giorni, ma in alcuni casi si tratta di mesi, 1
mese o 3 mesi, che non è uguale a  30 gg o 90 gg. ma deve essere
proprio 1 mese e 3 mesi.
Caro Ciroteo si, si tratta di multe, .......hai capito bene, spero tu
mi possa aiutare cmq.
Per NSantini, non ho capito bene la tua formula, per origine dati
intendi origine controllo? il campo deve essere associato?
Grazie

 - Mostra testo citato -
beh allora devi condizionare la scelta dell'unità di misura e poi con
un if o un select case effettuare il calcolo.
questa cosa dell'unità di misura va salvata in un campo.
quindi
if unitadimisura="giorni" then
dateadd("d" ...
else
dateadd("m" ...
la lettera m indica mese, d giorno. ci sono altre rinvenibili
facilmente dalla guida .. p.e. n=minuti, w=settimane ecc...

 - Mostra testo citato -
ah ... figo a scrivere solertia alla latina ...!
:-)

 - Mostra testo citato -
Puoi essere più dettagliato? grazie....
p.s. Solertia è' un errore di battitura, lasciamo perdere il latino
che anche alla scuola media non ho mai digerito.


:-) figurati ... era un po' di ironia ... ogni tanto in questo ng
qualche battutaccia scappa.
è il bello in fondo ...
per maggiori dettagli cosa non hai capito?
ho scritto ieri sera sul tardi quindi sarò stato un po' assonnato.
Provo a rispiegare:
Devi probabilemnte modificare la struttura della tabella, e salvare in
un campo il tipo di periodo, espresso in giorni o in mesi:
DataInfrazione (datetime)
UnitaMisuraPeriodo ( può essere quindi giorni mesi anni abbreviato
magari in g;m;a ... ecc...) (testo)
PeriodoDiFermo (numero giorni, o mesi o anni)  (numerico)
DataFine (datetime)
Ipotizza di mettere una casella combinata attraverso la quale scegli o
g, m, a ...
Poi valorizzi il numero dei giorni o mesi del periodo di fermo.
Se scegli mesi allora datafine sarà uguale al dateadd ( m; ...;)
se invece è in gironi dateadd ( m; ...;)
In dialetto vba si traduce in:
if unitamisuraperiodo="g" then
me.datafine=dateadd("d";periododifermo;datainfrazione)
else
me.datafine=dateadd("m";periododifermo;datainfrazione)
end if
questo lo metti dopo aggiornamento del periodo di fermo.
Tutto ciò se si tratta di un caricamento di dati.
Se invece vuoi farlo in una query


scusa partito msg devi usare la funzione iif in un campo calcolato, ma
sempre valorizzando prima che tipo di elemento deve essere aggiunto
mese giorno.
funziona pressapoco allo stesso modo della funzione dateadd di vba.

 - Mostra testo citato -
Ciao, dunque tu mi hai suggerito di cambiare la struttura della
tabella, e se non c'è altro modo vedrò di farlo, però volevo chiederti
una cosa, io ho il campo periodo di fermo che mi si aggiorna
automaticamente dopo che ho inserito l'articolo,
e in quel campo mi scrive: 1 mese, 30 giorni, 60 giorni, 3 mesi, 180
giorni ecc. non c'è modo di recuperare questo dato facendo si che per
esempio se nel campo periodo fermo mi scrive 1 mese funzioni cosi:
= dateadd(m; 1 .......
se sono 30 giorni
= dateadd(g, 30 .....
 ecc.....
Ti ringrazio per la pazienza......
Ciao


i periodi di fermo sono in una tabella? come fai a richiamarli?
immagino che poi vengano salvati in un campo specifico?
quanti sono?
perchè se non sono molti se cosi fosse allora è facile mettere due
nuovi campi nella tabella in cui sono dove metti
i valori che ti servono: p.e.
tbl fermi:
dicitura: "tre mesi"
um: "m"
valore: 3
quando li richiami dalla combo valorizzi la funzione.
se vuoi una mano aggiungimi su skype mi trovi col mio nick name e al
max in pausa pranzo ti do una mano sennò stasera.
m

 - Mostra testo citato -
Ho risolto, tutto funziona perfettamente come volevo io....ho usato
una macro come avevo pensato all'inizio, soltanto che sbagliavo dove
metterla..Grazie di nuovo a tutti....
Alla prossima volta.....
Fabio


ok perfetto.