Additional
dbCAP
AnyDAC
ThinDAC
NCOCI8
Topic: Свой обработчик ошибок?
Свой обработчик ошибок?
Posted: 2008/05/13 04:56
 
Как в событии OnError, сделать свою обработку ошибки, без вывода в последующем окна об ошибки? Например для компонента ADConnection.
С уважением, Александр.
Re:Свой обработчик ошибок?
Posted: 2008/05/15 09:31
 
Поставьте там Abort.
Если произошла ошибка, то последующее исполнение - лишино смысла.
Re:Свой обработчик ошибок?
Posted: 2008/05/16 03:22
 
Мне нужно, чтоб при потере связи с БД программа в строке статуса выводила - "Связь с БД не установлена" и периодически пыталась восстановить её без лишних предупреждений.
Во второй версии компонентов ADConnection пытается восстановить связь несколько раз, в конце выводит сообщение о недоступности соединения и разрывает связь, если пытаюсь восстановить ф-й ADConnection.Open, то каждый раз выдает предупреждение о недоступности соединения. Причем, во время восстановления связи с БД программа повисает.
Если использовать try ADConnection.Open catch... ,то получается работать по вышеописанной схеме, но при выходе программа зависает.
Соответственно из сложившейся ситуации вижу два выхода:
1. Либо реализовать свой обработчик ошибок без вывода сообщения об ошибке.
2. Либо при выполнении try ADConnection.Open catch... , в случае возникновения исключительной ситуации программа не должна повисать.
С уважением, Александр.
Re:Свой обработчик ошибок?
Posted: 2008/05/19 20:58
 
Какая СУБД ?

Во второй версии компонентов
Какой именно буилд ты использовал ?

если пытаюсь восстановить ф-й ADConnection.Open, то каждый раз выдает предупреждение о недоступности соединения.
Я правильно понял, что после обнаружения разрыва соединения и закрытия его, не получается снова открыть соединение при помощи Open ? Какой точный текст ошибки ?

Соответственно из сложившейся ситуации вижу два выхода
Я попытаюсь воспроизвести проблему и устранить ее в AnyDAC.
Re:Свой обработчик ошибок?
Posted: 2008/05/20 01:22
 
Пашу в СRS2007 (C++) Версия AnyDac 1.12.2 .
MySql v5.0.21
Описываю порядок действий:
Исходный текст функции.

 try {    ADQuery->Open("SELECT 1");ADQuery->Close();    Form->Caption "Есть связь с БД"; } catch(...) {    Form->Caption "Нет связи с БД"; }


Функция выполняется раз в секунду по таймеру.
1. Запускаю MySQL сервер.
2. Запускаю прогу.
3. В заголовке пишется "Есть связь с БД".
4. Закрываю MySQL сервер.
5. В заголовке пишется "Нет связи с БД".
6. Выхожу из программы. Программа зависает. В режиме отладки Выводится предупреждение:



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

 {    ADQuery->Open("SELECT 1");ADQuery->Close();    if(ADConnection->Connected)Form->Caption "Есть связь с БД";    else Form->Caption "Нет связи с БД"; }



Эксперементировал со второй версией, тоже самое v2.0.1.285.

С Уважением, Александр.

Post edited by: Sanya, at: 2008/05/20 01:31
Re:Свой обработчик ошибок?
Posted: 2008/05/21 00:00
 
Вот этот код работает в 1.12:

 procedure TForm55.Timer1Timer(SenderTObject); begin   try     ADQuery1.Open;     ADQuery1.Close;     Caption := 'Есть связь с БД';   except     Caption := 'Нет связи с БД';     ADConnection1.Connected := False;   end; end;



А в 2.0 этот же код работает без "ADConnection1.Connected := False;"