controles de error

Iniciado por leliCabello, 20 Mayo 2010, 20:39 PM

0 Miembros y 1 Visitante están viendo este tema.

leliCabello

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

ssccaann43 ©

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...!
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

leliCabello

mira, aqui lo agregue en mi codigo, porfavor ayudenmmeeee :-(

leliCabello

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

seba123neo

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.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

leliCabello

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

leliCabello

bno para q me salga todo lo que tenia que hacer era omitir On Error GoTo ErrorSub

seba123neo

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.

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Shell Root

#8
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?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

seba123neo

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
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson