Supongo que si no sigue es porque
la excepción que salta no es la que esperas en el WHEN
EXCEPCION DO...
Prueba a poner WHEN ANY DO...
O prueba a ver cuál es la excepción que llega con un ShowMessage.
Código Delphi
[-]sentencia := 'EXECUTE PROCEDURE PROCESA_VISITA (variables)';
try
Q1.Close;
Q1.SQL.Clear;
Q1.SQL.Add(sentencia);
Q1.Prepare;
Q1.ExecQuery; Q1.Transaction.CommitRetaining;
Q1.FreeHandle;
except
on e:exception do
begin
Showmessage(e.message); Q1.Transaction.Rollback;
Q1.FreeHandle;
raise;
end;
end;
Por más que le digas que haga un commit, si ha saltado una excepción no grabará los datos.
Si quieres envíanos el código de tu procedimiento, para que le hechemos una mirada.
Pero como dije anteriormente, quizás sea mejor filtrar los casos para los que se dá la excepción.