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
procedure TFRMactivasred.Timer1Timer(Sender: TObject); begin dmmonitorenred.zqcentral.Close; dmmonitorenred.zqcentral.sql.Clear; dmmonitorenred.zqcentral.SQL.add('select * from central left join acmsub on central.csid=acmsub.csid left join evento on central.evento=evento.evento') ; dmmonitorenred.zqcentral.SQL.Add('where entradadatos > ' + quotedstr(inttostr(buscentral))); dmmonitorenred.zqcentral.SQL.Add('order by entradadatos desc'); try dmmonitorenred.zqcentral.open; except On e: exception do begin //Timer1.Enabled:=false; {$I-} fRMreconexion.Show; end; end;
Y en el formulario de reconexion hago esto:
delphi
procedure TFRMreconexion.FormShow(Sender: TObject); begin {$I-} FRMactivasred.Timer1.Enabled:=false; Timerconexion.Enabled:=true; end; procedure TFRMreconexion.TimerconexionTimer(Sender: TObject); begin IdIcmpClient1.Host:='10.0.0.2'; IdIcmpClient1.ReceiveTimeout:=2000; IdIcmpClient1.Ping('Prueba de IP correcta',0); if (inttostr(IdIcmpClient1.ReplyStatus.BytesReceived))<>'0' then begin Label1.Caption:='SE CONECTO NUEVAMENTE' +(inttostr(IdIcmpClient1.ReplyStatus.BytesReceived)); DMmonitorenred.ZConmonred.Disconnect; DMmonitorenred.ZConmonred.Connect; FRMactivasred.Timer1.Enabled:=true; {$I+} Timerconexion.Enabled:=false; FRMreconexion.Close; FRMreconexion.ModalResult:=mrnone; end else begin FRMreconexion.Color:=clred; label1.Color:=clYellow; end; end;
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.