Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

удаленный сервер InterBase [D3, D5, D6, IB5.x]


YouNick ©   (2002-04-29 15:52:00) 

Здравствуйте!

Есть проблема с удаленным сервером IB. Как отследить разрыв связи между IBClient и IBServer? Ситуация следующая: программа открывает БД, выполняет ряд запросов, потом длительное время не производится активных действий, в это время происходит разрыв связи с сервером IB. При следующем обращении к БД возникает ошибка "Нет связи с сервером!". Не очень хочется на каждую выборку проверять наличие связи, т.к. это очень накладно. Есть ли другие способы? Подскажите что-нибудь толковое пожалуйста. Очень надо!!!! Проект горит ...

Заранее благодарен, Nick


Alexandr   (2002-04-30 12:04:00) [1]

да уж...
Как это условно реального времени?
А с чего бы это разрыв соединения должен произойти?
А вообще, для случаев когда нужна работа без сервера в течение незначительного времени используют трехзвенку.
А так, вообще в твоем случае чем надежнее нужно сделать, тем гораздо сложнее все будет. И стандартных решений тут нет.
Нужно точно знать ТЗ, чтоб спроектировать структуру


YouNick   (2002-04-30 11:36:00) [2]

Имеется управляющая система условно реального времени. Есть сервер БД и есть клиентские рабочие места. Предположим, что сервер не загнулся, а просто произошел сбой в свЯзи (разрыв соединения между IBClient и IBServer). Приложение (рабочее место) закрывать нельзя. Нужно как можно быстрее и незаметнее для пользователя восстановить связь с БД. Как отследить разрыв связи? Что можете посоветовать глобально? Проблема еще в том, что работа сильно завязана на БД!!! То есть пользователь не сможет выполнить ряд операций, если нет связи с БД (в базу пишется отчеты о работе и т.п., из базы постоянно берутся новые данные, т.к. одновременно несколько рабочих мест имеют доступ к общей БД).


Alexandr   (2002-04-30 09:25:00) [3]

однако пример смотри на fibplus.com.ua
или на www.fibplus.net

там какраз есть пример обработки обрыва связи.


User_OKA   (2002-04-30 08:47:00) [4]

to Alexandr ©
"В FIBPlus ситуация с этим гораздо лучше- при обрыве связи фомируется событие и все можно хорошо отследить и корректно закрыть приложение (даже сохранив локально все данные) или что-то еще (например, подождать, когда связь восстановится)."
А можно поподробнее? Что за событие, где оно формируется и как его отловить для обработки?


Alexandr   (2002-04-30 06:59:00) [5]

а в чем проблема? Конкретно.
Если выдернули шнурок/упал сервер или еще что-то то, естественно, произойдет разрыв связи так принято всегда и везде для любых сетевых приложений, баз данных и прочего.
При разрыве связи незавершенным транзакциям сделается rollback для обеспечения целостности данных.
Здесь все ясно и понятно.

Другое дело как клиентская сторона отреагирует на обрыв связи. Здесь все уже зависит от тебя. Замый простой и безглючный вариант это закрывать клиентское приложение после обрыва связи.
Но компоненты IBX на обрыв связи реагируют очень болезненно и их надо предварительно изменять- неофициальные патчи на исходники есть в Интернете.
В FIBPlus ситуация с этим гораздо лучше- при обрыве связи фомируется событие и все можно хорошо отследить и корректно закрыть приложение (даже сохранив локально все данные) или что-то еще (например, подождать, когда связь восстановится).

Если ждать восстановления связи, то после восстановления все равно надо снова подключаться к базе данных и обновлять все нужные наборы данных, и повторять незавершенную транзакцию - или просто перезагрузить программу.


YouNick   (2002-04-29 19:24:00) [6]

2Meduza: имеется ввиду физический разрыв сеанса связи (грубо говоря взяли и выдернули сетевой шнурок из машины). AfterDisconnect не помогает :(


А кто знает насчет других СУБД? MSSQL, ORACLE и др.? Как в них решена эта проблема?


Meduza   (2002-04-29 18:21:00) [7]

v obrabotcheke sobitija IBDatabase.AfterDisconnect napisatj nuzhnij kod, chtobi lovitj imenno nezaplanirovanij razriv ispoljzovatj flag


Наверх

Титульная страница Поиск, карта сайта Написать письмо