167 messaggi dal 08 dicembre 2003
Salve a tutti,
mi sapreste indicare qualcosa che mi controlla la validità di una data?
La funzione IsDate() non mi va tanto bene poichè non controlla la corretta disposizione nel formato GG/MM/AA.
11.886 messaggi dal 09 febbraio 2002
Contributi
Sei sicuro? IsDate ti da false se scrivi: "30/2/2004"

Enjoy learning and just keep making
167 messaggi dal 08 dicembre 2003
Allora...ho fatto queste prove. Premetto che gestisco il campo con l'anno a 2 cifre.
29/02/03 lo accetta e lo scrive nel database come 03/02/29
30/02/04 lo accetta e lo scrive nel database come 04/02/30
01/03/03 lo accetta e lo scrive nel database come 01/03/03 (giusto!!!)
10/24/99 lo accetta e lo scrive nel database come 24/10/99
Come me lo spieghi?
11.886 messaggi dal 09 febbraio 2002
Contributi
beh... non è colpa di isDate().
Questa funzione non trasforma niente, si limita solo a restituirti vero o falso.
Penso che il problema sia nella query sql che usi per inserire le date nel database. Grazie ad alcuni post passati si è capito che con Access è sempre meglio inserire le date nel formato anglosassone: mm/gg/aaaa

capisci anche tu che usando date con l'anno a due cifre può essere aumentato il rischio di "incomprensione". Infatti talvolta te le ha inserite come aa/mm/gg.
Un motivo importante per usare l'anno a 4 cifre è che ho visto che devi gestire anche le date del "secolo scorso", quelle cioè che iniziano con 19. Quindi:

- o fai inserire all'utente gli anni a 4 cifre
- o scrivi tu una piccola routine lato server che "completa" l'anno e poi lo inserisce nel db.

Io ti consiglio la seconda, così puoi continuare a inserire l'anno a 2 cifre.

nuovadata = ""
if Instr(Request.Form("data"), "/") > 0 and isDate(Request.Form("data")) then
tuadata = Split(Request.Form("data"), "/")
'esaminiamo l'anno
if Ubound(tuadata) = 2 then
if Len(tuadata(2))=2 AND isNumeric(tuadata(2)) then
if Cint(tuadata(2)) <= 20 then
tuadata(2) = "20" & tuadata(2)
else
tuadata(2) = "19" & tuadata(2)
end if
end if

'ora rimontiamo la data nel formato anglosassone
nuovadata=tuadata(1) & "/" & tuadata(0) & "/" tuadata(2)
end if
end if

if nuovadata <> "" then
'fai l'inserimento:
cn.Execute "INSERT INTO tabella (campo_data) VALUES (#" & nuovadata & "#)"
end if



ciao

Enjoy learning and just keep making
167 messaggi dal 08 dicembre 2003
Non ho problemi a gestire l'anno a 4 cifre. Il problema è che quando rileggi il campo data dal Database ti ritrasforma l'anno a due cifre...così ricominciamo. Possibile che non ci sia un sistema più semplice?
In ogni caso grazie per il codice.
11.886 messaggi dal 09 febbraio 2002
Contributi
prova a separare i due problemi:

- inserimento nel database
- estrazione dal database

l'inserimento ti funziona? Cioè, se apri acccess vedi la data giusta?


quando rileggi il campo data dal Database ti ritrasforma l'anno a due cifre...così ricominciamo.

devi dargli tu una formattazione appropriata.

Response.write FormatDateTime(rs("tuadata"), vbLongDate)

funziona?

Le date sono un tipo di dati a sè: non esistono date con anno a due cifre o date anglosassoni. Quelle sono solo rappresentazioni-stringa di una data. Purtroppo ci sono vari modi di rappresentare delle date e usare l'uno o l'altro metodo può farti avere noie come quelle che hai descritto.
Si tratta di usare la rappresentazione che elimina il rischio di incomprensione nel convertire la stringa alla data vera e propria.
In access usa mm/gg/aaaa per l'inserimento.
Per l'estrazione è più facile perchè parti già da un tipo di dati DATA, devi solo scegliere la rappresentazione a te più consona. E quello lo fai con formatDateTime oppure manualmente con:

Response.write Day(rs("tuadata")) & "/" & Month(rs("tuadata")) & "/" & Year(rs("tuadata"))

Tutte le funzioni che accettano come parametro una data (non una stringa) funzionano per certo, indipendentemente dalle impostazioni internazionali. Bisogna solo vedere se l'input che gli hai passato è giusto. Se hai un risultato inaspettato è perchè si è verificato un malinteso nella conversione stringa > data.
ciao

Enjoy learning and just keep making
167 messaggi dal 08 dicembre 2003
Tutto ok, ho risolto. Grazie per i consigli mi sono stati utili... a buon rendere.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.