Extrayendo el SQLCODE
Cada sistema de bases de datos define una serie de códigos de error para cuando las operaciones que deben realizar fallan. Estos códigos son específicos de cada formato: InterBase tiene los suyos, Oracle también, MS SQL Server no podía ser menos... En ocasiones, puede que le interese recuperar este código (llamado sqlcode) para tomar alguna decisión. Cuando una operación sobre una base de datos falla en Delphi, se genera una excepción del tipo general EDatabaseError. Si el error ha sido provocado por el BDE, y no por la capa de la VCLDB con la que Delphi encapsula las llamadas al Motor de Datos, la excepción pertenece al tipo particular EDBEngineError. Y dentro de los objetos de esta clase puede encontrarse el sqlcode, mezclado con la interpretación independiente de la plataforma que hace el BDE de la situación de error. La siguiente función bucea dentro de una excepción e intenta encontrar un error generado en el servidor para devolverlo como valor de retorno; si no lo encuentra, devuelve el código -1:
function GetSqlCode(E: EDatabaseError): Integer;
var
I: Integer;
begin
Result := -1;
if E is EDBEngineError then
with EDBEngineError(E) do
for I := 0 to ErrorCount - 1 do
if Errors[I].NativeError <> 0 then
begin
Result := Errors[I].NativeError;
Exit;
end;
end;
|