|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Обрыв связи в adoconnetion
Привет коллеги.
Тут сталкнулся со странной особенностью технологии адо в делфях. Если программа работает по сети как клиент-серверное приложение, и происходит обрыв связи, то программа на клиенте выдает ошибку (забыл скриншот сваять) и вырубить приложение можно только аварийно через убийство процесса. Мне нужно сделать обработку исключения в adoconnection на разрыв связи. Пользователю предоставить выбор переподключиться к базе (серверу) или выход из программы. Как бы это реализовать? |
#2
|
|||
|
|||
Тоже есть такая проблема .
Буду очень благодарен. |
#3
|
|||
|
|||
можно попробовать бросить на форму TApplicationEvent и в его обработчике OnException ловить соотв. исключения и обрабатывать их.
|
#4
|
|||
|
|||
На какую форму? у меня Connection в DataModule
Если на главную, то этот код не отлавливает при разрыве соединения Код:
procedure TPhoneBook.ApplicationEvents1Exception(Sender: TObject; E: Exception); begin RichEdit1.Lines.Add('Event OnException: ' + E.Message); end; end. Последний раз редактировалось lmikle, 08.03.2016 в 06:02. |
#5
|
|||
|
|||
Ну, если это не работает, то можно вот это почитать:
http://stackoverflow.com/questions/2...ith-the-server Если коротко, то по таймеру выполняем простейший запрос, который гарантированно дает ответ. Если упало - то пытаемся переподключиться... |
#6
|
||||
|
||||
Я тут поэкспериментировал. Интересная ситуация наблюдается.
Повесил я процесс который информирует каждую секунду о состоянии коннекта. Так вот, после коннекта состояние выдается Open и как бы я не изголялся с остановкой, паузой для сервера состояние не меняется вообще. Более того, открытый набор данных, абсолютно себя нормально ведет при отключенном сервере. Сколько есть данных сейчас в буфере он и показывает их. Операций удаление, добавления я не делал, но уже забавно. При этом у меня для набора выставлен серверный курсор. И добиться обрыва у меня что-то не получается Неубиваемый коннект какой-то. Возникает вопрос, как бы сымитировать ситуацию обрыва. Вы что делаете когда получаете это сообщение? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
Выдергиваю провод или сервер останавливаю. Адо при первом же в запросе падает. А если они еще и в таймере... Чот ни как не могу отловить.
|
#8
|
||||
|
||||
Все работает в пределах нормы. Мне так и не удалось убить Адо. Паузы при отсутствии коннекта настраиваемые. Если вы уверены в качестве связи, то можно выставить самые минимальные значения для CommandTimeout и ConnectionTimeout. Можно даже самому отслеживать и визуализировать процесс подключения если сделать coAsyncConnect
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
||||
|
||||
А что там про таймер? Он тут каким боком?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |