Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   [FireDAC] Desconexión a la Base de Datos (https://www.clubdelphi.com/foros/showthread.php?t=95238)

MAXIUM 14-06-2021 05:13:47

[FireDAC] Desconexión a la Base de Datos
 
¿Qué tal estimados?

El escenario es el siguiente: Tengo una pequeña aplicación que va registrando eventos del equipo hacia el servidor. Es decir, está aplicación está conectada a una base de datos ubicada en un servidor.

Entonces de ocurrir un error en la conexión (se apagó el servidor, se desconecto el cable de red, etc.) la aplicación NO debe arrojar mensajes de error alguno a menos que tenga una barra de estado para esto. Qué detecte que ha perdido la conexión y que reintente cada X minutos sin intervención humana.

Estoy usando los componentes de FireDAC.

Eso. Gracias.

Casimiro Notevi 14-06-2021 11:01:14

Puedes implementar un simple try except y un timer que se ejecute cierto tiempo, por ejemplo:
Código Delphi [-]
try
  GuardarDatosEnServidor();
  UnTimer.enabled := false;
except
  UnTimer.enabled := true;
end;

procedure UnTimer.OnTimerTick(sender.....)   // ejemplo, cada minuto.
begin
  GuardarDatosEnServidor();
end;

MAXIUM 14-06-2021 15:56:01

Hola Casimiro,

Gracias por tu respuesta. Lo he intentado todo pero me sigue saliendo este evento

[FireDAC][Phys][FB]Connection lost to database

Casimiro Notevi 14-06-2021 19:24:02

Si está dentro del try except no debe salir nada, salvo que estés ejecutándolo desde delphi.

MAXIUM 14-06-2021 20:12:59

Hola, creo que ya estoy dando con la solución

FDConecction cuenta con estos eventos
Código Delphi [-]
OnRecover - to respond to the connection lost event and provide the next action to FireDAC.
OnLosted - fires when a connection was lost and not recovered.
OnRestored - fires when a connection was lost and recovered.

En OnLosted detengo o activo los Timer si así lo requiero.

En OnError capturo el error o tomo las medidas necesarias.
ekServerGone: ; // DBMS is not accessible due to some reason
Código Delphi [-]
 if (AException is EFDDBEngineException) and (EFDDBEngineException(AException).Kind = ekServerGone) then
    AException.Message := 'hola';

http://docwiki.embarcadero.com/Libra...dExceptionKind


La franja horaria es GMT +2. Ahora son las 05:21:27.

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