Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.03.2016, 08:27
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию Обрыв связи в adoconnetion

Привет коллеги.
Тут сталкнулся со странной особенностью технологии адо в делфях.

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

Мне нужно сделать обработку исключения в adoconnection на разрыв связи.
Пользователю предоставить выбор переподключиться к базе (серверу) или выход из программы.

Как бы это реализовать?
Ответить с цитированием
  #2  
Старый 06.03.2016, 12:01
starcon starcon вне форума
Новичок
 
Регистрация: 15.03.2014
Сообщения: 84
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Тоже есть такая проблема .
Буду очень благодарен.
Ответить с цитированием
  #3  
Старый 06.03.2016, 20:19
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,037
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

можно попробовать бросить на форму TApplicationEvent и в его обработчике OnException ловить соотв. исключения и обрабатывать их.
Ответить с цитированием
  #4  
Старый 07.03.2016, 22:44
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

На какую форму? у меня 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  
Старый 08.03.2016, 06:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,037
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, если это не работает, то можно вот это почитать:
http://stackoverflow.com/questions/2...ith-the-server

Если коротко, то по таймеру выполняем простейший запрос, который гарантированно дает ответ. Если упало - то пытаемся переподключиться...
Ответить с цитированием
  #6  
Старый 08.03.2016, 12:02
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Я тут поэкспериментировал. Интересная ситуация наблюдается.
Повесил я процесс который информирует каждую секунду о состоянии коннекта. Так вот, после коннекта состояние выдается Open и как бы я не изголялся с остановкой, паузой для сервера состояние не меняется вообще. Более того, открытый набор данных, абсолютно себя нормально ведет при отключенном сервере. Сколько есть данных сейчас в буфере он и показывает их. Операций удаление, добавления я не делал, но уже забавно. При этом у меня для набора выставлен серверный курсор.
И добиться обрыва у меня что-то не получается Неубиваемый коннект какой-то.
Возникает вопрос, как бы сымитировать ситуацию обрыва. Вы что делаете когда получаете это сообщение?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 08.03.2016, 23:57
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

Выдергиваю провод или сервер останавливаю. Адо при первом же в запросе падает. А если они еще и в таймере... Чот ни как не могу отловить.
Ответить с цитированием
  #8  
Старый 09.03.2016, 00:46
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Все работает в пределах нормы. Мне так и не удалось убить Адо. Паузы при отсутствии коннекта настраиваемые. Если вы уверены в качестве связи, то можно выставить самые минимальные значения для CommandTimeout и ConnectionTimeout. Можно даже самому отслеживать и визуализировать процесс подключения если сделать coAsyncConnect
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 09.03.2016, 00:47
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А что там про таймер? Он тут каким боком?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter