Lazarus - IBX - Firebird. Как отследить потерю соединения?
Модератор: Модераторы
Lazarus - IBX - Firebird. Как отследить потерю соединения?
День добрый.
Перешёл с Delphi на Lazarus 1.6
Сервер баз данных - Firebird 2.5
Библиотека для работы с Firebird - IBX 1.4.4
Операционная система Windows x32/x64
Всё хорошо, работает. Возник критический баг - при пропадании соединения с базой данных приложение "рушиться". В приложении есть модули с периодическим (по таймеру) обновлением данных с сервера Firebird.
Надо отследить пропадание связи, подождать появление связи и переподключиться.
Не могу найти / придумать варианты, как это реализовать. Прошу помощи, подсказки
Перешёл с Delphi на Lazarus 1.6
Сервер баз данных - Firebird 2.5
Библиотека для работы с Firebird - IBX 1.4.4
Операционная система Windows x32/x64
Всё хорошо, работает. Возник критический баг - при пропадании соединения с базой данных приложение "рушиться". В приложении есть модули с периодическим (по таймеру) обновлением данных с сервера Firebird.
Надо отследить пропадание связи, подождать появление связи и переподключиться.
Не могу найти / придумать варианты, как это реализовать. Прошу помощи, подсказки
Надо отследить пропадание связи, подождать появление связи и переподключиться.
Не могу найти / придумать варианты, как это реализовать. Прошу помощи, подсказки
Исключения обрабатываются?
каждый запрос или выполнение процедуры обрамлять try except ?
Добавлено спустя 2 минуты 14 секунд:
Re: Lazarus - IBX - Firebird. Как отследить потерю соединения?
в принципе, если не найдётся ничего более рационального - придётся так и делать
Добавлено спустя 2 минуты 14 секунд:
Re: Lazarus - IBX - Firebird. Как отследить потерю соединения?
в принципе, если не найдётся ничего более рационального - придётся так и делать
каждый запрос или выполнение процедуры обрамлять try except ?
Да, конечно. Других способов нет.
можно написать ОДНУ процедуру, в которой будет выполняться простой запрос типа
обрамленный в try except и в случае исключения переподключаться.
А потом просто вызывать эту процедуру в нужным местах.
Код: Выделить всё
select 1 from RDB$Databaseобрамленный в try except и в случае исключения переподключаться.
А потом просто вызывать эту процедуру в нужным местах.
WAYFARER писал(а):можно написать ОДНУ процедуру, в которой будет выполняться простой запрос типаКод: Выделить всё
select 1 from RDB$Database
обрамленный в try except и в случае исключения переподключаться.
А потом просто вызывать эту процедуру в нужным местах.
ну вот к чему-то такому и начал подготавливаться. муторно конечно... но заглядывать в исходники IBX пока нет времени
можно написать ОДНУ процедуру, в которой будет выполняться простой запрос типа
Не лучший вариант. Если, к примеру, выполнять процедуру раз в Х секунд, а соединение прервется между исполнениями, получите исключение.
в FIBPlus реализовано отслеживание потери соединения
можно глянуть в исходники)
можно глянуть в исходники)
Вообще-то мы говорим про IBX, а не про сдохшие дельфийские FIBы.
какая разница
по крайней мере там это было хорошо реализовано
сам пользовался delphi+fibplus
пока на лазаря не перешел
по крайней мере там это было хорошо реализовано
сам пользовался delphi+fibplus
пока на лазаря не перешел
какая разница
по крайней мере там это было хорошо реализовано
Разница в реализации и в архитектуре. Так, как сделано в ФИБах, в IBX сделать проблематично - нужно перекраивать архитектуру. Да и ФИБовская реализация подходит не для всех парадигм программирования.
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
TIBDatabase.TestConnection не пробовали вызывать? Если связь пропала TestConnection вызывает TIBDatabase.ForceClose
if IBDatabase1.TestConnection then
begin
//Соединение есть делаем что должны
end
else
begin
//Соединения нет переподключаемся
end;
if IBDatabase1.TestConnection then
begin
//Соединение есть делаем что должны
end
else
begin
//Соединения нет переподключаемся
end;
Последний раз редактировалось *Rik* 05.11.2016 18:05:51, всего редактировалось 3 раза.
slyubez писал(а):какая разница
по крайней мере там это было хорошо реализовано
Разница в реализации и в архитектуре. Так, как сделано в ФИБах, в IBX сделать проблематично - нужно перекраивать архитектуру. Да и ФИБовская реализация подходит не для всех парадигм программирования.
я вам не говорю "тырить" код один в один
а просто посмотреть реализации алгоритма
баз данных то одна и та же
xcod писал(а):какая разница
по крайней мере там это было хорошо реализовано
сам пользовался delphi+fibplus
пока на лазаря не перешел
согласен. тоже Delphi+FIB-ы использовал
Добавлено спустя 38 секунд:
*Rik* писал(а):TIBDatabase.TestConnection не пробовали вызывать? Если связь пропала TestConnection вызывает TIBDatabase.ForceClose
if IBDatabase1.TestConnection then
begin
//Соединение есть делаем что должны
end
else
begin
//Соединения нет переподключаемся
end;
нет. сейчас проверю
