Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: leliCabello en 20 Mayo 2010, 20:39 PM

Título: controles de error
Publicado por: leliCabello en 20 Mayo 2010, 20:39 PM
qtal amigos, miren este es un boton guardar, que ya guarda al darle clik, pero me falta controlar que no guarden datos en blanco, como puedo hacer, ya q si no escojo al cliente se guarda asi .. ayudenme porfassssssS :-(
Private Sub cmdGuardar_Click()
Dim rs As New ADODB.Recordset
    If adoDatos.Recordset.RecordCount > 0 Then
        adoDatos.Recordset.MoveFirst
        rs.Open "LLAMADAS", cn, adOpenStatic, adLockOptimistic
        For i = 1 To adoDatos.Recordset.RecordCount
            rs.AddNew
            rs("cod_cliente") = adoDatos.Recordset("cod_cliente")
            rs("cod_tipo") = adoDatos.Recordset("cod_tipo")
            rs("llamadatipo") = adoDatos.Recordset("llamadatipo")
            rs("fecha") = Date
            rs("descripcion") = adoDatos.Recordset("descripcion")
            rs("cod_usuario") = adoDatos.Recordset("cod_usuario")
            rs.Update
            adoDatos.Recordset.MoveNext
        Next
        BorraRegistros "TEMPORAL_LLAMADAS", ""
        adoDatos.Refresh
        ModoEditar False
        MsgBox "El registro se guardó con éxito", , "TICOM S.R.L."
    End If
End Sub
Título: Re: controles de error
Publicado por: ssccaann43 © en 20 Mayo 2010, 22:46 PM
Primera vez que veo algo asi...!

Amiga usted por casualidad reviso el codigo que le sugeri? Alli le explica como puede guardar, modificar, eliminar, etc...!
Título: Re: controles de error
Publicado por: leliCabello en 21 Mayo 2010, 00:25 AM
mira, aqui lo agregue en mi codigo, porfavor ayudenmmeeee :-(
(http://img85.imageshack.us/i/errorgh.jpg/)
Título: Re: controles de error
Publicado por: leliCabello en 21 Mayo 2010, 00:28 AM
me bota un error: error de compilación; etiqueta no definida :huh:

Private Sub cmdGuardar_Click()
Dim rs As New ADODB.Recordset
    If adoDatos.Recordset.RecordCount > 0 Then
        adoDatos.Recordset.MoveFirst
        rs.Open "LLAMADAS", cn, adOpenStatic, adLockOptimistic
        For i = 1 To adoDatos.Recordset.RecordCount
            rs.AddNew
            rs("cod_cliente") = adoDatos.Recordset("cod_cliente")
            rs("cod_tipo") = adoDatos.Recordset("cod_tipo")
            rs("llamadatipo") = adoDatos.Recordset("llamadatipo")
            rs("fecha") = Date
            rs("descripcion") = adoDatos.Recordset("descripcion")
            rs("cod_usuario") = adoDatos.Recordset("cod_usuario")
            rs.Update
            adoDatos.Recordset.MoveNext
        Next
        BorraRegistros "TEMPORAL_LLAMADAS", ""
        adoDatos.Refresh
        ModoEditar False
        MsgBox "El registro se guardó con éxito", , "TICOM S.R.L."
           
           On Error GoTo ErrorSub
           If Trim(cboClientes.Text) = "" Then
        MsgBox "No se ha indicado el cliente", vbCritical, "Datos incompletos"
        cboClientes.SetFocus
        Exit Sub

    End If
       
    End If
End Sub
Título: Re: controles de error
Publicado por: seba123neo en 21 Mayo 2010, 04:05 AM
Hola, leliCabello , cuando haces algo como "On Error GoTo ErrorSub" tambien tenes que crear la etiqueta, ahi solo la definiste, pero nunca la creaste, busca esto porque es de manual...aparte no es por ofender ni nada por el estilo, pero al codigo lo veo algo confuso...tendrias que definir arriba de todo la etiqueta y el pedazo de codigo que chequea el cliente debe ir antes de ingresar los registros, no tiene logica chequearlo despues de que ya ha sido ingresado, aparte si eso ocurre seguro te tira error porque no existe el codigo...tampoco hagas esto "As New" es por un tema de rendimiento y de posibles errores. mejor primero lo declaras con As y despues le haces el Set (como con cualquier objeto).

saludos.
Título: Re: controles de error
Publicado por: leliCabello en 22 Mayo 2010, 02:27 AM
porfavor amigos ayudenme ..... mira adecuense a mi codigo, la verdad q lo q me falta es algo sencillo para ustedes ... tan solo me falta que el usuario quue hace un nuevo registro no deje campos en blanco ayudenmeeee plis  :-( :-( :-(

Private Sub cmdGuardar_Click()
Dim rs As New ADODB.Recordset
    If adoDatos.Recordset.RecordCount > 0 Then
        adoDatos.Recordset.MoveFirst
        rs.Open "LLAMADAS", cn, adOpenStatic, adLockOptimistic
        For i = 1 To adoDatos.Recordset.RecordCount
            rs.AddNew
            rs("cod_cliente") = adoDatos.Recordset("cod_cliente")
            rs("cod_tipo") = adoDatos.Recordset("cod_tipo")
            rs("llamadatipo") = adoDatos.Recordset("llamadatipo")
            rs("fecha") = Date
            rs("descripcion") = adoDatos.Recordset("descripcion")
            rs("cod_usuario") = adoDatos.Recordset("cod_usuario")
            rs.Update
            adoDatos.Recordset.MoveNext
        Next
        BorraRegistros "TEMPORAL_LLAMADAS", ""
        adoDatos.Refresh
        ModoEditar False
        MsgBox "El registro se guardó con éxito", , "TICOM S.R.L."
    End If
End Sub
Título: Re: controles de error
Publicado por: leliCabello en 22 Mayo 2010, 20:29 PM
bno para q me salga todo lo que tenia que hacer era omitir On Error GoTo ErrorSub
Título: Re: controles de error
Publicado por: seba123neo en 24 Mayo 2010, 02:08 AM
Cita de: leliCabello en 22 Mayo 2010, 02:27 AM
porfavor amigos ayudenme ..... mira adecuense a mi codigo, la verdad q lo q me falta es algo sencillo para ustedes ... tan solo me falta que el usuario quue hace un nuevo registro no deje campos en blanco ayudenmeeee plis  :-( :-( :-(

Private Sub cmdGuardar_Click()
Dim rs As New ADODB.Recordset
    If adoDatos.Recordset.RecordCount > 0 Then
        adoDatos.Recordset.MoveFirst
        rs.Open "LLAMADAS", cn, adOpenStatic, adLockOptimistic
        For i = 1 To adoDatos.Recordset.RecordCount
            rs.AddNew
            rs("cod_cliente") = adoDatos.Recordset("cod_cliente")
            rs("cod_tipo") = adoDatos.Recordset("cod_tipo")
            rs("llamadatipo") = adoDatos.Recordset("llamadatipo")
            rs("fecha") = Date
            rs("descripcion") = adoDatos.Recordset("descripcion")
            rs("cod_usuario") = adoDatos.Recordset("cod_usuario")
            rs.Update
            adoDatos.Recordset.MoveNext
        Next
        BorraRegistros "TEMPORAL_LLAMADAS", ""
        adoDatos.Refresh
        ModoEditar False
        MsgBox "El registro se guardó con éxito", , "TICOM S.R.L."
    End If
End Sub


eso es facil, tendrias que poner un chequeo antes de ejecutar el codigo que guarda los registros, algo asi lo haria yo.

Código (vb) [Seleccionar]

Private Sub cmdGuardar_Click()
    On Error GoTo ErrorInsertar
   
    If txtCodCliente.Text = "" Then
        MsgBox "Debe Ingresar un Codigo de Cliente", vbExclamation
        txtCodCliente.SetFocus
        Exit Sub
    End If
   
    If txtCodTipo.Text = "" Then
        MsgBox "Debe Ingresar un Tipo de Codigo", vbExclamation
        txtCodTipo.SetFocus
        Exit Sub
    End If
   
    Dim rs As ADODB.Recordset 'Declaras el objeto recordset
    Set rs = New ADODB.Recordset 'Creas el objeto recordset
   
    If adoDatos.Recordset.RecordCount > 0 Then
        adoDatos.Recordset.MoveFirst
        rs.Open "LLAMADAS", cn, adOpenStatic, adLockOptimistic
        For i = 1 To adoDatos.Recordset.RecordCount
            rs.AddNew
            rs("cod_cliente") = adoDatos.Recordset("cod_cliente")
            rs("cod_tipo") = adoDatos.Recordset("cod_tipo")
            rs("llamadatipo") = adoDatos.Recordset("llamadatipo")
            rs("fecha") = Date
            rs("descripcion") = adoDatos.Recordset("descripcion")
            rs("cod_usuario") = adoDatos.Recordset("cod_usuario")
            rs.Update
            adoDatos.Recordset.MoveNext
        Next
        BorraRegistros "TEMPORAL_LLAMADAS", ""
        adoDatos.Refresh
        ModoEditar False
        MsgBox "El registro se guardó con éxito", , "TICOM S.R.L."
    End If
   
    Exit Sub
   
ErrorInsertar:
    MsgBox "Se ha producido un error al ingresar los datos", vbCritical
End Sub


fijate que por cada campo que necesito chequear voy agregando un bloque IF...yo ahi puse 2 solamente , vos pones todos los que necesites chequear...

saludos.

Título: Re: controles de error
Publicado por: Shell Root en 24 Mayo 2010, 02:28 AM
No entiendo lo del .SetFocus. Obviamente sé para que sirve y como se usa. Pero dado el caso en el que sean 3 campos y solo inserte el primero. El .SetFocus, se situará dentro del ultimo objeto. Es decir,
Código (vb) [Seleccionar]
Text1.Text = "Hola" ' Text Lleno
Text2.Text = "" ' Text Vacio
Text3.Text = "" ' Text Vacio

En este caso y con tu código el .SetFocus, quedará dentro del Text3 o me equivoco?
Título: Re: controles de error
Publicado por: seba123neo en 24 Mayo 2010, 02:41 AM
supongamos que tiene 3 textbox, y hace esto:

Código (vb) [Seleccionar]

   If Text1.Text = "" Then
       MsgBox "Debe Completar el Text1...", vbExclamation
       Text1.SetFocus
       Exit Sub
   End If

   If Text2.Text = "" Then
       MsgBox "Debe Completar el Text2...", vbExclamation
       Text2.SetFocus
       Exit Sub
   End If

   If Text3.Text = "" Then
       MsgBox "Debe Completar el Text3...", vbExclamation
       Text3.SetFocus
       Exit Sub
   End If


los MsgBox son de ejemplo nomas...

sigueindo tu ejemplo Alex...si completa el primero entonces no entra por el primer IF y pasa al segundo...cuando vea el Text2 vacio entra por el segundo IF...posiciona el foco en el Text2...pero el Text3 ni lo valida porque ya encontro el Text2 vacio y sale del Sub...obviamente si se usa este metodo se tiene que poner los IF en orden a los campos que queremos chequear..porque si ponemos que valide primero el text3 antes que el text1 estaria mal...

saludos
Título: Re: controles de error
Publicado por: Shell Root en 24 Mayo 2010, 02:46 AM
Ok, Ok, por alguna razón no vi el Exit Sub, pero siguiendo tal caso, solo diría que falta por llenar el Text2, pero entonces el Text3 que?, tendría que volver a darle clic en cmdGuardar, para que mostrará que el Text3 también esta vacío?

En Visual Studio .NET hay controles como ErrorProvider, en Visual Basic no existen?
Título: Re: controles de error
Publicado por: seba123neo en 24 Mayo 2010, 03:06 AM
si, le tendrias que dar al boton otra vez....digamos que te va validando por nivel...se puede hacer que te diga todos los que estan incompletos al dar click solo una vez, te tendrias que crear un string que se valla llenando en cada IF que entra...pero ya es otro trabajo...igualmente yo por lo menos lo que hago tambien es poner asteriscos rojos al lado del los campos obligatorios (como hacen la mayotria de los formularios de registro de las paginas web), o sea que aparte de tener la validacion tenemos los asteriscos que el usuario lo ve facilmente, y si el usuario con esa validacion y los asteriscos ya se olvida de llenar algun campo...entonces ya es medio tonto  :xD

saludos.
Título: Re: controles de error
Publicado por: leliCabello en 24 Mayo 2010, 16:27 PM
eso es cierto  ;)  ______ gRaCias por este debate tan entretenido, me ayudaron mucho  ;D
Título: Re: controles de error
Publicado por: leliCabello en 25 Mayo 2010, 18:42 PM
oigan y si el usuario deja en blanco los datos de un datagrid, en caso de q tendrian q llenar datos en un datagrid, como seria???? ...... asi????? bno esta mal creo :huh:

If dgDatos.Columns(0).DataField = "" Then
MsgBox "Debe adicionar un servicio", vbExclamation, "Datos incompletos"
dgDatos.SetFocus
Exit Sub
End If
Título: Re: controles de error
Publicado por: seba123neo en 25 Mayo 2010, 19:52 PM
la verdad he trabajado muy poco con el control datagrid, lo he reemplazado casi sin pensarlo por el MSHFlexgrid es mucho mas personalizable y queda mejor en la interfaz, yo creo que todos los programadores prefieren por arriba el MSHFlexgrid que el datagrid.

me imagino que lo que estaras tratando de hacer, es que el usuario pueda ingresar manualmente los datos al datagrid y asi se inserten en la base directamente, por lo menos yo cuando quiero ingresar un registro nunca lo he realizado de ese modo directo, prefiero hacerme una pantalla de ABM, donde al hacer click en un registro me carga una nueva pantalla con los datos del registro seleccionado, porque si llegas a tener 50 campos, no creo queda efectivo que el usuario tenga que cargar todos esos datos en la grilla...aparte de la forma que yo te digo es como hacen la mayoria de los sistemas, por ejemplo, si tenes clientes que agregar, en una pantalla pones una grilla donde te lista todos los clientes..al hacer click en un registro te aparece una ventana con los datos del cliente para poder editarlo...esta pantalla de paso tambien te sirve para agregar uno nuevo , y despues que agreges el nuevo lo ves en la grilla de la anterior pantalla:

fijate esta pantalla por ejemplo de ABM de clientes:

ABM Clientes (http://www.imagosur.com/imagenes/capturas/BO/ABM%20Clientes%20de%20Administrativa.jpg)

saludos.
Título: Re: controles de error
Publicado por: ssccaann43 © en 25 Mayo 2010, 21:58 PM
Lo mejor que puede hacer es usar el MSHFlexgrid, sino pues el grandioso ListView... Con la clase de leandro lo hace editable si desea, pero por lo general no me gusta que las grillas se editen, sino que sean informativas...! Pero ya depende de su criterio..!