PDA

Ver la Versión Completa : [FireDAC] Desconexión a la Base de Datos


MAXIUM
14-06-2021, 05:13:47
¿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:
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
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
if (AException is EFDDBEngineException) and (EFDDBEngineException(AException).Kind = ekServerGone) then
AException.Message := 'hola';

http://docwiki.embarcadero.com/Libraries/XE8/en/FireDAC.Stan.Error.TFDCommandExceptionKind