Lazarus - IBX - Firebird. Как отследить потерю соединения?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Lazarus - IBX - Firebird. Как отследить потерю соединения?

Сообщение fan.khm » 01.11.2016 20:11:57

День добрый.

Перешёл с Delphi на Lazarus 1.6
Сервер баз данных - Firebird 2.5
Библиотека для работы с Firebird - IBX 1.4.4
Операционная система Windows x32/x64

Всё хорошо, работает. Возник критический баг - при пропадании соединения с базой данных приложение "рушиться". В приложении есть модули с периодическим (по таймеру) обновлением данных с сервера Firebird.

Надо отследить пропадание связи, подождать появление связи и переподключиться.

Не могу найти / придумать варианты, как это реализовать. Прошу помощи, подсказки
fan.khm
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.11.2016 19:45:35

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение slyubez » 01.11.2016 22:28:51

Надо отследить пропадание связи, подождать появление связи и переподключиться.

Не могу найти / придумать варианты, как это реализовать. Прошу помощи, подсказки

Исключения обрабатываются?
slyubez
постоялец
 
Сообщения: 173
Зарегистрирован: 31.03.2015 08:44:07

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение fan.khm » 02.11.2016 19:41:22

каждый запрос или выполнение процедуры обрамлять try except ?

Добавлено спустя 2 минуты 14 секунд:
Re: Lazarus - IBX - Firebird. Как отследить потерю соединения?
в принципе, если не найдётся ничего более рационального - придётся так и делать
fan.khm
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.11.2016 19:45:35

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение slyubez » 02.11.2016 19:46:30

каждый запрос или выполнение процедуры обрамлять try except ?

Да, конечно. Других способов нет.
slyubez
постоялец
 
Сообщения: 173
Зарегистрирован: 31.03.2015 08:44:07

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение WAYFARER » 03.11.2016 01:11:32

можно написать ОДНУ процедуру, в которой будет выполняться простой запрос типа
Код: Выделить всё
select 1 from RDB$Database

обрамленный в try except и в случае исключения переподключаться.
А потом просто вызывать эту процедуру в нужным местах.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 520
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение fan.khm » 03.11.2016 18:22:03

WAYFARER писал(а):можно написать ОДНУ процедуру, в которой будет выполняться простой запрос типа
Код: Выделить всё
select 1 from RDB$Database

обрамленный в try except и в случае исключения переподключаться.
А потом просто вызывать эту процедуру в нужным местах.


ну вот к чему-то такому и начал подготавливаться. муторно конечно... но заглядывать в исходники IBX пока нет времени :)
fan.khm
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.11.2016 19:45:35

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение slyubez » 04.11.2016 15:46:59

можно написать ОДНУ процедуру, в которой будет выполняться простой запрос типа

Не лучший вариант. Если, к примеру, выполнять процедуру раз в Х секунд, а соединение прервется между исполнениями, получите исключение.
slyubez
постоялец
 
Сообщения: 173
Зарегистрирован: 31.03.2015 08:44:07

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение xcod » 04.11.2016 19:32:16

в FIBPlus реализовано отслеживание потери соединения
можно глянуть в исходники)
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение slyubez » 04.11.2016 23:55:05

Вообще-то мы говорим про IBX, а не про сдохшие дельфийские FIBы.
slyubez
постоялец
 
Сообщения: 173
Зарегистрирован: 31.03.2015 08:44:07

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение xcod » 05.11.2016 10:22:54

какая разница
по крайней мере там это было хорошо реализовано
сам пользовался delphi+fibplus
пока на лазаря не перешел
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение slyubez » 05.11.2016 12:58:41

какая разница
по крайней мере там это было хорошо реализовано

Разница в реализации и в архитектуре. Так, как сделано в ФИБах, в IBX сделать проблематично - нужно перекраивать архитектуру. Да и ФИБовская реализация подходит не для всех парадигм программирования.
slyubez
постоялец
 
Сообщения: 173
Зарегистрирован: 31.03.2015 08:44:07

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение *Rik* » 05.11.2016 14:37:18

TIBDatabase.TestConnection не пробовали вызывать? Если связь пропала TestConnection вызывает TIBDatabase.ForceClose

if IBDatabase1.TestConnection then
begin
//Соединение есть делаем что должны
end
else
begin
//Соединения нет переподключаемся
end;
Последний раз редактировалось *Rik* 05.11.2016 19:05:51, всего редактировалось 3 раз(а).
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 427
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение xcod » 05.11.2016 15:32:41

slyubez писал(а):
какая разница
по крайней мере там это было хорошо реализовано

Разница в реализации и в архитектуре. Так, как сделано в ФИБах, в IBX сделать проблематично - нужно перекраивать архитектуру. Да и ФИБовская реализация подходит не для всех парадигм программирования.

я вам не говорю "тырить" код один в один
а просто посмотреть реализации алгоритма
баз данных то одна и та же
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Re: Lazarus - IBX - Firebird. Как отследить потерю соединени

Сообщение fan.khm » 05.11.2016 22:14:55

xcod писал(а):какая разница
по крайней мере там это было хорошо реализовано
сам пользовался delphi+fibplus
пока на лазаря не перешел


согласен. тоже Delphi+FIB-ы использовал

Добавлено спустя 38 секунд:
*Rik* писал(а):TIBDatabase.TestConnection не пробовали вызывать? Если связь пропала TestConnection вызывает TIBDatabase.ForceClose

if IBDatabase1.TestConnection then
begin
//Соединение есть делаем что должны
end
else
begin
//Соединения нет переподключаемся
end;


нет. сейчас проверю
fan.khm
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.11.2016 19:45:35


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 76

Рейтинг@Mail.ru
cron