#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, но эта функция, похоже, не доступна и не используется. Более того, цель, скорее всего, состоит в том, чтобы беспокоить сетевой стек ОС и поддерживать соединение в рабочем состоянии, а не тестировать его.