{
===============================================================================
  Copyright (©) 2002. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión: 03-11-2002
  Versión actual: 1.0.0
  Fecha versión actual: 03-11-2002
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit Excepciones;

interface

uses
  sysutils, IB, db;

procedure TratarExcepcion(E: Exception); overload;
procedure TratarExcepcion(E: EIBError); overload;

implementation
uses
  Mensajes, IBErrorCodes;

resourcestring
  fmtMsgIBGeneral = 'SQLCode: %d'+ #10#13 + 'IBNumber: %d' + #10#13 + '%s';
  fmtMsgIBEspecifico = '%s' + #10#13 + #10#13 + 'SQLCode: %d'+ #10#13 + 'IBNumber: %d' + #10#13 + '%s';
  msgErrorConexion = 'No se puede establecer conexión con el servidor.';
  msgLoginIncorrecto = 'No se puede iniciar la sesión. Compruebe que su nombre de usuario y su contraseña son correctos y repita la operacion.';
  msgBDSoloLectura = 'Esta base de datos es sólo de lectura. No se puede realizar ninguna modificación en los datos.';
  msgFichBDSoloLectura = 'No se puede iniciar la sesión. El fichero de la base de datos tiene activado el atributo de sólo lectura.';
  msgClavePrimaria = 'Ya existe otro registro con el mismo código.';
  msgBDShutdown = 'La base de datos está en mantenimiento. Inténtelo más tarde.';

procedure TratarExcepcion(E: Exception);
begin
  if E.Message <> 'Control '''' has no parent window' then
    VerMensaje(E.Message);
end;

procedure TratarExcepcion(E: EIBError);
begin
  case E.IBErrorCode of
    isc_network_error         : VerMensajeFmt(fmtMsgIBEspecifico, [msgErrorConexion, E.SQLCode, E.IBErrorCode, E.Message]);
    isc_login                 : VerMensajeFmt(fmtMsgIBEspecifico, [msgLoginIncorrecto, E.SQLCode, E.IBErrorCode, E.Message]);
    isc_read_only_database    : VerMensajeFmt(fmtMsgIBEspecifico, [msgBDSoloLectura, E.SQLCode, E.IBErrorCode, E.Message]);
    isc_no_priv               : VerMensajeFmt(fmtMsgIBEspecifico, [msgFichBDSoloLectura, E.SQLCode, E.IBErrorCode, E.Message]);
    isc_unique_key_violation  : VerMensajeFmt(fmtMsgIBEspecifico, [msgClavePrimaria, E.SQLCode, E.IBErrorCode, E.Message]);
    isc_shutdown              : VerMensajeFmt(fmtMsgIBEspecifico, [msgBDShutdown, E.SQLCode, E.IBErrorCode, E.Message]);
  else
    VerMensajeFmt(fmtMsgIBGeneral, [E.SQLCode, E.IBErrorCode, E.Message]);
  end;
end;

end.
