Página principal
Artículos y trucos
Catálogo de productos
Ejemplos y descargas
Mis libros
Cursos de formación
Investigación y desarrollo
Libros recomendados
Mis páginas favoritas
Acerca del autor
 
En colaboración con Amazon
 
Intuitive Sight

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;