Una excepción busca el del try except más cercano, si no tienes ninguno en
tu aplicación, se genera el evento Application.OnException (delphi 6 o
superior, componente TapplicationEvents, si mal no recuerdo), Si tampoco
tienes código en ese evento, o no la cancelas la excepción, entonces
aparece el mensaje en pantalla, y casi siempre en inglés.
Tu caso particular es complejo, pero es simple la solución:
Tal como lo comentas, las llamadas en cascada se pueden producir así:
Aumentar_Orden
Cambiar_Lote,
Cambiar_Grupo,
Cambiar_Caja
Código Delphi
[-]
procedure aumentar_Orden
begin
try
transaccion1.StartTransaction...
except
mensajepersonalizado al usuario.
transaccion1.rollback;
end
end;
procedure Cambiar_Lote
begin
try
transaccion2.StartTransaction...
except
mensaje personalizado
transaccion2.rollback;
raise; end
end;
procedure Cambiar_Grupo
begin
if valorBooleano then
Cambiar_Caja
end;
procedure Cambiar_Caja
begin
try
transaccion4.StartTransaction...
except
mensaje personalizado
transaccion4.rollback;
raise; end
end;
Es decir, el programa iría de arriba de este código, hacia abajo, pero cuando
se produce la excepción, hace lo que hay en el try except, y al estar la
palabra reservada
raise;, el código se empieza a ejecutar hacia arriba,
entrando en todas las cláusulas
except y deshaciendo todos los
cambios hechos en la base de datos.
Un saludo, y espero se entienda.