Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Capturar excepción Firebird en app cliente (https://www.clubdelphi.com/foros/showthread.php?t=71295)

lucasarts_18 11-12-2010 21:47:03

Capturar excepción Firebird en app cliente
 
Estimados.

Me encuentro desarrollando unas validaciones mediante unos SP desde Firebird, ya que me permite controlar de manera más fácil las reglas de negocio.

Pongo acá un ejemplo.

Código SQL [-]
begin
  select saldo_clie,
         monto_autorizado
  from cliente
  where id_cliente = :p_id_cliente
  into :v_saldo, :v_monto_aut;
  if (not v_monto_aut > 0) then
     exception monto_no_aut;
  if (not v_saldo >= p_monto) then
     exception sobrepasa_saldo;
end

y desde delphi lo capturo de la siguiente forma.


Código Delphi [-]
begin
   try
   begin
      if Edt_CCorriente.Text <> '' then
      begin
         ZSP_ValSaldoClie.ParamByName('p_id_cliente').AsInteger := f_IdCliente;
         ZSP_ValSaldoClie.ParamByName('p_monto').AsInteger := StrToInt(Edt_CCorriente.Text);
         ZSP_ValSaldoClie.ExecProc;
      end;
      if f_MontoPago <> 0 then
         MessageDlg('Monto no cuadra con total documento', mtError, [mbOk], 0)
      else
         ModalResult := MrOk;
   end
   except on E: Exception do
      MessageDlg(E.Message , mtError, [mbOk], 0);
   end
end;



El problema que cuando lo muestro desde delphi me aparece la siguiente leyenda.

Código:

SQL Error:  exception 14 SOBREPASA_SALDO !Sobrepasa saldo permitido de la Cta Corriente! At procedure 'SP_VAL_MONTOAUT'. Error Code: -836. exception  The SQL: EXECUTE PROCEDURE SP_VAL_MONTOAUT(?,?);
Siendo que lo unico que quiero mostrar es "!Sobrepasa saldo permitido de la Cta Corriente!"

Existe la manera de manipular ese String que devuelve Firebird.?

Gracias...

Casimiro Notevi 11-12-2010 22:08:00

Se me ocurre con una funtion más o menos así:

Código Delphi [-]

function  FormateaTextoExcepcion (cCadena : string) : string; 
var 
    i, l : integer; 
begin 
    i := Pos('exception 1', cCadena); 
    l := length ('exception 1'); 
    if i > 0 then 
        Result := Copy (cCadena, i+l+1, length(cCadena)-(i+l+1)+1) 
    else 
        Result := cCadena; 
end;

lucasarts_18 17-12-2010 14:41:01

Estimado Casimiro.

No había tenido tiempo de probar tu solución, maldita pega que me amarran a VB6, pero en fin, este proyecto es en delphi y y es otra cosa, veré como anda lo que me propones.

Gracias...

lucasarts_18 06-01-2011 02:24:32

Estimado Casimiro:

He resuelto el tema modificando tu función.

Código Delphi [-]
function  FormateaTextoExcepcion (cCadena : string) : string; 
var 
    i, l, k : integer;
    temp : String;
begin
    i := Pos('exception 1', cCadena);
    l := length ('exception 1');
    if i > 0 then
    begin
        temp := Copy(cCadena, i+l+1, length(cCadena));
        k := Pos ('At', temp);
        Result := Copy(temp, 0, k - 1);
    end
    else
        Result := cCadena;
end;


Ahora el mensaje lo muestra de la siguiente manera.

SOBREPASA_SALDO !Sobrepasa saldo permitido de la Cta Corriente!

Lo unico que me faltaría sería como sacar el nombre de la excepción SOBREPASA_SALDO, estoy intentando buscar un lógica de como sacar ese nombre, la idea es que me sirva para cualquier excepción que maneje desde Firebird.

Gracias casimiro :)


La franja horaria es GMT +2. Ahora son las 19:41:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi