PDA

Visualizza versione completa : Errore di conversione del tipo di dati in vb


pina
01-08-2001, 19.24.28
In visual Basic
Come faccio a fare apparire una msgbox quando l'utente inserisce dei dati sbagliati? Praticamente in un campo "data" se l'utente digita del testo deve apparire una finestra ke avverte ke l'utente ha digitato sbagliando!
Grazie

emiliano
09-08-2001, 17.33.50
Non ricordo esattamente il nome della funzione ma ce ne deve essere una che fa tutto ciò, cioè se tu gli passi un testo, lui restituisce true se si può considerare una data, altrimenti false.
Si dovrebbe chiamare IsDate() o qualcosa del genere.
Ciao
Emiliano

xegallo
09-08-2001, 20.44.07
isdate () Restituisce un valore Boolean che indica se è possibile o meno convertire un'espressione in data

xegallo
09-08-2001, 20.45.55
x pina io credo che tu ti debba fare una funzione di controllo caratteri se mi dici come vuoi venga impostato la data ti posso aiutare

xegallo
14-08-2001, 16.20.03
prova a inserire questo codice in un modulo

Function delete(Stringa As String, Posizione As Integer) As String
' questa funzione cancella un carattere
If Posizione = 0 Then
del = ""
delete = del
Exit Function
End If
If Len(Stringa) = 0 Then
del = ""
delete = del
Exit Function
End If
lunghezza = Len(Stringa)
If Posizione = lunghezza Then
ccc = Mid(Stringa, 1, lunghezza - 1)
del = ccc
delete = del
Exit Function
End If
If Posizione < lunghezza Then
ccc = Mid(Stringa, 1, Posizione - 1)
vvv = Mid(Stringa, Posizione + 1)
del = ccc + vvv
delete = del
Exit Function
End If
If Posizione > lunghezza Then
del = -1
delete = del
Exit Function
End If
delete = del
End Function
Function ControlloData(Stringa As String, Posizione As Integer, Char As String) As Integer
'questa funzione controlla che nel campo testo venga scritta una data, dato un separatore
' per questa funzione è necessario sul form ci sia un'oggetto textbox e seguente routine di evento
'Private Sub [nomeOggetto]_Change()
'Dim data As String
'Dim pos As Integer
' data = [nomeOggetto].Text
' pos = [nomeOggetto].SelStart
' cntr = ControlloData(data, pos, "/")
' If cntr = -1 Then
' data = delete(data, pos)
' [nomeOggetto].Text = data
' [nomeOggetto].SelStart = pos
' End If
'
'End Sub
controllo = 0
On Error GoTo Hell
If Len(Stringa) > o Then
carattere = Mid(Stringa, Posizione, 1)
If Posizione = 0 Then
controllo = -1
'cursore sul primo carattere caratteri ammessi 0,1,2,3
ElseIf Posizione = 1 Then
If Asc(carattere) > 47 And Asc(carattere) < 52 Then
controllo = 0
Else
controllo = -1
End If
'cursore sul secondo carattere caratteri ammessi 0,1,2,3,4,5,6,7,8,9,
ElseIf Posizione = 2 Then
If Asc(carattere) > 47 And Asc(carattere) < 58 Then
controllo = 0
Else
controllo = -1
End If
'cursore sul terzo carattere l'unico carattere ammesso è quello designato da Char
ElseIf Posizione = 3 Then
If Asc(carattere) = Asc(Char) Then
controllo = 0
Else
controllo = -1
End If
'cursore sul quarto carattere caratteri ammessi 0,1
ElseIf Posizione = 4 Then
If Asc(carattere) > 47 And Asc(carattere) < 50 Then
controllo = 0
Else
controllo = -1
End If
'cursore sul quinto carattere caratteri ammessi 0,1,2,3,4,5,6,7,8,9
ElseIf Posizione = 5 Then
If Asc(carattere) > 47 And Asc(carattere) < 58 Then
controllo = 0
Else
controllo = -1
End If
'cursore sul sesto carattere l'unico carattere ammesso è quello designato da Char
ElseIf Posizione = 6 Then
If Asc(carattere) = Asc(Char) Then
controllo = 0
Else
controllo = -1
End If
'cursore sul settimo carattere caratteri ammessi 0,1,2,3,4,5,6,7,8,9
ElseIf Posizione = 7 Then
If Asc(carattere) > 47 And Asc(carattere) < 58 Then
controllo = 0
Else
controllo = -1
End If
'cursore sul ottavo carattere caratteri ammessi 0,1,2,3,4,5,6,7,8,9
ElseIf Posizione = 8 Then
If Asc(carattere) > 47 And Asc(carattere) < 58 Then
controllo = 0
Else
controllo = -1
End If
'cursore sul nono carattere caratteri ammessi 0,1,2,3,4,5,6,7,8,9
ElseIf Posizione = 9 Then
If Asc(carattere) > 47 And Asc(carattere) < 58 Then
controllo = 0
Else
controllo = -1
End If
'cursore sul decimo carattere caratteri ammessi 0,1,2,3,4,5,6,7,8,9
ElseIf Posizione = 10 Then
If Asc(carattere) > 47 And Asc(carattere) < 58 Then
controllo = 0
Else
controllo = -1
End If


End If
End If
ControlloData = controllo

Hell: controllo = -1
cotrollodata = controllo
Exit Sub
End Sub



speriamo vada bene

LuFo
21-08-2001, 18.30.41
dunque, oltre al metodo di xegallo, io sfrutto questo sistema:

1) limitiamo il numero di caratteri immissibili nella textbox. Per la data ci bastano al massimo 10 caratteri tutti numerici con in più il separatore "/". Per questo si può benissimo utilizzare una funzione da richiamare poi nell'evento "Keypress" della TextBox.
Ecco la funzione:

Function ChkInput(vKeyAscii As Integer)
Dim StringD As String
StringD = "1234567890/"

If vKeyAscii = 8 Then ChkInput = vKeyAscii: Exit Function 'è il tasto di delete

If InStr(StringD, Chr(vKeyAscii)) = 0 Then
vKeyAscii = 0 'Non è presente nell'insieme quindi l'azzero
End If

ChkInput = vKeyAscii
End Function


Adesso crea l'evento KeyPress ed inserisci il richiamo alla funzione in questo modo:

Private Sub TxtBox_KeyPress(KeyAscii As Integer)
KeyAscii = ChkInput(KeyAscii, "N")
End Sub

In questo modo, noterai che se provi a scrivere un carattere non compreso nella stringa "1234567890/", non viene scritto nella TextBox.
Adesso per controllare se la data è corretta puoi eseguire il controllo nel momento dell'evento "LostFocus" della TextBox:

Private Sub TxtBox_LostFocus()
If TxtBox.Text = "" Then TxtBox.Text = Date: Exit Sub 'se il campo è vuoto inserisco la data odierna (opzionale)
If Len(TxtBox.Text) < 10 Or Not IsDate(TxtBox.Text) Then 'qui eseguo il controllo sulla lunghezza e sul formato della date
MsgBox "Inserire una data nel formato 'gg/mm/aaaa'", vbInformation, "Data non valida"
TxtBox.Text = ""
TxtBox.SetFocus
Exit Sub
End If
TxtBox.Text = DateValue(TxtBox.Text) 'questa funzione ordina la data in base alle impostazioni di sistema. Es.: se scrivo "10/20/2001" con le impostazioni dper la data di sistema su "gg/mm/aaaa", la funzione "DateValue" sistemerà la data in "20/10/2001"

Spero di esserti stato utile ;)