PDA

Ver la Versión Completa : tratando de interceptar excepcion


Cañones
15-05-2007, 20:51:18
procedure TfrmFacturacion.CERRARTURNO1Click(Sender: TObject);
var
E:EDataBaseError;
begin
try
DataModule1.IBQueryMarcTurno.Close;
DataModule1.IBQueryMarcTurno.Open;
except
on E:exception do
ShowMessage(e.Message);
end;
end;


Aca lo que estoy tratando de hacer es que el query accione un trigger que me devuelve una exception. Hasta aca funciona, pero como hago para distingir una exception de otra cuando el Trigger me devuelve varias.
Estoy con Delphi 6 y Firebird 1.5.
La Exception en la base se llama EXC_TURNOS_COMPLETOS
Y EL NUMERO DE EXCEPCION ES 2.
Desde ya, muchas gracias.

Lepe
15-05-2007, 22:13:43
¿Qué componentes de acceso usas? MDO, FIBPLUS, IBX... dependiendo de esos, miras las excepciones en su código fuente, así puedes identificarlas.

Saludos

Cañones
15-05-2007, 22:30:59
IBQuery?? a eso te referis?
Disculpa, pero no tengo mucha idea de esto.
Saludos.

Delphius
15-05-2007, 22:44:20
A lo que Lepe hace referencia es que te fijes en código (o en la ayuda) que excepciones tiene controladas el/los componente/s que usas para acceder a tu base de datos.

Si deseas detectar varios tipos de excepciones debes declarar en el listado de except cada tipo de excepción:


on E: Tipo_excepcion_1
....
on E: Tipo_excepcion_n
...
end;


Según veo estas usando IBQuery... eso me dice que estas empleando los componentes IBX o de la paleta Interbase (para mayor referecia) Por lo que deberás fijarte en el código fuente que excepciones están contempladas para estos.

A simple búsqueda: yo veo:

EIBInterBaseError = class(EIBError);
EIBInterBaseRoleError = class(EIBError);
EIBClientError = class(EIBError);

TIBDataBaseErrorMessage = (ShowSQLCode,
ShowIBMessage,
ShowSQLMessage);
TIBDataBaseErrorMessages = set of TIBDataBaseErrorMessage;
TIBClientError = (
ibxeUnknownError,
ibxeInterBaseMissing,
ibxeInterBaseInstallMissing,
ibxeIB60feature,
ibxeNotSupported,
ibxeNotPermitted,
ibxeFileAccessError,
ibxeConnectionTimeout,
ibxeCannotSetDatabase,
ibxeCannotSetTransaction,
ibxeOperationCancelled,
ibxeDPBConstantNotSupported,
ibxeDPBConstantUnknown,
ibxeTPBConstantNotSupported,
ibxeTPBConstantUnknown,
ibxeDatabaseClosed,
ibxeDatabaseOpen,
ibxeDatabaseNameMissing,
ibxeNotInTransaction,
ibxeInTransaction,
ibxeTimeoutNegative,
ibxeNoDatabasesInTransaction,
ibxeUpdateWrongDB,
ibxeUpdateWrongTR,
ibxeDatabaseNotAssigned,
ibxeTransactionNotAssigned,
ibxeXSQLDAIndexOutOfRange,
ibxeXSQLDANameDoesNotExist,
ibxeEOF,
ibxeBOF,
ibxeInvalidStatementHandle,
ibxeSQLOpen,
ibxeSQLClosed,
ibxeDatasetOpen,
ibxeDatasetClosed,
ibxeUnknownSQLDataType,
ibxeInvalidColumnIndex,
ibxeInvalidParamColumnIndex,
ibxeInvalidDataConversion,
ibxeColumnIsNotNullable,
ibxeBlobCannotBeRead,
ibxeBlobCannotBeWritten,
ibxeEmptyQuery,
ibxeCannotOpenNonSQLSelect,
ibxeNoFieldAccess,
ibxeFieldReadOnly,
ibxeFieldNotFound,
ibxeNotEditing,
ibxeCannotInsert,
ibxeCannotPost,
ibxeCannotUpdate,
ibxeCannotDelete,
ibxeCannotRefresh,
ibxeBufferNotSet,
ibxeCircularReference,
ibxeSQLParseError,
ibxeUserAbort,
ibxeDataSetUniDirectional,
ibxeCannotCreateSharedResource,
ibxeWindowsAPIError,
ibxeColumnListsDontMatch,
ibxeColumnTypesDontMatch,
ibxeCantEndSharedTransaction,
ibxeFieldUnsupportedType,
ibxeCircularDataLink,
ibxeEmptySQLStatement,
ibxeIsASelectStatement,
ibxeRequiredParamNotSet,
ibxeNoStoredProcName,
ibxeIsAExecuteProcedure,
ibxeUpdateFailed,
ibxeNotCachedUpdates,
ibxeNotLiveRequest,
ibxeNoProvider,
ibxeNoRecordsAffected,
ibxeNoTableName,
ibxeCannotCreatePrimaryIndex,
ibxeCannotDropSystemIndex,
ibxeTableNameMismatch,
ibxeIndexFieldMissing,
ibxeInvalidCancellation,
ibxeInvalidEvent,
ibxeMaximumEvents,
ibxeNoEventsRegistered,
ibxeInvalidQueueing,
ibxeInvalidRegistration,
ibxeInvalidBatchMove,
ibxeSQLDialectInvalid,
ibxeSPBConstantNotSupported,
ibxeSPBConstantUnknown,
ibxeServiceActive,
ibxeServiceInActive,
ibxeServerNameMissing,
ibxeQueryParamsError,
ibxeStartParamsError,
ibxeOutputParsingError,
ibxeUseSpecificProcedures,
ibxeSQLMonitorAlreadyPresent,
ibxeCantPrintValue,
ibxeEOFReached,
ibxeEOFInComment,
ibxeEOFInString,
ibxeParamNameExpected,
ibxeSuccess,
ibxeDelphiException,
ibxeNoOptionsSet,
ibxeNoDestinationDirectory,
ibxeNosourceDirectory,
ibxeNoUninstallFile,
ibxeOptionNeedsClient,
ibxeOptionNeedsServer,
ibxeInvalidOption,
ibxeInvalidOnErrorResult,
ibxeInvalidOnStatusResult,
ibxeDPBConstantUnknownEx,
ibxeTPBConstantUnknownEx,
ibxeUnknownPlan,
ibxeFieldSizeMismatch,
ibxeEventAlreadyRegistered,
ibxeStringTooLarge
);

Saludos,

vtdeleon
16-05-2007, 01:52:39
A veces el mismo mensaje te dice la Clase del error.

Saludos