Ir al contenido


Foto

usando IdIcmpClient para manejar except de conexion


  • Por favor identifícate para responder
No hay respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 09 agosto 2009 - 06:11

LLevandome de la informacion  suplida por enecumene  sobre este tema he hecho lo siguiente.

Cuando mi aplicacion se cae la conexion, el cual es el principal error que puede dar, desactivo la deteccion de errores y llamo el formulario de reconexion, el cual tiene un timer.



delphi
  1. procedure TFRMactivasred.Timer1Timer(Sender: TObject);
  2. begin
  3.  
  4.   dmmonitorenred.zqcentral.Close;
  5.   dmmonitorenred.zqcentral.sql.Clear;
  6.   dmmonitorenred.zqcentral.SQL.add('select * from central left join acmsub on central.csid=acmsub.csid left join evento on central.evento=evento.evento') ;
  7.   dmmonitorenred.zqcentral.SQL.Add('where entradadatos > ' + quotedstr(inttostr(buscentral)));
  8.   dmmonitorenred.zqcentral.SQL.Add('order by entradadatos desc');
  9.   try
  10.     dmmonitorenred.zqcentral.open;
  11.   except
  12.     On e: exception do
  13.       begin
  14.         //Timer1.Enabled:=false;
  15.         {$I-}
  16.         fRMreconexion.Show;
  17.  
  18.     end;
  19.   end;
  20.  



Y en el formulario de reconexion hago esto:



delphi
  1. procedure TFRMreconexion.FormShow(Sender: TObject);
  2. begin
  3. {$I-}
  4. FRMactivasred.Timer1.Enabled:=false;
  5. Timerconexion.Enabled:=true;
  6. end;
  7.  
  8. procedure TFRMreconexion.TimerconexionTimer(Sender: TObject);
  9. begin
  10. IdIcmpClient1.Host:='10.0.0.2';
  11. IdIcmpClient1.ReceiveTimeout:=2000;
  12. IdIcmpClient1.Ping('Prueba de IP correcta',0);
  13. if (inttostr(IdIcmpClient1.ReplyStatus.BytesReceived))<>'0' then
  14.   begin
  15.     Label1.Caption:='SE CONECTO NUEVAMENTE' +(inttostr(IdIcmpClient1.ReplyStatus.BytesReceived));
  16.     DMmonitorenred.ZConmonred.Disconnect;
  17.     DMmonitorenred.ZConmonred.Connect;
  18.   FRMactivasred.Timer1.Enabled:=true;
  19.   {$I+}
  20.   Timerconexion.Enabled:=false;
  21.   FRMreconexion.Close;
  22.   FRMreconexion.ModalResult:=mrnone;
  23.   end
  24.   else
  25.   begin
  26.   FRMreconexion.Color:=clred;
  27.   label1.Color:=clYellow;
  28.   end;
  29. end;
  30.    



Quiero saber si todo esta bien o hay una mejor forma de hacerlo.

A mi me funciona, porque me presenta el error y me abre el formulario y cuando la conexion vuelve automaticamente cierra el formulario y el query vuelve a funcionar.


- Quisiera no tener que presionar OK en el mensaje de error y ademas cuando se reconecta me sale el mensaje de error y tengo que presionar ok otra vez.




  • 0




IP.Board spam blocked by CleanTalk.