Тест с компонентами UIB: работает ли соединение с базой данных Firebird?

#delphi #firebird #firebird2.5 #uib

#delphi #firebird #firebird2.5 #uib

Вопрос:

В старых компонентах IBX была функция под названием «TestConnected»:

 if not DB.TestConnected then
  Showmessage('Database connection dropped!');
  

Я ищу аналогичную команду в унифицированном компоненте InterBase.
Проверка if uDB.Connected = True не дает реальных доказательств.

Перед выполнением команды SQL я хотел бы проверить, работает ли соединение с базой данных, поэтому я:

  • не нужно выполнять транзакцию, если соединение недоступно
  • может сообщить пользователю о проблеме
  • попытка повторного подключения и т.д…

Зачем мне это нужно? Я создаю класс фонового потока для выполнения всех команд SQL с таймаутом.

Только Firebird 4.0 способен обрабатывать функции тайм-аута. Версия 2.5 поддерживает только LockTimeout, поэтому я вынужден запускать все операции с базой данных во вторичном потоке, который может быть остановлен, если выполняется слишком долго.

Комментарии:

1. проблема select 1 from rdb$database — и вот вам ваш тест

2. вы можете увидеть fb_ping функцию в TUIBaseLibrary исходных текстах (а также в «новом» API), если вы скомпилируете UIB с Firebird 3.0, но эта функция, похоже, не доступна и не используется. Более того, цель, скорее всего, состоит в том, чтобы беспокоить сетевой стек ОС и поддерживать соединение в рабочем состоянии, а не тестировать его.