Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-12-2010
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
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 = _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...
__________________
No todo es como parece ser...
Responder Con Cita
  #2  
Antiguo 11-12-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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;
Responder Con Cita
  #3  
Antiguo 17-12-2010
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
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...
__________________
No todo es como parece ser...
Responder Con Cita
  #4  
Antiguo 06-01-2011
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
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
__________________
No todo es como parece ser...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capturar una excepcion en Delphi producida por FIREBIRD ronson Firebird e Interbase 21 01-09-2010 22:18:10
Cómo puedo capturar una excepción en delphi? Fenix_Dark OOP 3 29-04-2008 15:17:47
Capturar informacion en una excepción firebird GuerreroDelphi Conexión con bases de datos 6 20-08-2007 02:22:59
Capturar la excepcion EAccessViolation beatriz g Varios 2 25-08-2006 11:49:16
Capturar excepcion formato datos DBGrid manolop Firebird e Interbase 1 14-05-2005 00:43:00


La franja horaria es GMT +2. Ahora son las 02:19:21.


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
Copyright 1996-2007 Club Delphi