Ver Mensaje Individual
  #1  
Antiguo 13-04-2005
cahern4 cahern4 is offline
Registrado
 
Registrado: may 2003
Posts: 8
Reputación: 0
cahern4 Va por buen camino
Lanzar excepciones

Un saludo a todos en el foro. Y desde ya, gracias por la ayuda.
Tengo un problema y escribo para ver si me pueden ayudar, quizá sea algo muy simple pero la verdad no le puedo llegar.
El caso es el siguiente: tengo un procedimiento principal, el cual comienza con un try y finaliza con un except, en medio del try se hace llamado a otro procedimiento que lo que hace son algunas transacciones en la base de datos, y dentro de ese segundo procedimiento puede que se llame o no a otro procedimiento que también lo que hace son transacciones a la base de datos, y así sucesivamente hasta llegar a 5 niveles de procedimientos.
El problema que tengo es que si en alguno de esos procedimientos se da un error de acceso a la base de datos o se presenta alguna inconsistencia debo de hacer Rollback a las demás transacciones que se realizaron en los procedimientos anteriores.
No se si yo puedo lanzar una excepción de un procedimiento a otro hasta llegar al except principal donde se hace el rollback de todas las transacciones, por eso les escribo para que me orienten o me den un luz. Ya que a como está el código en este momento no me cae al except principal, nada mas me da un error de base de datos y el programa se me cuelga.
A continuación adjunto el código para que se den una idea de que es lo que necesito hacer.
Código:
try
begin
     datos.celular.StartTransaction;
     Aumentar_Orden(txt_orden.text,form_acceso.usuario.cedula,
                           form_acceso.usuario.nivel,
                           Max_Ordenes,Max_Lote,Max_Grupo);
     datos.celular.Commit;
end;
except
        datos.celular.Rollback;
        messagedlg('Error en la asignación del documento, vuelva a intentarlo',mtinformation,[mbok],0);
end;
Mas en detalle con nombres y todos seria de esta forma, dentro del procedimiento Aumentar_Orden hay una serie de transacciones a la base de datos y puede o no que se llame a otro procedimiento con el nombre Cambiar_Lote, dentro de Cambiar_Lote hay una serie de transacciones a la Base de datos y puede o no que se llame a Cambiar_Grupo, que dentro de Cambiar_Grupo se realizan una serie de transacciones a la base de datos y puede o no que se llame a Cambiar_Caja y en cambiar caja se realizan las ultimas transacciones a la base de datos. Pero cabe resaltar que no siempre se llega al último nivel de los procedimientos, porque eso depende de las condiciones que se den.
Otro punto importante es que en los demás procedimientos no existe un try y except. Solo está en el procedimeinto principal.

Un saludo a todos y muchísimas gracias por leer mi mensaje, espero haberme explicado bien.
Responder Con Cita