Cita:
Empezado por gorsan
Ya. El sistema maneja todas las excepciones pero yo lo que quiero es lanzar mi propia excepcion para que el usuario la vea tal como yo quiero que la vea y lanzarle el mensaje que yo planifique. Da mas sensacion de control.
|
Eso que tu propones yo lo hice con el BDE, capturando la excepcion desde delphi, aqui esta el codigo para que te hagas una idea. Pero en Firebird he dejado que el manejador de base de datos se encargue de todo eso, menos trabajo para el programador.
Código Delphi
[-]try
Result := True;
T.Active := False;
T.Exclusive := False;
T.DatabaseName := cRutaDatos;
T.TableName := NT;
T.IndexName := Indices;
T.Active := True;
except
on E: EDBEngineError do
begin
ErrorCode := E.Errors[0].ErrorCode;
case ErrorCode of
DBIERR_SYSFILEOPEN,
DBIERR_SYSFILEIO,
DBIERR_SYSCORRUPT,
DBIERR_NOCONFIGFILE,
DBIERR_CFGCANNOTWRITE,
DBIERR_CFGMULTIFILE,
DBIERR_REENTERED,
DBIERR_CANTFINDIDAPI,
DBIERR_CANTLOADIDAPI,
DBIERR_CANTLOADLIBRARY,
DBIERR_TEMPFILEERR,
DBIERR_MULTIPLEIDAPI,
DBIERR_SHAREDMEMCONFLICT:
msgError( msErrorSistema + NT );
DBIERR_LOCKED,
DBIERR_UNLOCKFAILED,
DBIERR_FILEBUSY,
DBIERR_DIRBUSY,
DBIERR_FILELOCKED,
DBIERR_DIRLOCKED,
DBIERR_ALREADYLOCKED,
DBIERR_NOTLOCKED,
DBIERR_LOCKTIMEOUT,
DBIERR_GROUPLOCKED,
DBIERR_LOSTTBLLOCK,
DBIERR_LOSTEXCLACCESS,
DBIERR_NEEDEXCLACCESS,
DBIERR_RECGROUPCONFLICT,
DBIERR_DEADLOCK,
DBIERR_ACTIVETRAN,
DBIERR_NOACTIVETRAN,
DBIERR_RECLOCKFAILED,
DBIERR_OPTRECLOCKFAILED,
DBIERR_OPTRECLOCKRECDEL,
DBIERR_ENLISTFAILED,
DBIERR_NETFILELOCKED,
DBIERR_NETMULTIPLE:
msgError( msTablaBloqueada + NT );
DBIERR_FILECORRUPT: msgError(msTablaCorrupta + NT);
DBIERR_INDEXCORRUPT: msgError(msIndiceCorrupto +NT);
DBIERR_READERR: msgError(msErrordeLectura +NT);
DBIERR_DIRNOACCESS: msgError(msSinAccesoaDirectorio + NT);
DBIERR_FILENOACCESS: msgError(msSinAccesoaArchivo + NT);
DBIERR_NOMEMORY: msgError(msSinMemoria + NT);
DBIERR_OPENTBLLIMIT: msgError(msMuchasTablasAbiertas + NT);
DBIERR_NOSHAREDMEMORY: msgError(msSinMemoriaCompartida + NT);
DBIERR_INVALIDFILENAME: msgError(msNombreArchivoIncorrecto + NT);
DBIERR_NOSUCHINDEX: msgError(msNombreIndiceIncorrecto + NT);
else msgError(msErrorDesconocido + E.Message);
end;
Result := False;
end;
end;