Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con le date! Aiutatemi!

Ciao a tutti,
e' la prima volta che posto e ho gia' bisogno di aiuto :)
Il problema e' il seguente, spero che qualcuno possa aiutarmi, perche' 
sono davvero disperata:
Situazione: devo inserire una data in formato gg/mm/aaaa in una text box 
e per vedere se funziona ho inserito una data sballata (05/25/1999), ma 
VB6 riconosce questa data come valida perche' la converte in 
25/05/1999...come posso risolvere questo problema? ISDATE non e' 
sufficiente...aiutatemi! :))
Francesca

Probabilmente ci saranno modi migliori ma io l'ho risolta cosi...
questa funzione da inserire nel BAS
Function chkdata(DtPass As Variant, CmData As Control)
   If Len(DtPass) = 0 Then
      chkdata = 1
      Exit Function
   End If
   ReDim chd(3), tbmesi(13)
   chd(0) = "": chd(1) = "": chd(2) = ""
   tbmesi(0) = 0
   tbmesi(1) = 31: tbmesi(2) = 28: tbmesi(3) = 31
   tbmesi(4) = 30: tbmesi(5) = 31: tbmesi(6) = 30
   tbmesi(7) = 31: tbmesi(8) = 31: tbmesi(9) = 30
   tbmesi(10) = 31: tbmesi(11) = 30: tbmesi(12) = 31
   Att_Gma = 0
   For LD = 1 To Len(DtPass)
      Select Case Mid(DtPass, LD, 1)
      Case "."
         Att_Gma = Att_Gma + 1
      Case "/"
         Att_Gma = Att_Gma + 1
      Case "-"
         Att_Gma = Att_Gma + 1
      Case "0" To "9"
         If Att_Gma > 2 Then
            chkdata = 2
            Exit Function
         End If
         chd(Att_Gma) = chd(Att_Gma) + Mid(DtPass, LD, 1)
      Case Else
         chkdata = 2
         Exit Function
      End Select
   Next
   chd(0) = Val(chd(0))
   chd(1) = Val(chd(1))
   chd(2) = Val(chd(2))
   SecAtt = Mid(Format$(Date, "dd-mm-yyyy"), 7, 2)
   SecAtt = Val(SecAtt) * 100
   If chd(2) < 1000 Then
      chd(2) = chd(2) + SecAtt
   End If
   Bise = Int(chd(2) / 4) = (chd(2) / 4)
   Bise = Bise And (Int(chd(2) / 100) <> (chd(2) / 100))
   If chd(2) = 2000 Then
        Bise = True
   End If
   If Bise Then
      tbmesi(2) = 29
   End If
   If chd(0) = 0 Or chd(1) = 0 Or chd(2) = 0 Then
      chkdata = 2
      Exit Function
   End If
   If chd(1) > 12 Then
      chkdata = 2
      Exit Function
   End If
   If chd(0) > tbmesi(chd(1)) Then
      chkdata = 2
      Exit Function
   End If
   chd(2) = Trim(Str(chd(2)))
   If Len(chd(0)) = 1 Then
      chd(0) = "0" & Trim(Str(chd(0)))
   End If
   If Len(chd(1)) = 1 Then
      chd(1) = "0" & Trim(Str(chd(1)))
   End If
   CmData = chd(0) & "-" & chd(1) & "-" & chd(2)
   chkdata = 0
End Function
Nel textBox sull'evento LostFocus..........invece questa
    If Len(wdata.Text) > 0 Then
        X = chkdata(wdata, wdata)
        If X <> 0 Then
            wdata.SetFocus
        End If
    End If
Francesca ha scritto:

--
!------------------------------------------------!
!ICQ     : 8281944
!E-Mail  : 
Dan...@levon.it
!
!"Se l'affanno interno si vedesse in fronte quanti
! che invidia ci fanno pieta' ci farebbero ... "
!
!HomePage : 
http://www.levon.it/daniele
!
!------------------------------------------------!

 Francesca
Prova cosi'... l'ho fatta al volo ma dovrebbe andare........fammi sapere
.....
Function Check_Data(sDate As String) As Boolean
       ' NB : Si aspetta una data
       ' in formato gg/mm/aaaa lunga 10 caratteri !!!!
       ' Il separatore e' indifferente !!!
        Dim i As Integer
        sDate = Trim$(sDate)
        For i = 1 To Len(sDate)
            If Mid$(sDate, i, 1) < "0" Or Mid$(sDate, i, 1) > "9" Then
Mid$(sDate, i, 1) = "/"
        Next i
        Check_Data = False
        If Len(sDate) <> 10 Then Exit Function
        If IsDate(sDate) And Format$(sDate, "dd/mm/yyyy") = sDate Then
Check_Data = True
End Function
Ciao
Ven

 Ciao a tutti,
