Newsgroup: it.comp.lang.visual-basic
Titolo: Somma orari

Premetto che sono alle prime armi nella programmazione in VB6. Ho la
necessità di archiviare giornalmente dei tempi espressi in ore e minuti, e
mensilmente realizzare la somma totale di questi. Come posso fare? Che
campi
DB devo creare ? Un Grazie anticipato a tutti.
--
La mia Cartella di Posta in Arrivo Ã¨ protetta con SPAMfighter
222 messaggi contenenti spam sono stati bloccati con successo.
Scarica gratuitamente SPAMfighter!

Beh potresti usare dei campi DATE (o DATETIME, dipende da che DB usi) 
per memorizzare questi tipi di dati.
Ogni DB ha poi le sue funzioni specifiche per trattare le date e le ore, 
quindi funzioni per sommare, sottrarre ecc. ecc.
Io personalmente ho trovato una soluzione piuttosto comoda: invece di 
memorizzare in due campi DATETIME l'ora di ingresso e quella di uscita 
del dipendente (nei miei progetti si trattava di questo), memorizzavo 
l'ora di ingresso come orario, e invece dell'orario di uscita 
memorizzavo il numero di minuti (quindi un campo numerico normale) di 
permanenza in ufficio.
Quindi facevo una piccola conversione lato client (cioč da software).
Chi usa il programma digita comunque ora di ingresso e ora di uscita, 
mentre io mi calcolo la differenza tra i due orari da VB.
A questo punto il DB deve lavorare anche di meno per eseguire i calcoli 
a fine mese. Questo ovviamente non č molto importante per il DB, quanto 
per me che ogni volta dovrei stare lě a digitare sempre e comunque 
funzioni di differenza...
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello...
(A. Celentano)
Per rispondermi in privato, prima togli l'immondizia dalla testa.

 DB devo creare ? Un Grazie anticipato a tutti.
Se si tratta di una espressione oraria assoluta es: totale Ore e/o minuti
ti consiglio di memorizzare il tutto in secondi (o millisecondi se hai
bisogno di più precisione).
Se invece si tratta della ora inizio / fine allora dipende dal database
che hai a disposizione, il datetime comunque è presente in tutti i
database.
Dipende anche dall'utilizzo che ne farai di questi dati, se ad esempio ci
vorrai fare dei range da, a è più agevole avere i dati in un formato
"nativo" come il datetime.
Se invece ci devi fare delle somme ritorniamo ai secondi.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 DB devo creare ?
Innanzitutto lasciamo perdere VB.
E' un discorso di logica generale, e solo secondariamente è un discorso di 
informatica.
Nel subject parli di 'orari', e nel testo parli di 'tempi' (intendendo, 
immagino, 'intervalli di tempo').
Siccome 'sommare gli orari' è una cosa che non ha senso (se sommi ieri a 
mezzogiorno con stamattina alle 7 cosa ottieni?), l'unica cosa che ha un 
senso è che tu voglia 'sommare le durate degli intervalli'.
A questo punto hai solo due strade:
- Memorizzare gli intervalli come Data_Ora_Inizio e Data_Ora_Fine. In questo 
modo puoi, a posteriori, estrarre la durata di ciascuno di essi con 
DateDiff, usando come unità di conto quello che vuoi (dal secondo all'anno).
- Scegliere una unità di conto e memorizzare le durate come 'numero di 
intervallini', ad esempio, per memorizzare un'ora puoi memorizzare '60' 
(intendendo i minuti), oppure '3600' (intendendo i secondi), ecc... E fare 
la somma di un numero è una cosa banale.
Assolutamente da evitare i tipi DateTime e similari, che sono identificativi 
di un orario, non di una durata.
Ciao
Alberto
-- 
"C'è un Calvelli dentro ognuno di noi" (cit.) 

 ha scritto nel messaggio
news:d45upp$dpn$1...@area.cu.mi.it...

Forse ho esposto male il problema. In pratica, per ogni giorno devo
memorizzare le prestazioni di lavoro straordinario espresso in ore e
minuti,
di personale dipendente ed a fine mese effetuare la somma totale di questi
dati. Esempio:
PINCO PALLINO - 1,20
TIZIO CAIO          - 0.50


 TIZIO CAIO          - 0.50
Ok, allora è esattamente come dicevo io.



Oltre alle tecniche indicate dagli altri, puoi anche memorizzare gli 
intervalli di tempo in un cmpo di tipo DATETIME. Infatti questo formato in 
realtà memorizza sotto forma di numero decimale (a virgola fissa) 
l'intervallo di tempo trascorso (in giorni e decimali di giorno) dal 
30/12/1899 ore 0:00:00 (verificabile facendo dalla finestra immediata: 
?format(cdate(0),"dd/mm/yyyy hh:mm:ss")). In questo modo puoi evitare le 
conversioni degli intervalli di tempo in secondi o altro ed inserire gli 
intervalli di tempo come fossero date senza la parte data:
UPDATE tabella SET dtIntervallo=#3:30#
puoi sommare gli intervalli così memorizzati come se fossero un numero:
SELECT SUM(dtIntervallo) as dtTotale FROM tabella WHERE Mese=1
e per convertire il totale di in ore o minuti o secondi puoi fare:
ore=DateDiff("h",cdate(0),rs("dtTotale"))
minuti=DateDiff("n",cdate(0),rs("dtTotale"))
secondi=DateDiff("s",cdate(0),rs("dtTotale"))
nota che la DateDiff esiste anche in SQL quindi potresti anche delegare 
queste operazioni al DB (magari creando una vista o query). Devi però 
verificare che lo zero delle date del db coincida con lo zero delle date di 
VB...
Il vantaggio di questa soluzione è che non perdi precisione rispetto al 
formato data nativo di VB e che puoi usare le funzioni DateDiff, DateAdd, 
TimeSerial, ecc.
Ciao
Elef

Beh forse allora è proprio meglio memorizzare i dati nel DB come minuti 
(o come secondi, in base alla necessità).
L'operatore a schermo digita 1:50 ore di straordinario, e nel database 
finiscono 50 + 1*60 minuti, cioè 110.
In questo modo è moooooooooolto più semplice eseguire i calcoli, 
piuttosto che ammattire con i controlli su come gestire le date nei vari 
databse... :)
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...
