Newsgroup: it.comp.lang.visual-basic
Titolo: CDate, IsDate & Co.

Ciao.
Ho già cercato con google nei vecchi post ma non ho trovato nulla per
risolvere il mio problema...
E' il classico (per così dire...) problema con le impostazioni
internazionali e i controlli sulle date.
Se io ad esempio ho una data in formato dd/mm/yyyy scritta così 10/22/2003
nel momento che la passo ad un CDate (o CVDate) mi restituirà 22/10/2003 e
se la passo ad un IsDate mi restituirà True per lo stesso motivo di prima...
Visto che i programmatori VB ci hanno fatto la grande cortesia di rendere
questi controlli così "intelligenti" da girare a loro piacimento le date, a
me piacerebbe averli un pò più stupidi... ^__^
Esiste qualcosa in VB che posso usare per avere un simpatico messaggio di
errore quando inserisco date senza senso?
O devo scrivermi una funzione che gestisca tutto? spero di no...
Grazie a chi mi risponderà

beh, scusa...."middi" la stringa e controlli le singole parti che compongono
la data. Mi spiego, supponi che:
Me.txtData="78/06/2003"
Se consideri la data nel formato dd/mm/yyyy, questa data sarà *sempre*
sbagliata. Come fai a capirlo?
Allora, controlli che Mid$(me.txtData,1,2) deve essere sempre da 1 a 31;
ovviamente devi gestire gli anni bisestili, il mese di febbraio e i mesi a
30 giorni.
Mid$(Me.txtData,4,2) DEVE essere sempre tra 1 e 12. I mesi sono quelli,
punto e basta.....
Mid$(Me.txtData,7) deve essere un anno valido, magari compreso in un certo
range che stabilisci tu, chessò, tra 1900 e 2100.
così obblighi l'utente a inserire la data nel tuo formato fisso. Va bene?
good coding!!!
-- 
Damiani Liborio Igor
ig...@igordamiani.it
 - 
soft...@igordamiani.it
 - 
idam...@hotmail.com
http://www.igordamiani.it
ICQ : 11847262

 good coding!!!
Grazie!
Ciao

 compongono la data.
[cut]
Questa è la soluzione con la creazione di una propria function.
Che funziona, certamente, ma che ha due sfighe:
1) non segue le impostazioni internazionali (parzialmente vero, perchè
all'interno della function potrei anche leggere le impostazioni
internazionali e farla flessibile).
2) scrivere una function è proprio quello che Flea sperava di evitare.
Seguivo il thread sperando ci fosse una soluzione light.
In effetti, se CDate converte una espressione qualunque in data, sarebbe
stato utile un parametro Optional byval StrictRegional as Boolean=False, che
imponesse il rispetto rigoroso delle impostazioni internazionali, anzichè
ammettere date 'regionalmente sbagliate' come valide.
Ciao
Alberto

 ammettere date 'regionalmente sbagliate' come valide.
Ecco. Proprio quello che cercavo... ^__^
Qualcosa che non mi imponesse l'uso di una nuova function.
Per adesso va bene così... in attesa di cercare qualcosa di meglio...
Ciao

beh, ma allora non ho capito......
il fatto che non dovesse seguire le impostazioni internazionali non era un
requisito richiesto da Flea?
Se no, non ho capito veramente.....
Se sě, allora siamo a posto. Forse altri controlli *non* si adattano alle
impostazioni, ma non ci giurerei troppo. Controlli tipo MaskEdit, mi
pare......perň secondo me si adattano a quanto messo nel pannello......
evitare di scrivere una function per una cosa cosě generica č
impossibile.....piuttosto farei una function a cui si passa il nome del
controllo, cosě la riuso un milione di volte!


 alternativa... lo sbattimento sono gli anni bisestili + 30g... :-)
per questo puoi usare la funzione dateserial


Prova a scrivere
Debug.Print CStr(DateSerial(2003, 2, 29))
Ciao
Alberto

 Se no, non ho capito veramente.....
Io ho capito cosě:
Se il mio PC č in ITA, la data dovrebbe essere dd/mm/yyyy
Perň, se io scrivo 12/18/1969, la data viene accettata e convertita
automaticamente nel 18 Dicembre 1969.
Viceversa, se i mio PC č ENG, la data dovrebbe essere mm/dd/yyyy
Perň, se io scrivo 18/12/1969, la data viene accettata e convertita
automaticamente nel 18 Dicembre 1969.
Visto che IsDate č semplicemente un On Error Resume next del CDate, questo
comportamento del CDate č quantomeno ambiguo.
Spesso, date non valide nascono da errori di digitazione, per cui
intercettare date non valide localmente (ma valide altrove, se vogliamo),
sarebbe utile per 'centrare' errori di battitura.
Ciao
Alberto

Il 8/28/2003 11:03 AM, Flea scrisse:

Perche' non salti completamente il problema ed usi il controllo 
DateTimePicker? In questo modo possono essere inserite solo date valide 
e tu non devi fare nessun controllo.
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 Ciao
Ciao,
*Roby*
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 e tu non devi fare nessun controllo.
Il DateTimePicker č quello che uso attualmente...
A me serve questo controllo perchč non voglio piů usarli. ^__^
Comunque grazie
Ciao
Flea

 Così ti eviti numerosi controlli...
Nel tuo codice utilizzi un IsDate esplicito e un CDate implicito.
Siccome IsDate si basa sul CDate per verificare la validità, diciamo che in
sostanza tutta la tua funzione ruota attorno al CDate.
Siccome Flea voleva appunto superare un determinato comportamento che
ritiene (anche io) non corretto, non mi sembra che la tua function apporti
alcun vantaggio.
Ciao
Alberto