Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Cancelar la operacion si ocurre un error

Estas en el tema de Cancelar la operacion si ocurre un error en el foro de Visual Basic clásico en Foros del Web. hola, como puedo deshacer toda la operacion si ocurre un error ? por ejemplo: sub proceso() adoclientes.recordset.addnew adoclientes.recordset!nombre = nombre adoclientes.recorset.update adoregistro.recordset.addnew adoregistro.recordset!valor = valor ...
  #1 (permalink)  
Antiguo 29/10/2005, 07:55
 
Fecha de Ingreso: agosto-2005
Ubicación: Peru-Lima
Mensajes: 225
Antigüedad: 18 años, 8 meses
Puntos: 0
Cancelar la operacion si ocurre un error

hola,
como puedo deshacer toda la operacion si ocurre un error ?
por ejemplo:

sub proceso()
adoclientes.recordset.addnew
adoclientes.recordset!nombre = nombre
adoclientes.recorset.update
adoregistro.recordset.addnew
adoregistro.recordset!valor = valor
adoregistro.recorset.update
end sub

imaginense que fueran varios procesos y si uno de ellos llegara a botar un error en tiempo de ejecuccion, como deshago las operacciones como si no hubiera hecho nada?
Gracias...
  #2 (permalink)  
Antiguo 29/10/2005, 21:53
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
Puedes hacerlo asi:
Código:
Sub Proceso()
On Error Resume Next
' Sentencias
End Sub
Aunque esto del "On Error resume Next" no lo recomiendo mucho; porque lo que hace es ignorar todos los errores que se puedan dar en tu codigo; y a veces se hace necesario "rastrear" ciertos errores; para poder asi, dar soluciones alternas al error que ocurrio.
Ahora bien, el problema esta en que si no sabes que errores te puede dar el proceso, entonces como dar soluciones alternas a los errores....porque no necesariamente al usuario le va a dar los mismos errores que te da a vos. Es en estos casos cuando justifico el uso de "On Error Resume Next".
Sin embargo te dejo un pequeño ejemplo de como "rastrear" los errores; sin que la aplicacion se te trunque:
Código:
Sub Proceso()
On Error GoTo errores
' Sentencias
errores:
If Err.Number <> 0 Then
    MsgBox "Error # " & Err.Number & Chr(13) & Err.Description
End If
End Sub
Saludos.
  #3 (permalink)  
Antiguo 30/10/2005, 06:57
 
Fecha de Ingreso: agosto-2005
Ubicación: Peru-Lima
Mensajes: 225
Antigüedad: 18 años, 8 meses
Puntos: 0
Cita:
Iniciado por jc_moty
Puedes hacerlo asi:
Código:
Sub Proceso()
On Error Resume Next
' Sentencias
End Sub
Aunque esto del "On Error resume Next" no lo recomiendo mucho; porque lo que hace es ignorar todos los errores que se puedan dar en tu codigo; y a veces se hace necesario "rastrear" ciertos errores; para poder asi, dar soluciones alternas al error que ocurrio.
Ahora bien, el problema esta en que si no sabes que errores te puede dar el proceso, entonces como dar soluciones alternas a los errores....porque no necesariamente al usuario le va a dar los mismos errores que te da a vos. Es en estos casos cuando justifico el uso de "On Error Resume Next".
Sin embargo te dejo un pequeño ejemplo de como "rastrear" los errores; sin que la aplicacion se te trunque:
Código:
Sub Proceso()
On Error GoTo errores
' Sentencias
errores:
If Err.Number <> 0 Then
    MsgBox "Error # " & Err.Number & Chr(13) & Err.Description
End If
End Sub
Saludos.
hola, pero el on error resume next o got solo ignora o lo lleva a otro codigo pero no cancela las operaciones que ya fueron hechas...
por ejemplo:

ado1.recorset.addnew '<<<<restaurar
ado1.recorset!nombre = nombre '<<<<restaurar
ado1.recorset.update '<<<<restaurar

ado2.recorset.addnew '<<<<restaurar
ado2.recorset!nombre = nombre '<<<<digamos que sale un error aki, que restaure todo lo anterior como si no hubiera hecho la operacion
ado2.recorset.update
  #4 (permalink)  
Antiguo 30/10/2005, 10:04
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
Por eso, con On Error GoTo puedes detectar los errores que te puede dar el codigo; y dependiendo del error puedes establecer sentencias que restauren lo q ya se hizo; por ejemplo:
Código:
Sub Proceso()
On Error GoTo errores
' Sentencias
errores:
If Err.Number <> 0 Then
    Select Case Err.Number
        Case 3021
            ' Sentencias...
        Case 1094
            ' Sentencias...
        Case Else
            ' Sentencias...
    End Select
End If
End Sub
Pero antes de hacer esto debes provocar los errores, para saber el numero del error; y que es lo que queres que haga el proceso en caso de que ocurra el error.
Saludos.
  #5 (permalink)  
Antiguo 31/10/2005, 09:44
 
Fecha de Ingreso: septiembre-2005
Mensajes: 99
Antigüedad: 18 años, 7 meses
Puntos: 0
Hola

no se si comprendí mal pero creo que antonio se referia a manejo de base de datos

lo que puedes hacer ya que estas hablando de base de datos es meter tu codigo dentro de una transacción y luego en caso de error puedes devolver toda la transacción,

Si quieres invertigar un poco acerca de esto puedes hacerlo busacando acerca de transacciones de base de datos y en especial sobre rollback(la funcionabilidad de deshacer una transacción)....

salu2
  #6 (permalink)  
Antiguo 01/11/2005, 13:44
 
Fecha de Ingreso: agosto-2005
Ubicación: Peru-Lima
Mensajes: 225
Antigüedad: 18 años, 8 meses
Puntos: 0
Cita:
Iniciado por RonAraya
Hola

no se si comprendí mal pero creo que antonio se referia a manejo de base de datos

lo que puedes hacer ya que estas hablando de base de datos es meter tu codigo dentro de una transacción y luego en caso de error puedes devolver toda la transacción,

Si quieres invertigar un poco acerca de esto puedes hacerlo busacando acerca de transacciones de base de datos y en especial sobre rollback(la funcionabilidad de deshacer una transacción)....

salu2
si eso es lo que kiero y como puedo lograr eso?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:02.