Newsgroup: it.comp.appl.access
Titolo: Calcoli con le ore ed arrotondamenti in access.

Buongiorno a tutti.
Premetto di essere un assoluto principiante di access rispetto a voi e
quello che ho imparato è tutto grazie allo "smanettamento"... insomma
un (im)perfetto autodidatta.
I problemi che vorrei risolvere sono due e ringrazio fin d'ora che
avrà il buon cuore di aiutarmi.
1. Ho due campi (Orario Inizio Attività) e (Orario Fine Attività)
formattati in ore (h24). Ogni volta che gli inserisco vorrei che
fossero arrotondati automaticamente in questa maniera (PER ESEMPIO):
INIZIO ATTIVITA'
10.10 = 10.05
DA 10.11 A 10.14  = 10.10
10.15 = 10.10
FINE ATTIVITA'
10.10 = 10.15
DA 10.11 A 10.14 =10.15
10.15 = 10.20
2. Se tramite una query provo ad ottenere il valore del tempo trascorso
tra l'inizio dell'attività e la fine dell'attività ho problemi in
quanto non riesco a settare il formato in ore (h24) nella query stessa.
Per ultimo vorrei cortesemente richiedere, se qualcuno avrà il buon
cuore di rispondermi, di elencarmi i passi "a prova d'imbecille"
perchè così mi sento al momento!!!!
Grazie

1. Ho due campi (Orario Inizio Attività) e (Orario Fine Attività)
formattati in ore (h24). Ogni volta che gli inserisco vorrei che
fossero arrotondati automaticamente in questa maniera (PER ESEMPIO):
INIZIO ATTIVITA'
10.10 = 10.05
DA 10.11 A 10.14  = 10.10
10.15 = 10.10
FINE ATTIVITA'
10.10 = 10.15
DA 10.11 A 10.14 =10.15
10.15 = 10.20
Umh.... temo che dovrai scrivere un po' di codice.
Per questi arrotondamenti ad arte dovrai scrivere qualche funzione.
Se ho capito bene, vuoi che le ore 10:00 diventino le ore 10:05
e che le ore comprese tra le 10:11 e le 10:14 diventino le ore 10:10
e via dicendo.
Quindi una volta inserito l'orario al verificarsi
di un evento attiverai la funzione da te scritta,
che analizzerà i minuti ed eseguirà l'arrotondamento,
restituendo il nuovo orario arrotondato.
Per far ciò si richiede conoscenza di VBA.
Non ho idea di come fare la stessa cosa con una query.
Sorry.
Saluti.

Grazie Michele della risposta. Temevo qualcosa del genere... Vorrà
dire che farò l'arrotondamento "manuale".....
Per il punto 2. mi sapresti aiutare?? Cioè se tramite una query provo
ad ottenere il valore del tempo trascorso tra l'inizio dell'attività e
la fine dell'attività ho problemi in
quanto non riesco a settare il formato in ore (h24) nel risultato della
query stessa.
ESEMPIO
INIZIO ORE 9.00
FINE ORE 10.15
RISULTATO 1.15 (non riesco ad ottenerlo) 
Grazie di nuovo

 ha scritto nel messaggio
[cut]
1. Ho due campi (Orario Inizio Attività) e (Orario Fine Attività)
formattati in ore (h24). Ogni volta che gli inserisco vorrei che
fossero arrotondati automaticamente in questa maniera (PER ESEMPIO):
INIZIO ATTIVITA'
10.10 = 10.05
DA 10.11 A 10.14  = 10.10
10.15 = 10.10
FINE ATTIVITA'
10.10 = 10.15
DA 10.11 A 10.14 =10.15
10.15 = 10.20
---
utilizzi una maschera per immettere gli orari?
vuoi che gli orari siano arrotondati "definitivamente" (intendo arrotondati prima di essere memorizzati nella tabella e quindi
perdendo il valore originale digitato) o li vuoi arrotondare ogni volta e mantenere nella tabella i valori originari digitati?
---
2. Se tramite una query provo ad ottenere il valore del tempo trascorso
tra l'inizio dell'attività e la fine dell'attività ho problemi in
quanto non riesco a settare il formato in ore (h24) nella query stessa.
---
prova ad utilizzare la funzione CDate per trasformare il risultato della differenza di orari.
---
Per ultimo vorrei cortesemente richiedere, se qualcuno avrà il buon
cuore di rispondermi, di elencarmi i passi "a prova d'imbecille"
perchè così mi sento al momento!!!!
Grazie
---
Ciao,
Mat.

Per il punto 2. mi sapresti aiutare?? Cioè se tramite una query provo
ad ottenere il valore del tempo trascorso tra l'inizio dell'attività e
la fine dell'attività ho problemi in
quanto non riesco a settare il formato in ore (h24) nel risultato della
query stessa.
ESEMPIO
INIZIO ORE 9.00
FINE ORE 10.15
RISULTATO 1.15 (non riesco ad ottenerlo)
Il formato che richiedi è una cosa puramente visiva.
Per far ciò userai FORMAT.
A ogni modo il risultato trovato (1.15) non mi
sembra un "orario", poiché per il computer 1.15 non significa
1 ora e 15 minuti, ma 1 ora e 1/4 cioè 1,25
Devi calcolare il tempo complessivo di lavoro
svolto da un dipendente?
Tale tempo lo devi passare alla contabilità
del lavoro per le buste?
Saluti.

Grazie ancora degli aiuti..
Allora cercherò di spiegarmi meglio:
- i dati relativi alle ore mi servono per controllare se i lavoratori
svolgono un minimo stabilito di attività specifiche per mantenere
certe qualifiche - in un mese devono per esempio fare 10 ore di
attività... (la regola dell'arrotondamento non l'ho decisa io in
questi termini....)
- Per inserire i dati uso una maschera in cui mi piacerebbe (ma non è
poi fondamentale) mettere gli orari esatti di inizio e fine lavoro.
Dico che non è fondamentale perchè potrei inserire manualmente gli
orari arrotondati così come spiegato nel primo post (anche se si
potrebbe incorrere in qualche errore nell'arrotondamento stesso).
- Quello che cerco di ottenere attraverso una query è di avere la
somma di tutte le ore di addestramento per esempio nel mese di un
determinato dipendente.
Grazie ancora e ciao!
Dario


 determinato dipendente.
vedi la funzione Datepart()
------------------
ciao
Andrea Papi

Caro Andrea sono riuscito a fare quello che mi hai suggerito (ed è
già un miracolo..). L'arrotondamento funziona perfettamente con un
unico, piccolo, - spero - problema:
- se l'orario di "inizio lavori" fosse le 10.00 in punto dovrei
arrotondarlo alle 09.55. Per tutti gli altri orari (dalle 10.01 alle
10.59 è ora perfetto...). Magico!
Per quanto riguarda invece il calcolo del tempo trascorso tra l'inizio
e la fine dell'attività il box mi mostra il periodo trascorso ma
purtroppo non mi aiuto troppo se parliamo di più periodi. Infatti
partendo dal presupposto che i lavoratori fanno attività più volte al
mese dovrei riuscire, attraverso una query a sommare tutti i periodi
fatti nel mese stesso. Come spiegavo nel primo post "Se tramite una
query provo ad ottenere il valore del tempo trascorso tra l'inizio
dell'attività e la fine dell'attività ho problemi in quanto non
riesco a settare il formato in ore (h24) nel risultato della query
stessa." Mi ero dimenticato di segnalare che poi dovrei sommare tutti i
periodi di addestramento relativi alla stessa persona nel periodo di
tempo (mese, anno o che sia).
Un'ultimissima cosa (sperando di non esagerare) tornando al discorso
dell'arrotondamento: se io volessi conservare l'orario reale (i.e.
10.47) in un campo, trasformarlo nell'orario arrotondato (10.45) in un
altro campo in modo da avere tutte 2 le informazioni (o 4 se parliamo
di inizio e fine) è possibile??
Grazie infinite ancora una volta
Dario

 di inizio e fine) è possibile??
Visto che l'arrotondamento viene effettuato dalla query postresti
evitare di arrotondare il dato durante l'input e memorizzare quindi
quello reale
ciao
Andrea Papi

Straordinario!!! Ora funziona tutto come un orologio svizzero!!! Ho un
ultimo chiarimento (spero) da chiederti. La somma delle ore relative ad
un dipendente ha un formato "strano". Se per esempio è 10 ore e 30
minuti è ok (cioè 10:30) se però è 10 ore e 05 minuti mi viene 10:5
(invece di 10:05). C'è un modo per risolvere questo problemino??
Grazie infinite ancora una volta!
Dario

Ottarrio ha scritto:

cambia la tipologia della variabile x all'interno della funzione
FormattaOra da Long a String
Public Function FormattaOra(intMinuti As Long) As String
    Dim x As String
    x = intMinuti - ((intMinuti \ 60) * 60)
    FormattaOra = (intMinuti \ 60) & ":" & IIf(Len(x) = 1, "0" & x, x)
End Function
ciao
Andrea Papi

AndreaPapi ha scritto:

dimenticavo
grazie per la valutazione del post.
ciao

Straordinario... semplicemente straordinario. Grazie infinite. Con i
tuoi consigli sono riuscito a mettere insieme tre attività che prese
singolarmente facevano perdere ore.... Ora tutto è riunito in un unico
database che rende la mia vita e quella dei miei colleghi estremamente
più semplice!!!
Di nuovo Andrea grazie di cuore.
Dario