Newsgroup: it.comp.lang.delphi
Titolo: Campo Data o Stringa : Voi che fareste ?

D5+ADO+ Access (non sono acettati commenti ;oPP)
Molto sinteticamente, dovrei gestire una tabella con chiamate telefoniche,
del tipo : chi ha chiamato, in che data e a che ora.
Il mio dubbio è che tipi di campo utilizzare, chi ha chiamato è un testo, in
che data è un data/ora, ma l'ora ?? , io ho pensato ad un testo di 5,
infatti se anche per l'ora mettessi un data/ora Access riporta "31/12/1900
16.45.00" (o simile) il che non è bello.
Anche in fase di report credo che un campo testo possa essere piu' comodo.
Per l'input dei dati uso due componenti DBwere dedicati uno per la data e
uno per l'ora in modo da avere input formattato.
Il valore che mi riporta la funzione Time di Delfi è "hh.mm.ss", i secondi
vengono 'segati' perchè noin necessari.
Se qualcuno ha già affrontato il problema e mi puo' consigliare, lo
ringrazio.
Qualsiasi idea è ben accetta.
PS. Db client/server come IB, Oracle, MS SQL come gestiscono i campi data  e
ora ??
--
Gianluigi Genasi
--------------------------
Minisystem Srl
Server di posta Kpnqwest - 
www.kpnqwest.it

Io per l'ora userei un campo integer mettendo i minuti (oppure i
secondi) assoluti del giorno (quindi un numero che va da 0 a 1339 per
i minuti).
Ciao, Rocco.

 ha scritto nel messaggio
news:3d80ab2c...@News.CIS.DFN.DE...

Avevo pensato anche a questa soluzione, ma dovrei poi modificare il
componente DBwere in modo che all'utente permetta un input formattato es
'15.34', ma sul DB riporti il numero dei minuti corrispondenti, altrettando
dovrei fare le conversioni in fase di stampa.
E' per questo che ho chiesto consigli, devo vagliare le varie idee che mi
sono venute.
Grazie
Gianluigi

 ora ??
Avendo un tipo data/ora appropriato (in IB devi avere almeno il dialect 3).
--------------------------------
Inviato via 
http://usenet.libero.it

 Non lo e', nei fatti.
Credo che dipenda da cosa ci devi fare con il campo ora.
Io semplicemente devo fare inputare a mano l'ora in cui si riceve una
chiamata telefonica, ed eventualmente stamparne una scheda.
I miei dubbi crescono, grazie per la 'discussione', spero di prendere
rapidamente una decisione.
Ciao Gianluigi

 rapidamente una decisione.
A mio avviso, la decisione e' una sola. Io scrivo anche software CTI
(Computer-Telephony-Integration) e problemi come il tuo li ho sempre risolti
cosi'.
L'uso del tipo "data/ora" predefinito, qualora non si tratti della durata
della chiamata, e' perfetto.



Ok, mi hai convinto ;o))), vada per il tipo Data/Ora
Ciao Gianluigi

 Ok, mi hai convinto ;o))), vada per il tipo Data/Ora
Bene ;)
In realta', con le stringhe ci sarebbe un problema serio: i dati andrebbero
scritti nel formato:
"aaaammgghhmmss", altrimenti non potresti mai fare query sensate per
intervalli di date.
E dire che ho conosciuto gente che, oltre a questo obbrobrio, usava dei
campi numerici, in cui andava a scrivere il valore floating-point del
datetime. Risultato: vedevi in tabella la data/ora 12/09/2002 21.22 come
37511,8905366898.
Ovviamente, non lavoriamo piu' insieme ;)


 ritrovo '31/12/1900 18.17'
Anche quando passi la data ti ritrovi gg/MM/yyyy hh:mm:ss quindi come fai
per la data fai per l'ora
Io in genere faccio in questi 2 modi:
1) uso un solo campo in cui salvo la data e l'ora
2) uso un campo per la data e ne imposto l'ora a 0:00:00 e uno per l'ora
dove la data la imposto come 01/01/1890 (la data forse l'ho cannata ma se
vedi nell'help la trovi, è quella che delphi riconosce come data iniziale)
in modo da non avere problemi se calcolo la differenza tra due orari (vedi
sotto)
Il bordello succede perché, frustatemi se sbaglio, il tipo TDateTime è in
realtà un numero a virgola fissa che ha come 0 la mezzanotte di una data
refissata (quella che dicevo prima) e di lì poi parte
La parte intera rappresenta la data e quella decimale l'ora quindi se fai la
differenza tra due ore viene fatta la differenza anche tra le parti intere e
il risultato viene poi considerato come minuti e succede un bordello
--
_________________________________
Edmondo Di Tucci 
snar...@tin.it
www.powernetsi.it
 
edm...@powernetsi.it

 Ovviamente, non lavoriamo piu' insieme ;)
NO ! NO ! Fino li non c'ero arrivato 8o//, micca sono matto !!
Al massimo avevo pensato ad un solo campo per l'ora scritta nel formato
"
hh.mm
"
Tornando sull'argomento, tu pensavi ad un solo campo data/ora sia per la
data che per l'ora o due campi data/ora uno per la data ed uno per l'ora
come sembra suggerire Edmondo ??
Ancora grazie e ciao.
Gianluigi.

 ha scritto nel messaggio
news:tC7g9.2420$my3....@twister2.libero.it...



1) Io normalmente non uso mai i componenti DBAware per insert/edit
2) Il campo DateTime su db va bene se lo vuoi usare per quello che è:
una data ed un'ora. Se a te interessa solo un'ora (magari intesa come
quantità, che quindi puo' superare le 24 ore), allora scegli altre
strade (tipo campo integer salvando i minuti).
3) Attento ai locate sulle date usando il compoente TClientDataset,
spesso il uso dei dataset dove metto anche il campo data come intero e
faccio il locate su quel campo.
Ciao, Rocco.

 il risultato viene poi considerato come minuti e succede un bordello
Non succede nessun bordello. Se due ore si distanziano di X giorni, e'
giusto che la differenza tra ore riporti anche i giorni di differenza.
Il problema e' capire se cio' che serve e' avere un risultato "quantita'"
ovvero "quante ore" sono passate dall'ora X del giorno Y all'ora S del
giorno T, e allora in questo caso e' necessario usare campi interi per
rappresentare la quantita' risultante in minuti o secondi.


 come sembra suggerire Edmondo ??
Io penso ad un unico campo data/ora.
Tu devi pensare che, a livello logico, e' l'"istante" che viene memorizzato
(dove per "istante" si intende un secondo specifico di un giorno specifico)
e l'istante e' identificato da una data e un'ora.


 30/12/1899
Questa l'avevo detto di non ricordarla!
