Ver Mensaje Individual
  #4  
Antiguo 17-12-2008
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Reputación: 21
defcon1_es Va por buen camino
Hola.
Yo lo que haría es capturar la excepción desde la aplicación,
con algo parecido a esto:

Código Delphi [-]
uses IB;
...
try
  ...
  insertquery.ExecSQL;
except
on E:Exception do
  ShowMessage('Error/Excepción FireBird: '+IntToStr(EIBInterBaseError(E).IBErrorCode)+#13#10#13#10+E.Message);
end;

Una vez que sepas el codigo de error que devuelve, puedes filtrar el mensaje:
Código Delphi [-]
uses IB;
...
try
  ...
  insertquery.ExecSQL;
except
on E:Exception do
  case EIBInterBaseError(E).IBErrorCode of
  $14000019: ShowMessage('Deadlock');
  $14000888:// se produjo la excepcion ERR_NO_TITULO   
    ShowMessage('El título no puede estar vacio');
end;

Lo ideal es crear un procedimiento o funcion para gestionar todos los mensajes de error de la aplicación, por ejemplo:
Código Delphi [-]
procedure Gestion_de_Errores(E: Exception);
begin
    if E is EIBInterBaseError
    then begin
      case EIBInterBaseError(E).IBErrorCode of
        $14000019: AvisoError('Aviso', 'Coincidencia en el uso del registro.' +#13+
                                       'Otro usuario lo tiene en uso.' +#13+
                                       'Inténtelo de nuevo.    -No es un error-'+#13+
                                       '---------------------------------------'+#13+
                                       'Error/Excepción FireBird: (' + E.Message + ')');
    ....
    ....
      end;
   end;
end;
Para luego usarla asi:
Código Delphi [-]
try
  ...
  insertquery.ExecSQL;
except
  on E:Exception do
    Gestion_de_Errores(E);
end;
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...

Última edición por defcon1_es fecha: 17-12-2008 a las 12:17:51.
Responder Con Cita