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 17-06-2007
JerS JerS is offline
Miembro
 
Registrado: may 2005
Ubicación: Venezuela
Posts: 254
Poder: 19
JerS Va por buen camino
Excepción EOleException, Mysql has gone away...

Amigos les voy a pegar el siguiente codigo sencillo para ver si me entienden:

Código Delphi [-]
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Timer1: TTimer;
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ADODataSet1.Close;
ADODataSet1.CommandText:=('SELECT curtime()');
ADODataSet1.Open;
label1.Caption:=ADODataSet1.Recordset.Fields.Item[0].value;
end;

end.


por lo que pueden ve es un simple Ttimer con una opcion de que cada segundo me verifique la hora con una sentencia SQL, ok todo funciona muy bien hasta que paro el servicio de Mysql, es normal que me aparezca la siguiente Exception: " EOleException, Mysql has gone away".. perfecto, ahora yo voy y reactivo el sercvicio de mysql, cuando la aplicacion intenta hacer su consulta mysql ya con el servicio corriendo me sigue dando la exception. Para que pueda reconectar debo cerrar la aplicacion y volverla abrir... ahora mi pregunta es la siguiente, hay alguna forma de volver a conectar a la base de dato sin tener que reiniciar mi aplicación.
__________________
La vida es un simple pero complejo If

J=rS
Responder Con Cita
  #2  
Antiguo 17-06-2007
Slash Slash is offline
Miembro
 
Registrado: abr 2004
Posts: 36
Poder: 0
Slash Va por buen camino
Si, debes revisar el estado en el que queda tu conexion y volver a abrirla. Tambien podes usar un try except y ante el error voler a abrirla. Esto debería solucionar el problema, espero que funcione.

Saludos.
Responder Con Cita
  #3  
Antiguo 17-06-2007
Avatar de rruz
[rruz] rruz is offline
Miembro Premium
 
Registrado: jun 2006
Posts: 146
Poder: 18
rruz Va por buen camino
intenta esto

Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
begin
      try
        if not ADOConnection1.Connected then
        ADOConnection1.Connected:=True;
        ADODataSet1.Close;
        ADODataSet1.CommandText:=('SELECT curtime()');
        ADODataSet1.Open;
        label1.Caption:=ADODataSet1.Recordset.Fields.Item[0].value;
      except on e : exception do
        //ShowMessage(e.Message);
      end;
end;

Saludos
Responder Con Cita
  #4  
Antiguo 17-06-2007
JerS JerS is offline
Miembro
 
Registrado: may 2005
Ubicación: Venezuela
Posts: 254
Poder: 19
JerS Va por buen camino
si yo puedo tranquilamente capturar la exception con un try pero lo que no se es que hacer para que vuelva a conectar a la base de dato Ejm:

Código Delphi [-]
sw:=false;
try
ADODataSet1.Close;
ADODataSet1.CommandText:=('SELECT curtime()');
ADODataSet1.Open;
label1.Caption:=ADODataSet1.Recordset.Fields.Item[0].value;exception
on EOleException Do
sw:=true;
End;
if sw=false Then
adoconnection1.connected:=true;

ok capturo la exception e intento conectar de nuevo mi coneccion pero es inutil, sigue mostrando el error que les comente...
Recuerden que la idea es retomar la coneccion como si nada ubiece pasado, que el usuario nisiquiera se alla dado cuenta que el servicio de mysql se cayo
__________________
La vida es un simple pero complejo If

J=rS

Última edición por JerS fecha: 17-06-2007 a las 05:22:02.
Responder Con Cita
  #5  
Antiguo 17-06-2007
Slash Slash is offline
Miembro
 
Registrado: abr 2004
Posts: 36
Poder: 0
Slash Va por buen camino
Cita:
Empezado por rruz
Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if not ADOConnection1.Connected then
begin
ADOConnection1.Connected:=True;
ADODataSet1.Close;
ADODataSet1.CommandText:=('SELECT curtime()');
ADODataSet1.Open;
label1.Caption:=ADODataSet1.Recordset.Fields.Item[0].value;
end else
begin
ADOConnection1.Open
end;
end;
Con esto debería funcionar, fijate donde pones el "ADOConnection1.Open".
Podes usarlo en la excepción en vez de en el else. Además como lo tenes en un timer cuando se levante la DB se va a volver a conectar sin problemas. Si queres, para que no te salga el cartel de error podes poner todo el bloque en una excepcion y si no se conecta no haces nada, total volves a intentar cuando se ejecute el timer.
Saludos y cualquier duda prgunta tranquilo.
Responder Con Cita
  #6  
Antiguo 18-06-2007
JerS JerS is offline
Miembro
 
Registrado: may 2005
Ubicación: Venezuela
Posts: 254
Poder: 19
JerS Va por buen camino
Cita:
Empezado por Slash
Con esto debería funcionar, fijate donde pones el "ADOConnection1.Open".
Podes usarlo en la excepción en vez de en el else. Además como lo tenes en un timer cuando se levante la DB se va a volver a conectar sin problemas. Si queres, para que no te salga el cartel de error podes poner todo el bloque en una excepcion y si no se conecta no haces nada, total volves a intentar cuando se ejecute el timer.
Saludos y cualquier duda prgunta tranquilo.
amigo, le coloco la opcion de Adoconnection1.open pero nada me sigue apareciendo la excepcion, y me fijo en el debuger y adoconnection1.connected es igual a true, de verdad nose que esta pasando
__________________
La vida es un simple pero complejo If

J=rS
Responder Con Cita
  #7  
Antiguo 18-06-2007
Slash Slash is offline
Miembro
 
Registrado: abr 2004
Posts: 36
Poder: 0
Slash Va por buen camino
No puede ser que nos gane una conexión. Proba lo siguiente, en vez de preguntar por Connected pregunta por la propiedad State. Los posibles valores son:

stClosed: Connection object is inactive and not connected to a database.
stOpen: Connection object is inactive, but connected to a database.
stConnecting: Connection object is in the process of connecting to a database.
stExecuting: Connection object is currently executing.
stFetching: Connection object is retrieving data from the database.

Con esto vamos a saber el estado específico de la conexion de todos modos no entiendo porque Connected sigue en true. Proba preguntanto por State (para ver en que estado esta quedando la conexion) y despues probá en el except cerrar y abrir la conexión (ejecuta un close y luego un open).
Saludos y seguí posteando que ya lo vamos a resolver.
Responder Con Cita
  #8  
Antiguo 19-06-2007
JerS JerS is offline
Miembro
 
Registrado: may 2005
Ubicación: Venezuela
Posts: 254
Poder: 19
JerS Va por buen camino
Cita:
Empezado por Slash
No puede ser que nos gane una conexión. Proba lo siguiente, en vez de preguntar por Connected pregunta por la propiedad State. Los posibles valores son:

stClosed: Connection object is inactive and not connected to a database.
stOpen: Connection object is inactive, but connected to a database.
stConnecting: Connection object is in the process of connecting to a database.
stExecuting: Connection object is currently executing.
stFetching: Connection object is retrieving data from the database.

Con esto vamos a saber el estado específico de la conexion de todos modos no entiendo porque Connected sigue en true. Proba preguntanto por State (para ver en que estado esta quedando la conexion) y despues probá en el except cerrar y abrir la conexión (ejecuta un close y luego un open).
Saludos y seguí posteando que ya lo vamos a resolver.

Amigo Slash, el state siempre me retorna StOpen, de verdad me tiene , se muestra como si estubiece conectado pero me sigue dando el problema de la excepcion
__________________
La vida es un simple pero complejo If

J=rS
Responder Con Cita
  #9  
Antiguo 19-06-2007
Slash Slash is offline
Miembro
 
Registrado: abr 2004
Posts: 36
Poder: 0
Slash Va por buen camino
mmm... que rabia... te pido, por favor, me pases el numero de error. Voy a averiguar por otro lado a ver si alguien nos puede ayurar. Mientras proba, cuando te de el error, cerrar primero la conexion y despues volverla a abrir a ver que pasa.
Voy a reproducir el codigo a ver si puedo generar el error.
Responder Con Cita
  #10  
Antiguo 21-06-2007
JerS JerS is offline
Miembro
 
Registrado: may 2005
Ubicación: Venezuela
Posts: 254
Poder: 19
JerS Va por buen camino
Cita:
Empezado por Slash
mmm... que rabia... te pido, por favor, me pases el numero de error. Voy a averiguar por otro lado a ver si alguien nos puede ayurar. Mientras proba, cuando te de el error, cerrar primero la conexion y despues volverla a abrir a ver que pasa.
Voy a reproducir el codigo a ver si puedo generar el error.
Amigo Slash ... no he podido dar con el error, pero bueno estoy dejando para despues dicho error :S
__________________
La vida es un simple pero complejo If

J=rS
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
Me he atascado en el siguiente código David PHP 3 26-02-2007 00:15:52
siguiente registro (mysql) Cosgaya PHP 2 11-07-2006 00:59:40
sabel el siguiente tab? raudelink Varios 2 26-04-2005 01:40:28
encontrar el siguiente en ado jzginez Conexión con bases de datos 1 21-05-2004 11:42:08
como consulto lo siguiente noe SQL 1 12-02-2004 03:32:42


La franja horaria es GMT +2. Ahora son las 06:02:04.


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