Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Controlar excepción ZEOS (https://www.clubdelphi.com/foros/showthread.php?t=71468)

DriverOp 20-12-2010 23:05:51

Controlar excepción ZEOS
 
Estoy usando ZEOS para conectar a una base de datos MySQL.
Tengo este código:
Código Delphi [-]
  ZQuery1.Active:=false;
  ZQuery1.SQL.Clear;
  ZQuery1.SQL.AddStrings(Memo1.Lines);
  try
    ZQuery1.Active:=true;
  except
// Y acá qué pongo?
  end;
  Label1.Caption:=Estado[ZQuery1.Active];
Necesito controlar cualquier error que se produzca al ejecutar una sentencia SQL pero por más que busco aquí como en el resto de Internet la documentación de ZEOS es de escasa a nula.
Sé que MySQL devuelve un número de error, necesito saber cómo obtener ese número usando ZEOS.
No puedo cambiar de componentes porque estoy reparando una aplicación que ya los usa.
Gracias.

microbiano 21-12-2010 00:24:17

mensaje
 
para controlar los errores puedes hacerlo asi
Código Delphi [-]
try
//instruccion a ejecurar
except
     on E:EOleException do
      begin
      MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
      end;
   end;

de esta forma te captura el codigo de error y el mensaje

DriverOp 21-12-2010 13:15:23

Gracias por responder pero ZEOS no genera una EOleException.

DriverOp 22-12-2010 13:22:15

Parece que me he topado con la pesadilla "Open Source". I Hate Open Source.

rgstuamigo 22-12-2010 21:24:15

Cita:

Empezado por DriverOp (Mensaje 385533)
Gracias por responder pero ZEOS no genera una EOleException.

Ok, pero se puede declarar la variable "E" de tipo "Exception" que es la clase Madre de todas las clases que se encargan de las Excepciones en delphi y así lograr lo que uno quiera; sea cual sea el tipo y Clase de excepcion que se genere igual lo capturás ;) ; eso es lo bello del polimorfismo.:rolleyes::D
Algo así:
Código Delphi [-]
 try
//instruccion a ejecurar
except
     on E:Exception do //<- Mi objeto "E" es de tipo "Exception" 
      begin
      MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
      end;
   end;
Saludos...:)

DriverOp 24-12-2010 14:43:59

He hecho algo mejor.
Me he zambullido en el código de ZEOS y encontré dónde está declarada la excepción que se eleva cada vez que hay un error. La clase es EZSQLException y está declarada en ZDbcIntfs. Agregando esa unidad a la uses ya es posible acceder al objeto de error propio de ZEOS. Luego me ha quedado así:
Código Delphi [-]
  ZQuery1.Active:=false;
  ZQuery1.SQL.Clear;
  ZQuery1.SQL.AddStrings(Memo1.Lines);
  try
    ZQuery1.Active:=true;
  except
        on E:EZSQLException do
            Memo2.Lines.Add('Error: '+IntToStr(E.ErrorCode)+' '+E.Message);
  end;
También sirve para controlar los errores de conexión:
Código Delphi [-]
  try
    ZConnection1.Connect;
  except
    on E:EZSQLException do
        Memo2.Lines.Add('Error: '+IntToStr(E.ErrorCode)+' '+E.Message);
  end; // try
Espero que esto le sirva al que venga después de mi :)

microbiano 24-12-2010 18:08:30

siempre si genera exception jejejejeje

DriverOp 27-12-2010 14:02:35

Cita:

Empezado por microbiano (Mensaje 385783)
siempre si genera exception jejejejeje

Cuando se usa el driver de MySQL sí las genera ;)


La franja horaria es GMT +2. Ahora son las 05:17:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi