PDA

Ver la Versión Completa : Perdida de Conexion


Libarra
25-03-2008, 07:05:36
Que al compañeros.. expongo lo siguiente realice una aplicacion con DElphi 7 donde se conecta por el puerto serial a un PBX y obtiene el detallado de las llamdas.. una vez que lo obtiene le doy formato y lo distribuyo en campos de una BD en Mysql usando los Zeos components para hacer la conexion Delphi-Mysql todo marcha.. bien.. mientras haya actividad.. pero llega un momento en que el PBX ya no recibe llamadas sobre todo en fines de semana y la conexion se pierde..

implemente.. un timer. que me este checando la conexion asi el server.. y si hay perdida.. que la levante de nuevo.. este es el codigo que uso

procedure TfrmPrincipal.Timer1Timer(Sender: TObject);
begin
if not cn.Connected then
cn.Connected:=true;
end;

Pero creo que no me ha funcionado puesto que la conexion despues de varias hras se pierde..

Mi pregunta.. es ¿Existe alguna otra manera de checar si sta conectado usando zeos.. ??

Gracias!

ContraVeneno
25-03-2008, 16:35:38
Puedes verificar en los eventos "BeforeDisconnect" o "AfterDisconnect", lo mismo para "BeforeConnect", "AfterConnect" de tu componente "CN"

duilioisola
25-03-2008, 16:35:51
Para chequear que estás conectado, quizás deberías hacer algo en la base de datos, dentro de un try ... except.

Por ejemplo

QueryDummy es un query que hace algo simple
select count(*) from tabla
procedure TfrmPrincipal.Timer1Timer(Sender: TObject);
begin
try
with QueryDummy do
begin
if no Transaction.InTransaction do Transaction.StartTransaction;
ExecQuery;
Transaction.Commit;
end;
except
{si hubo error, desconecto y conecto nuevamente}
if cn.Connected then
cn.Connected := False;
if not cn.Connected then
cn.Connected := True;
end;
end;

Libarra
25-03-2008, 17:40:31
Para chequear que estás conectado, quizás deberías hacer algo en la base de datos, dentro de un try ... except.

Por ejemplo

QueryDummy es un query que hace algo simple
Código SQL [-] (http://www.clubdelphi.com/foros/#)select count(*) from tabla

Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TfrmPrincipal.Timer1Timer(Sender: TObject);
begin try with QueryDummy do begin if no Transaction.InTransaction do Transaction.StartTransaction;
ExecQuery;
Transaction.Commit;
end;
except {si hubo error, desconecto y conecto nuevamente} if cn.Connected then cn.Connected := False; if not cn.Connected then cn.Connected := True; end;
end;




Gracias compañeros...por su pronta respuesta lo que he notado es que despues de 8hrs sin actividad se pierde la conexion pero no me manda ningun error.. de hecho lei en la documentacion del MySQL que esos solia pasar en windows se perdia la conexion pero el SO no mandaba ningun msg de error

Optare por la soluicion que me da duilioisola le estare mandando cada cierto tiempo no se tal vez cada hra.. una consulta pa mantener al servidor siempre funcionando..

Muchas gracias.. despues posteo resultados!