Newsgroup: it.comp.lang.visual-basic
Titolo: Formato data in Select su DBF

Ciao a tutti.
Se faccio questa select su una tabella DBF
"Select Cognome, Nome, CodFisc, NatoIl FROM Anagrafi"
Il campo NatoIl del recordset risultante contiene il valore esatto e cioè
12/02/1972
Se però modifico la select in questo modo per evitare che le date vuote
vengano resituite come 0.00.00
"Select Cognome, Nome, CodFisc, IIF(NatoIl<>{},NatoIl,'          ') FROM
Anagrafi"
Il campo NatoIl magicamente diventa 02/12/1972
Qualcuno mi sa spiegare il motivo di questa cosa e soprattutto un metodo
_Sicuro_ per ottenere le date dai DBF _sempre_ nello stesso formato?
Grazie.
Skysurfer

 12/02/1972
 Ma con questa query le data sono restituite correttamente?
Ciao
--------------------------------
Inviato via 
http://usenet.libero.it


Potrebbe essere un problema di dimensionamento della colonna del recordset.
Con FoxPro (dbf) avveniva sempre.
Se tu usi un IIF, teoricamente la select dimensiona la colonna del resultset
in base alla costante che inserisci come secondo elemento (soprattutto se il
primo record che valuta è appunto un caso vuoto).
Quindi, ti dimensiona la colonna come stringa, e non come data.
Quando trova una data, e deve metterla in una stringa, deve effettuare una
conversione. E quindi ti butta fuori una cosa formattata secondo le sue
impostazioni.
Prova a mettere una data fittizia (intesa come tale, quindi con i #, non con
gli apicini) come secondo elemento dell'IIF, poi sappimi dire.
Ciao
Alberto


In effetti se invece di mettere 10 spazi come secondo parametro dell'IIF
metto una data vuota (in FoxPro è {}) il risultato è corretto.
Il problema è che le date vuote vengono restituite come 0.00.00 e questo è
proprio quello che volevo evitare.
Grazie.
Ciao
Skysurfer

 questo è proprio quello che volevo evitare.
Facciamo il punto:
Se usi
IIF(NatoIl<>{},NatoIl,'          ')
ottieni i campi formattati non correttamente, e le date vuote arrivano come
stringa di spazi
Se usi
IIF(NatoIl<>{},NatoIl,{})
i valori validi sono correttamente formattati, ma le date vuote ti tornano
come date vuote, ossia 0.00.00
Se usi
IIF(NatoIl<>{},NatoIl,{01/01/1980})
i valori validi sono correttamente formattati, ma le date vuote ti tornano
come data 01/01/1980
Tutto giusto fin qua?
Vediamo come proseguire:
Se vuoi evitare di avere le date vuote, devi necessariamente tornare alla
situazione iniziale, ma usando una funzione di formattazione di data in
stringa all'interno dell'IIF. Non ricordo, ma supponiamo che esista una
funzione simile al Format$ di VB. Dovresti allora usare:
IIF(NatoIl<>{},Format(NatoIl,'dd/mm/yyyy','----------')
A questo punto, cerca la funzione Format, o Cast, o Convert, in Fox-Pro, e
prova ad usarla grossomodo come ho fatto io qui sopra.
Attenzione, però: ciò che ti arriva non sarà una data, ma una stringa
rappresentante, quando non vuota, una data. Se il valore ti servirà, ad
esempio, per effettuare dei calcoli in VB, occorre prestare attenzione alla
conversione della stringa in data (ma fortunatamente c'è un piccolo thread
di qualche giorno fa :-)))
Ciao
Alberto

 IIF(NatoIl<>{},Format(NatoIl,'dd/mm/yyyy','----------')
Scusa, ovviamente manca una parentesi:
IIF(NatoIl<>{},Format(NatoIl,'dd/mm/yyyy'),'----------')
Sappimi dire
Ciao
alberto

 prova ad usarla grossomodo come ho fatto io qui sopra.
Il problema è che in FoxPro non esiste una funzione simile. Ma non è tanto
questo il problema, in quanto potrei estrarre e riconcatenare i vari pezzi
di stringa.
Spero solo che la data però a questo punto mi venga restituita sempre nello
stesso formato e che non dipenda da qualche impostazione del S.O.
Grazie per l'aiuto.
Skysurfer

 S.O.
Peggio.
Dipende dalla singola connessione.
Prova a usare il SET DATE. Con questo, dici alla connessione in che formato
vuoi le date. Se non specifichi niente, credo proprio che arrivi secondo il
S.O..
Poi, una volta impostato il Set Date, prova ad usare il DTOC (Date TO Char),
o il DTOS (Date TO String).
Spero funzionino anche dentro alle select.
Ciao
Alberto

 ha scritto nel messaggio
news:HQq6a.150962$YG2.4...@twister1.libero.it...

Era un'idea che mi era già venuta. Ma come posso impostare Set Date da una
connessione ADO?
Ho provato con cn.execute "SET DATE TO ITALIAN" ma non funziona e anche
guardando nell'help dell'ODBC di Visual FoxPro non ho trovato Set date.
Ciao
Skysurfer