Вижу ДВОЙНУЮ таблицу. Значит, вы используете Oracle:)
Для большинства (всех?) Клиент-серверных СУБД нет способа обнаружить потерянное соединение, кроме как попросить СУБД о каком-либо действии. И есть много причин, почему связь теряется. Может быть сбой в сети, может быть ..., может быть, администратор БД отключил БД.
Многие API-интерфейсы СУБД, в том числе Oracle OCI, имеют специальные функции, позволяющие пинговать СУБД. «Пинг» - это наименьший возможный запрос к СУБД. Вышеуказанный SELECT требует гораздо больше работы, чем такой пинг.
Но не все компоненты доступа к данным, включая ADO, позволяют пинговать СУБД с помощью вызова ping API СУБД. Затем вы должны использовать какую-то команду SQL. Таким образом, вышеупомянутый SELECT является правильным с ADO. Другой вариант - НАЧАТЬ НУЛЬ; КОНЕЦ;. Возможно, используется меньше ресурсов СУБД (нет необходимости в оптимизаторе, нет необходимости описывать набор результатов и т. Д.).
TTimer в порядке. Запрос должен выполняться в потоке, где используется соответствующее соединение. Не обязательно, но это другой вопрос.
Потенциальная проблема может заключаться в закрытии соединения, когда соединение теряется. Поскольку закрытие соединения может вызвать исключение, поскольку API СУБД может находиться в состоянии сбоя.
Вроде того ...