Veo la tabla DUAL. Significa que está utilizando Oracle :)
Para la mayoría (¿todos?) Del cliente/servidor DBMS no hay manera de detectar, que una conexión se pierde, excepto para pedirle a un DBMS que realice alguna acción. Y hay muchas razones por las cuales se pierde una conexión. Puede ser una falla de la red, puede ser ..., puede ser un DBA que cierra un DB.
Muchos DBMS API, incluido Oracle OCI, tienen las funciones especiales, lo que permite hacer ping a un DBMS. El "ping" es la solicitud más pequeña posible para un DBMS. El SELECT anterior requiere mucho más trabajo, que dicho ping.
Pero no todos los componentes de acceso a datos, incluido ADO, permiten hacer ping a un DBMS, utilizando la llamada de ping de la API de DBMS. Entonces debes usar algún comando SQL. Entonces, el SELECCIONADO anterior es correcto con ADO. Otra opción - BEGIN NULL; FIN;. Puede estar utilizando menos recursos de DBMS (sin necesidad de optimizador, no es necesario describir un conjunto de resultados, etc.).
TTimer está bien. La consulta debe realizarse en un subproceso, donde se utiliza la conexión correspondiente. No es obligatorio aunque, pero es un problema diferente.
El posible problema puede ser cerrar una conexión, cuando se pierde una conexión. Como el cierre de una conexión puede generar una excepción debido a que la API DBMS puede estar en un estado fallido.
Tipo de eso ...
SQL Server permite Qry.ExecSQL con SQL.Text = '' como una consulta (pero no ''). Esto se puede ejecutar cientos de veces por segundo. –