Newsgroup: it.comp.lang.visual-basic
Titolo: Date, dati: che problema!?!

Salve a tutti,
Ho una text in cui dovrei inserire una datae vorrei che vb mi mettesse le /
da solo e controllasse l'esattezza della data. Questo è possibile farlo in
automatito (tanto per capirci come fa Access quando metto un campo data)?.
Un'altra cosa le date immesse in questa text dovranno essere inserite in una
tabella Access in un campo data non vorrei che mi desse "errore nella
conversione dati".
P.S. Il formato della data sul campo Access l'ho messa 99/99/0000.
Grazie.

 ha scritto

in attesa che qualcuno ti posti una soluzione, suggerirei intanto un po' di
calma nell'analisi: o prevedi anni con 99 mesi e mesi con 99 giorni, o se
intendevi 9=cifra forse e' piu' omogeneo indicare 99/99/9999 (il "data in
cifre" di access), o, alla windows italiano, gg/mm/aaaa.
non basarti troppo sul formato in cui l'hai messa in access. l'importante e'
che sia una data valida. se immetti 31/1/99, con un'impostazione tipo la tua
vb se la girerebbe in 31/01/1999 senza problemi.
controlla piuttosto la validita' della data. nell'immissione, io di solito
prevedo qc come:
Private Sub txtNascData_LostFocus()
    If Not IsDate(txtNascData) Then
        MsgBox "DATA NON CORRETTA"
        txtNascData.SetFocus
    End If
End Sub
col che se l'utente mette una data assurda non esce dal campo.
se vuoi rendergli la vita piu' facile puoi fare qc tipo:
Private Sub txtNascData_gotFocus()
    txtnascdata=date
End Sub
cioe' gli metti la data corrente come esempio di formato valido. pero' c'e'
il rischio che venga memorizzata cosi' com'e' (un cliente odierno
risulterebbe nato oggi), da controllare quindi al lost focus.
ciao, a.

Già postata un po di tempo fa:
Public Function CheckDate(ctr As TextBox) As Boolean
    Dim sString As String
    Dim nLen As Integer
    sString = ctr.Text
    sString = Trim(Replace(sString, "/", ""))
    sString = Trim(Replace(sString, "-", ""))
    nLen = Len(sString)
    If nLen > 0 Then
        If nLen = 6 Or nLen = 8 Then
            sString = Left(sString, 2) + "/" + Mid(sString, 3, 2) + "/" +
Mid(sString, 5)
        Else
            sString = Left(sString, 1) + "/" + Mid(sString, 2, 2) + "/" +
Mid(sString, 4)
        End If
        sString = Format(sString, "dd/mm/yyyy")
        If IsDate(sString) Then
            CheckDate = True
            ctr.Text = sString
        Else
            CheckDate = False
            MsgBox "Data non valida", vbInformation + vbOKOnly,
Screen.ActiveForm.Caption
        End If
    Else
        CheckDate = True
    End If
End Function
chiamata dalla validate del textbox:
            Cancel = Not CheckDate(Text1(Index))
ciao
ugo

 conversione dati".
Ciao,
tanto per far vedere che abbondiamo ti posto anche la routine che uso io per
controllare la validità di una data immessa dall'utente:
Public Function FormatDate(obj As Object) As Boolean
    Dim dataStr As String
    Dim dataLen As Integer
    dataStr = obj.Text
    dataLen = Len(dataStr)
    If IsDate(dataStr) Then
        obj.Text = Format$(dataStr, "dd/mm/yyyy")
        FormatDate = True
    Else
        Select Case dataLen
            Case 0
                FormatDate = True
            Case 6, 8
                If IsNumeric(dataStr) Then
                    dataStr = Left$(dataStr, 2) & "/" & Mid$(dataStr, 3, 2)
& "/" & Right$(dataStr, dataLen - 4)
                    dataStr = Format$(dataStr, "dd/mm/yyyy")
                    FormatDate = IsDate(dataStr)
                Else
                    FormatDate = False
                End If
            Case Else
                FormatDate = False
        End Select
        If FormatDate Then
            obj.Text = dataStr
        Else
            MsgBox "La data inserita non è nel formato corretto.",
vbExclamation + vbOKOnly, "Attenzione!"
        End If
    End If
End Function
So che non è perfetta, ma finora ha svolto i suoi compiti.
Poi la puoi richiamare così:
sub text1_lostfocus()
    if not formatdate(text1) then
        with text1
            .setfocus
            .selstart = 0
            .sellength = len(.text)
        end with
    end if
end sub
Ciao.
--
Princi, 
princ...@programmer.net
--------------------------------------------------------------------------
"Tutti sanno che una cosa è impossibile da realizzare,
finché arriva uno sprovveduto che non lo sa e la inventa." A.E.

             .sellength = len(.text)
in altri casi lo faccio, ma con la data ho visto che se uno non molto
pratico ha sbagliato solo il mese rischia di cancellare tutto, con alte
probabilita' di metterci un altro errore. nel caso quindi preferisco
.selstart=len(.text), o niente addirittura, tanto normalmente all'uscita il
cursore e' gia' in fondo.
ciao, a.


 cursore e' gia' in fondo.
Questione di gusti. In genere, se un'impiegata sbaglia a digitare, è proprio
un errore di "digitazione". Ho potuto notare in varie circostanze che
durante l'inserimento di date l'utente abituale di un sw usa il tastierino
numerico e fa normalmente prima a riscrivere la data (ex: 010100) che a
correggere il singolo dato dovendosi spostare con tasti freccia e backspace.
Se togliessi questa caratteristica ai miei programmi mi aspetterei una non
molto pacata sommossa da parte di un nutrito numero di segretarie :-))


 Se togliessi questa caratteristica ai miei programmi mi
aspetterei una non molto pacata sommossa da parte di un
nutrito numero di segretarie :-))
Concordo in pieno con Princi.
Vorrei anche cogliere l'occasione per esternare tutta la mia
stima per la categoria delle segretarie, troppo spesso
ingiustamente vituperata dai piu` fessi di noi.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X

 ingiustamente vituperata dai piu` fessi di noi.
Certo che anche loro sono una bella razza, va'!
Alcune sono senz'altro meritevoli SOLO della più ampia stima
(professionale); le altre, normalmente, sono SOLO meritevoli della più ampia
*stima*.   ;-)


 ingiustamente vituperata dai piu`fessi di noi.
approvo. per quanto mi riguarda:
a. cerco di non vituperare/osannare le categorie, ma i singoli.
b. conosco segretarie efficientissime, a differenza dei loro datori di
lavoro.
c. quando proprio estrapolo, parlo di "utenti", termine che include
ingegneri, segretari, bibliotecari, politici e surfisti, nel momento in cui
stanno davanti a un monitor.
ciao, a.

 stanno davanti a un monitor.
Anch'io seriamente approvo. La mia risposta a Maurizio non voleva certo
essere un vituperio, ma soltanto un modo scherzoso per presentare la mia
buffa (ed ammetto debole) teoria sulle segretarie carine.
Ciao.
P.S. Non sono ammesse generalizzazioni all'intero mondo femminile, la teoria
è comprovata solo all'interno della qualifica professionale di segretarie ed
è valida solo nella direzione da me indicata.   ;-))


 P.S. Non sono ammesse generalizzazioni all'intero mondo
femminile, la teoria è comprovata solo all'interno della
qualifica professionale di segretarie ed è valida solo nella
direzione da me indicata.   ;-))
Non serve questo discorso. C'e` chi ha dimostrato che e`
valido per qualsiasi categoria. Cito a memoria:
"Circa il 25% di ciascun raggruppamento umano in qualsiasi
modo ottenuto risultera` composto da stupidi."
(Se non sbaglio il titolo e` "Allegro ma non troppo".
Purtroppo non rammento l'autore. Da leggere!)


 sicuramente sono io arrugginito ma...
sono anche un po' idiota! bell'endecasillabo (tronco).
...la notte porta consiglio...
Chiedo venia.


 Chiedo venia.
de che ?
per quanto creativo sia questo linguaggio, very burlone, mica stiamo in
it.poesia.metrica ?
io che dovrei dire, che non ho mai fatto un modulo di classe in vita mia ?

 io che dovrei dire, che non ho mai fatto un modulo di classe
in vita mia ?
Mi ricordi Teodorico. Anche per lui un modulo di Classe era
una cosa un po' bizantina.


>io che dovrei dire, che non ho mai fatto un modulo di classe in vita mia ?
fai solo bene, una volta che hai fatto il primo non riesci più a
smettere

 > ci scambieremo le sub.
potrei -- peraltro a malincuore -- cederti alcune delle mie bisvalide e
l'url di un decompilatore vb5 per un po' delle tue strafi'. quelle anche
brave :)