Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-07-2013
elrodrix elrodrix is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 32
Poder: 0
elrodrix Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 08-07-2013
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 21
Rockin Va por buen camino
Prueba a ponerlo en el evento onDisconnect del ADOConnection.

Saludos
Responder Con Cita
  #3  
Antiguo 08-07-2013
elrodrix elrodrix is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 32
Poder: 0
elrodrix Va por buen camino
Cita:
Empezado por Rockin Ver Mensaje
Prueba a ponerlo en el evento onDisconnect del ADOConnection.

Saludos
Gracias. Ahora prueba y luego publico los resultados.
Responder Con Cita
  #4  
Antiguo 08-07-2013
elrodrix elrodrix is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 32
Poder: 0
elrodrix Va por buen camino
Cita:
Empezado por Rockin Ver Mensaje
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.
Responder Con Cita
  #5  
Antiguo 08-07-2013
elrodrix elrodrix is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 32
Poder: 0
elrodrix Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 12-07-2013
Avatar de vroa74
vroa74 vroa74 is offline
Miembro
 
Registrado: jul 2006
Posts: 254
Poder: 18
vroa74 Va por buen camino
Question

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



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capturar mensajes que devuelve la BD MySQL Palmiro Conexión con bases de datos 1 28-01-2009 14:56:13
Capturar los mensajes de mysql en delphi jjaen26 MySQL 0 21-12-2006 06:52:28
capturar error gulder Conexión con bases de datos 1 09-06-2006 18:51:20
capturar nro error Ricardo Alfredo MS SQL Server 3 22-05-2006 17:52:55
Capturar error bbjb OOP 3 12-04-2005 19:19:46


La franja horaria es GMT +2. Ahora son las 20:15:14.


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
Copyright 1996-2007 Club Delphi