Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 как реализовать проверку на разрыв соединения с сервером?  [new]
Dean-2005
Member

Откуда:
Сообщений: 18
Всем привет!


Я использую: Delphi7, MySQL 5.0.6, ZeosDBO-6.6.3. Компонент для соединения ZConnection библиотеки ZeosDBO.
Никак не получается с try / except... Как только не пробывал делать!!!

form1.Zconnection1.connect;
try
showmessage('server connect');
except
form1.Zconnection1.disconnect;
showmessage('server error connect');
end;

Все равно вылазиет системная ошибка типа: project raised exception class ezsqlexception with message 'can't connect mysql server on 192.168.1.202 (10065). process stoped.'
С try / finally таже самая фигня. Если этот код использовать для открытия обычного файла на диске, то все прекрасно работает. Правда для этого надо будет еще директивы использовать {$I- или +}. А с коннектом никак не хочет.
Может там код ошибки можно как нибудь вручную сбросить, типа error:=0 если программно никак нельзя перехватить системное сообщение?
24 ноя 09, 14:48    [7970923]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
ДжекНепотрошитель
Member

Откуда: Донецк
Сообщений: 5308
Dean-2005,

Сдается мне, тебе надо try написать на строчку выше :)
24 ноя 09, 15:17    [7971186]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
miksoft
Member

Откуда:
Сообщений: 38432
10065 - No route to host (Нет маршрута к хосту).
24 ноя 09, 15:38    [7971393]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Dean-2005
Member

Откуда:
Сообщений: 18
Да я вкурсе что нет маршрута к хосту... я сам шнурок втыкаю! =)))
Как перехватить ошибку эту? кто нибудь пользовался ZEOSDBO вообще?
24 ноя 09, 15:54    [7971559]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
miksoft
Member

Откуда:
Сообщений: 38432
Dean-2005
Как перехватить ошибку эту? кто нибудь пользовался ZEOSDBO вообще?
ДжекНепотрошитель ответил тебе уже
24 ноя 09, 15:58    [7971604]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Dean-2005
Member

Откуда:
Сообщений: 18
не работает, то что он ответил. Поэтому и спрашиваю!
Ерунду в таком случае просьба не предлагать, все глупые варианты уже давно были проверены.
25 ноя 09, 09:05    [7974116]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Lavrenty
Member

Откуда: Тамбов
Сообщений: 152
Может надо реализовать проверку наличия сети ?
25 ноя 09, 09:32    [7974242]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Dean-2005
Member

Откуда:
Сообщений: 18
to Lavrenty идея интересная, сразуже проверил.
Физическое соединение оставил не тронутым(кабель), т.е. коннект всегда есть. Теперь вручную остановил службу MySQL сервера.
при попытке соединиться с сервером программа все равно выдает ошибку соединения. Точно такую же, только код изменился с 10065 на 10061. А так все равно не получается перехватить. ХЕЛП!!! :(
25 ноя 09, 15:17    [7977150]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
x77
Member

Откуда:
Сообщений: 1753
Dean-2005
project raised exception class ezsqlexception


если Zeos при неудачном коннекте поднимает эксепшн, а не выводит showmessage сам, то этот эксепшн будет обрабатываться в try..except.

может, вы просто из-под дельфей проверяете? со включенным "Stop on Delphi exceptions"? запустите не из среды. не должно там эксепшена быть, если сделать, как говорил ДжекНепотрошитель.
25 ноя 09, 15:25    [7977236]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
misha mike
Member

Откуда:
Сообщений: 710
Сдается мне, что топикстартер просто не отличает debug exception от runtime, вот и кажется ему что ничего не отлавливается...
25 ноя 09, 15:27    [7977252]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
misha mike
Member

Откуда:
Сообщений: 710
x77, три секунды :)
25 ноя 09, 15:28    [7977260]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
x77
Member

Откуда:
Сообщений: 1753
misha mike,

:)
25 ноя 09, 15:42    [7977391]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62917
А как перехватываешь?

--
http://www.podgoretsky.com
25 ноя 09, 15:55    [7977514]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
ДжекНепотрошитель
Member

Откуда: Донецк
Сообщений: 5308
Dean-2005
не работает, то что он ответил. Поэтому и спрашиваю!
Ерунду в таком случае просьба не предлагать, все глупые варианты уже давно были проверены.


Работает. Только
а) Пока у тебя в Delphi включена опция Stop on language exceptions, он всегда будет останавливать программу, независимо от твоей обработки
б) Если у тебя произошло исключение на Connect, то делать в блоке except Disconnect - скорее всего приведет ко второму исключению
25 ноя 09, 18:39    [7978860]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Dean-2005
Member

Откуда:
Сообщений: 18
Простите, но даже если запускать приложение не из Делфи, а из самой Винды екзешник, то все
равно выдает ошибку типа Showmessage с выше упомянутым содержимым. Т.е. как говорил товарищ
"х77" недолжно быть... но призапуске не из среды эксепшн все равно есть, причем с
шовмессажем.

Про отключенный флажок "Stop on Delphi exceptions" ничего сказать не могу, т.к. вообще не
могу найти где он находится... В опциях проекта не увидел и в категории меню ТУЛС тоже не
нашел. Подскажите мне глупому где его найти... =) У меня седьмая делфа.

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

то "ДжекНепотрошитель" ... Связку try\exception не использую, т.к. вы правильно сказали про
второе исключение. Использую try\finally.

Спасибо всем за бурные обсуждения в топике, уповаю на вашу помощь! ;)
26 ноя 09, 11:30    [7981065]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62917
С каким именно и как вылавливаешь?
Думаешь мы будем гадать о твоем коде?

--
http://www.podgoretsky.com
26 ноя 09, 11:52    [7981274]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
blackapple
Member

Откуда:
Сообщений: 11
У меня работает на Delphi2007, MySQL 5.1.37, ZeosDBO-6.6.5.
Проблем не замечено, ezsqlexception не появляется.
procedure TForm1.N5Click(Sender: TObject);
var s: string;
begin
  s:= InputBox('Подключение к Серверу MySQL', 'Введите адрес или имя сервера', 'localhost');
  ZCon.HostName:= Trim(s);
  s:= InputBox('Подключение к Серверу MySQL', 'Введите имя пользователя сервера', 'mysql');
  ZCon.User:= Trim(s);
  s:= InputBox('Подключение к Серверу MySQL', 'Введите пароль пользователя '+ZCon.User, 'mysql');
  zcon.Password:= Trim(s);
  s:= InputBox('Подключение к Серверу MySQL', 'Введите имя Базы данных', 'aist');
  ZCon.Database:= Trim(s);
  try
    ZCon.Connected:= True;
  except
    showMessage('Не удалось подключиться к серверу MySQL');
  end;
end;
26 ноя 09, 13:22    [7982088]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Dean-2005
Member

Откуда:
Сообщений: 18
blackapple, спасибо попробую!
26 ноя 09, 13:40    [7982287]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Dean-2005
Member

Откуда:
Сообщений: 18
to BLACKAPPLE... Не смешно!!! :( Код точно такойже как и твой. За тем исключением, что
настройки сервера уже установлены в свойствах компонента Zconnection.
Код такой:

procedure TForm1.Button1Click(Sender: TObject);
begin
try
ZConnection1.Connect;
ShowMessage('Соединение установлено!');
except
showMessage('Ошибка!');
end;
end;

В результате выполнения вылазиет злосчастная ошибка эксепшн, а из своих сообщений из кода
ничего не появляется. Она сразу все стопорит. Если не секрет, ты сам пробовал этот код в
случаях: 1-когда нет физического соединения (выдернули шнур сетки); 2- остановлена вручную
служба MySQL сервера (типа сервер сбоит, но при этом соединение аппаратное все равно есть)?
Просто интересно...

Я уже даже переустановил компоненты ZEOSDBO до версии 6.6.5. Вдруг там жуки есть, мало ли
что. И все равно таже фигня. К сожалению версии MySQL 5.1. и Delphi2007 у меня нет.
26 ноя 09, 14:23    [7982692]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62917
Кроме исключение, что еще на экран выскакивает?

--
http://www.podgoretsky.com
26 ноя 09, 14:35    [7982790]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62917
И проверка должна делаться не из Дельфи

--
http://www.podgoretsky.com
26 ноя 09, 14:36    [7982797]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
Dean-2005
Member

Откуда:
Сообщений: 18
Anatoly Podgoretsky
Кроме исключение, что еще на экран выскакивает?


вылазиет системная ошибка типа: project raised exception class ezsqlexception with message 'can't connect mysql server on 192.168.1.202 (10065). process stoped.'. Ошибка в виде окна типа - DialogMessage. Программа делает аварийное завершение работы с нажатием CTRL+F2 для возврата в нормальный режим.

На форме расположен только один компонент ZEOSDBO ZConnection. Нужно убрать всплывающую ошибку данного типа, если сеть повреждена или сервер MySQL остановлен.
При рабочем сервере и сетке все прекрасно работает!!! Но задача отловить ошибку в случае разрыва соединения или сбоя на сервере. Тупо один try\except или try\finally не помогает.
26 ноя 09, 15:10    [7983026]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
blackapple
Member

Откуда:
Сообщений: 11
Dean-2005,
Да проверял во всех перечисленных тобой случаях.
1. При подключении указывал не существующий хост
2. Подключал на localhost Служба MySql остановлена.

Переустанови компонент ZeosDBO.

К сообщению приложен файл. Размер - 0Kb
26 ноя 09, 15:27    [7983164]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
miksoft
Member

Откуда:
Сообщений: 38432
Dean-2005
Программа делает аварийное завершение работы с нажатием CTRL+F2 для возврата в нормальный режим.
Вы вообще не читаете что вам пишут?
ДжекНепотрошитель
Работает. Только
а) Пока у тебя в Delphi включена опция Stop on language exceptions, он всегда будет останавливать программу, независимо от твоей обработки
б) Если у тебя произошло исключение на Connect, то делать в блоке except Disconnect - скорее всего приведет ко второму исключению
26 ноя 09, 15:32    [7983193]     Ответить | Цитировать Сообщить модератору
 Re: как реализовать проверку на разрыв соединения с сервером?  [new]
blackapple
Member

Откуда:
Сообщений: 11
Протокол посмотри какой у тебя стоит.

К сообщению приложен файл. Размер - 0Kb
26 ноя 09, 15:33    [7983201]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить