Je vois la table DUAL. Signifie que vous utilisez l'Oracle :)
Pour la plupart (tous?) Des SGBD client/serveur, il n'y a aucun moyen de détecter qu'une connexion est perdue, sauf pour demander une action à un SGBD. Et il y a beaucoup de raisons, pourquoi une connexion est perdue. Peut être une panne de réseau, peut être ..., peut être un DBA arrêté une DB.
De nombreuses API SGBD, y compris Oracle OCI, ont des fonctions spéciales, permettant de faire un ping sur un SGBD. Le "ping" est une requête la plus petite possible à un SGBD. Le SELECT ci-dessus nécessite beaucoup plus de travail, qu'un tel ping. Toutefois, tous les composants d'accès aux données, notamment ADO, ne permettent pas d'exécuter une commande PING sur un SGBD à l'aide de l'appel ping de l'API DBMS. Ensuite, vous devez utiliser une commande SQL. Donc, le SELECT ci-dessus est correct avec ADO. Autre option - BEGIN NULL; FIN;. Il peut utiliser moins de ressources SGBD (pas besoin d'optimiseur, pas besoin de décrire un ensemble de résultats, etc.).
TTimer est OK. La requête doit être effectuée dans un thread, où la connexion correspondante est utilisée. Ce n'est pas un must, mais c'est un problème différent.
Le problème potentiel peut être de fermer une connexion, lorsqu'une connexion est perdue. Comme une fermeture de connexion peut générer une exception en raison de l'API SGBD peut être dans un état d'échec.
Type de cette ...
SQL Server autorise Qry.ExecSQL avec SQL.Text = '' comme requête (mais pas ''). Cela peut être exécuté des centaines de fois par seconde. –