Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: 4D1cTo en 12 Febrero 2008, 05:30 am



Título: ayuda con procedimiento
Publicado por: 4D1cTo en 12 Febrero 2008, 05:30 am
estoy realizando un procedimiento para validar datos que sean solo de tipo numerico

Sub Valida(txtVar, error)
Dim error As String
If IsNumeric(txtVar) = False Then
   MsgBox ("Error en (" & error & ")")
End If
End Sub

No se donde esta el error , lo llamaria de la siguiente manera

Valida (txtValida,Celular)

yo quiero que valide el txtValida y en la parte del error muestre "Error en Celular"

se entiende ?
gracias


Título: Re: ayuda con procedimiento
Publicado por: ~~ en 12 Febrero 2008, 12:17 pm
Y por q no haces q el textbox en cuestion solo acepte numeros y ya esta??

Código:
Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 8 Then Exit Sub

If KeyAscii < 48 Or KeyAscii > 58 Then
KeyAscii = 0

End If

End Sub


Título: Re: ayuda con procedimiento
Publicado por: 4D1cTo en 12 Febrero 2008, 12:24 pm
porque tengo alrededor de 30 textbox para validar  :laugh:


Título: Re: ayuda con procedimiento
Publicado por: ~~ en 12 Febrero 2008, 12:29 pm
Pues los llamas a todos igual (vamos creas una matriz de controles) y pegas el mismo codigo:

Código:
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 8 Then Exit Sub

If KeyAscii < 48 Or KeyAscii > 58 Then
KeyAscii = 0

End If
End Sub

Y solucionado, ninguno admite letras ;)


Título: Re: ayuda con procedimiento
Publicado por: 4D1cTo en 12 Febrero 2008, 12:31 pm
esos txt despues van a una base de datos

y si todos tienen el mismo nombre se me lia  :-X


Título: Re: ayuda con procedimiento
Publicado por: ~~ en 12 Febrero 2008, 12:48 pm
Te refieres a ellos por su index, por ej text1(25).text...

A mi me parece mas practico q andar llamando a una funcion todo el rato, pero weno si kieres la funcion kedaria asi:

Citar
Sub Validar(txt As TextBox, Error As String)
    Dim n As Integer, Digito As String * 1
    For n = 1 To Len(txt.Text)
        Digito = Mid(txt.Text, n, 1)
        If Asc(Digito) < 48 Or Asc(Digito) > 58 Then
            MsgBox "Error en (" & Error & ")"
            Exit Sub
        End If
    Next n
End Sub


Private Sub Command1_Click()
    Call Validar(Text1, "Celular")
End Sub

Si tiene una sla letra el textbox salta error, si no no ;)


Título: Re: ayuda con procedimiento
Publicado por: 4D1cTo en 12 Febrero 2008, 13:15 pm
muchas gracias , ahora a renegar con el ado  ;D


Título: Re: ayuda con procedimiento
Publicado por: black_jjk en 18 Febrero 2008, 20:08 pm
Lo que ha dicho EON es correcto, ese es el camino que deberías seguir si estas apenas diseñando tu programa o si tuvieras ganas de cambiarle el nombre a tus controles y crear una matríz de controles, pero por lo visto de da flojera o simplemente no te gusta la idea, tú código esta mal desde un principio:

Citar
Sub Valida(txtVar, error)
Dim error As String
Si pretendes pasar "error" como argumento para tu función debería de quedar así:
Código:
Fuction Validar(ElTexto As String, QueError As String)
If Not IsNumeric(ElTexto)Then
   MsgBox ("Error en (" & QueError & ")")
End If

Porque al declarar otra vez la error como String en la segunda linea de tu código eliminas el argumento que habías pasado.
End Function


Título: Re: ayuda con procedimiento
Publicado por: Chefito en 19 Febrero 2008, 03:54 am
Mmmmm, por lo que veo es un número de teléfono lo que quiere tratar (por lo de celular). Hay que tener en cuenta que la función IsNumeric da como verdadero a un número con una coma o varios puntos (incluso puntos seguidos, haz la prueba), según la configuración del caracter decimal. Por eso, cuidado! que lo mismo no le interesa que le entre esos caracteres ;) (y menos puntos a gogo :)). Una forma de solucionarlo sería quitando estos caracteres con la función replace (ejem: texto=replace(texto,",",""). Pero hay no solo acaba el problema, sino que tambien acepta números como 2,342342E+22, ya que vienen de los tipos single y double del vb. Más para sustituir con replace jajajajaja. Pero sigue habiendo más problemas........ también da como verdadero los números hexadecimales (&had) y octales (&34)....también el signo más y menos (+,-) al principio del número....puffffff Más sustituciones. Y quien sabe que más aceptará  :rolleyes:.
Ya se que son casos raros de ver, pero todo puede pasar.....y son fallos.
Al final pienso que se debe restringir la entrada de teclas con el evento keypress o hacer lo que dice eon....revisar los caracteres uno a uno.
Saludos.
P.D. Todas estas sustituciones se deberían realizar despues de que IsNumeric hubiese dado verdadero al número. Pero sigo pensando que no es lo más correcto.