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)
-   -   Capturar error MYSQL (https://www.clubdelphi.com/foros/showthread.php?t=83624)

elrodrix 08-07-2013 15:51:35

Capturar error MYSQL
 
Como puedo capturar este error ? (ERROR 2013 de MYSQL) y lanzar un mensaje en DELPHI en vez de que MYSQL tire un este error.



Utilizo componentes ADO (Adoconnetion, Adostoredproc, datasource).

Mi idea es, en el evento BeforeOpen de cada componente Adostoredproc, capturar ese error (ese error salta cuando apago el router, desconecto el LAN, etc), y enviar un msj en DELPHI.

intenten algo asi

Código Delphi [-]
With AdoConnection1 do
    begin
      if AdoConnection1.State = [stClosed]  then
        begin
          try
            AdoConnection1.Connected:=True;
          except
            on E: Exception do
              begin
                ShowMessage(E.ClassName + ' Ocurrio un error : ' + E.Message);
              end;
          end;
          //raise Exception.Create('ERROR DE CONEXION DE BASE DE DATOS');
        end;
    end;

Pero no se trata de preguntar por el estado del AdoConnection (ya que si el componente se conectó a la base de datos correctamente, su STATE sigue siendo CONECTED por mas que apaque el ROUTER/SWITCH o desconecte el LAN).

Entonces mi idea es capturar los posibles errores de perdida de conexion de MYSQL y enviar un mensaje en DELPHI.

Como seria el procedimiento? Gracias y saludos.

Rockin 08-07-2013 17:11:35

Prueba a ponerlo en el evento onDisconnect del ADOConnection.

Saludos

elrodrix 08-07-2013 17:13:07

Cita:

Empezado por Rockin (Mensaje 463409)
Prueba a ponerlo en el evento onDisconnect del ADOConnection.

Saludos

Gracias. Ahora prueba y luego publico los resultados.

elrodrix 08-07-2013 17:22:14

Cita:

Empezado por Rockin (Mensaje 463409)
Prueba a ponerlo en el evento onDisconnect del ADOConnection.

Saludos

Acabo de probar y no paso nada.

A mi parecer, creo que no iria en el evento onDisconnect del ADOConnection, ya que, por ejemplo si desconecto el cable LAN, el ADOConnection no va a interpretar como que se desconecto el cable (a mi parecer, creo).

Para guiarte (quizas sirva):

Mi programa, al ejecutar, hay que hacer click en "conectar a bd", en ese evento mando la cadena de conexion al ADOConnection y pongo TRUE el CONECTED.

Esto quiere decir que a partir de ahi, la propiedad Connected queda en True.

Insisto con mi caso particular, si por ejemplo desconecto el cable LAN o se funde la placa de red, la propiedad Connected del ADOConnection sigue en True. y cuando quiero seguir trabajando, obviamente MYSQL me envia mensajes de error que se perdio la conexion.

Ese me mensaje, en ese caso particular, es el que no logro capturar.

Gracias y saludos.

elrodrix 08-07-2013 20:47:27

Listo, pude solucionar este pequeño problema, agregando un TApplicationEvents en el Form Principal y con el siguiente codigo en el evento On Exception

Código Delphi [-]
//procedimiento para capturar las fallas en la perdida de conexion de la base de datos
//agregar ComObj en uses del FORM
procedure TFMain.ApplicationEvents1Exception(Sender: TObject; E: Exception);
var
  EO:EOLEException;
begin
  if E is EOLEException then
  begin
    EO:=EOLEException(E);
    if EO.ErrorCode = -2147467259 then
      //error de conexion (disconnected)
      begin
        try
          try
            DM1.ADOConnection1.Close;
          except;
          end;
          DM1.ADOConnection1.Open;
          ShowMessage('FALLA EN LA CONEXION A LA BASE DE DATOS - Reestableciendo, vuelva a intentar!');
        except
          on E:Exception do
            ShowMessageFmt('FALLA EN LA CONEXION A LA BASE DE DATOS!.  '
            + 'Por favor, intente luego!.'#13'Error message: %s', [E.Message]);
          end;
      end
      else
        ShowMessage(E.Message + ' ' + IntToStr(EO.ErrorCode));
    end
  else
    ShowMessage(E.ClassName + #13 + E.Message);
end;

Espero que les sirva. Gracias y Saludos

vroa74 12-07-2013 03:03:10

A mi me ocurria eso, cuando cambie de componente me dejo de pasar los problemas de conexion, recomnemdacion zoezlib, myDac, Unidac, firedac.


La franja horaria es GMT +2. Ahora son las 19:17:43.

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