Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   mantener la conexion abierta MyDAC, Delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=96628)

ArtPortEsp 04-03-2024 22:41:45

mantener la conexion abierta MyDAC, Delphi 7
 
Hola a todos;

he estado buscando diferentes formas de solucionar el problema de que mi aplicación en Delphi 7 pierda la conexión con el servidor MySQL en internet. Ninguna ha funcionado totalmente.

Se me ocurrió que pudiera mantener un "hilo" ejecutando cada cierto tiempo el método PING de Tmyconnection (que según lo que he leído, es lo que recomiendan los de DEVART). Pero no tengo ni idea de como hacerlo.

Como abro un "hilo" de ejecución alterno?; donde lo abro, en el menú principal? o en el Data Module?; una vez abierto que problemas puede tener para el resto de los procesos normales del sistema?

Cualquier ayuda para implementar esto es muy muy apreciada.

Saludos

Neftali [Germán.Estévez] 05-03-2024 08:24:28

Bueno, yo más que un hilo nuevo te hubiera propuesto que pusieras un Timer que cada minuto (por ejemplo) ejecute una consulta simple sobre la Base de Datos para mantener la conexión activa.
Una consulta sencilla tipo:

Código SQL [-]
SELECT TOP 1 FROM Tabla

(escogiendo una tabla pequeña con pocos registros para minimizar la carga).

¿Porqué te sugería un un Timer y no un hilo nuevo? Porque la mayoría de componentes de conexión a Base de Datos no son Thread-safe (desconozco si lo son los de MyDAC); eso significa que para usarlos en un hilo nuevo, debes usar una nueva conexión. Al usar una nueva conexión, ya no estás usando la conexión principal y por lo tanto el objetivo de mantenerla abierta ya no se si se cumple.

De todas formas si la gente de MyDAC lo recomiendan, pues adelante.

Cita:

Empezado por ArtPortEsp (Mensaje 554741)
Se me ocurrió que pudiera mantener un "hilo" ejecutando cada cierto tiempo el método PING de Tmyconnection (que según lo que he leído, es lo que recomiendan los de DEVART). Pero no tengo ni idea de como hacerlo.

Creo un TThread y programa dentro lo que necesites (PING). Luego asegúrate desde el programa (por ejemplo cada minuto -con un Timer-) de ir ejecutando ese thread de forma continua.

Aquí tienes una entrada en mi blog -ya antigua- justo sobre cómo lanzar consultas utilizando TThreads. Justo lo que necesitas. Lo único que aquí se hace con ADO, pero es trivial cambiar el componente de conexion (TADOConnection) y el de query (TADOQuery) por los equivalentes en MyDAC para que funcione sin problemas.

https://neftali.clubdelphi.com/utili...o-con-threads/

ArtPortEsp 23-03-2024 00:31:28

Antes que nada, gracias por el tiempo para tu respuesta German;

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 554745)
Bueno, yo más que un hilo nuevo te hubiera propuesto que pusieras un Timer que cada minuto (por ejemplo) ejecute una consulta simple sobre la Base de Datos para mantener la conexión activa.
Una consulta sencilla tipo:

Código SQL [-]
SELECT TOP 1 FROM Tabla

(escogiendo una tabla pequeña con pocos registros para minimizar la carga).

Me siento más cómodo con esta opción, en una aplicación con menú principal que llama a varias ventanas diferentes, en donde pondrías el Timer?; en el menu?, en el Datamodule?

Me inclino a ponerlo en el Menu, ya que es la forma que siempre está abierta. Supongo que una vez activado el Timer, ese se mantiene activo aunque el menú no sea la forma activa en ese momento, verdad?

Neftali [Germán.Estévez] 25-03-2024 08:42:42

Cita:

Empezado por ArtPortEsp (Mensaje 555104)
...en una aplicación con menú principal que llama a varias ventanas diferentes, en donde pondrías el Timer?; en el menu?, en el Datamodule?


Necesitas ponerlo en algún elemento que siempre esté activo.

Si el Datamodule está "vivo" siempre, a efectos prácticos es lo mismo. Si no está siempre creado deberás ponerlo en el menú.


La franja horaria es GMT +2. Ahora son las 00:07:30.

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