|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Не могу перехватить исключение
Есть проблема: работаю с удаленной базой данных, связь не стабильна, пробую проверить наличие соединения при помощи конструкции типа:
try ADOConnection.Connected := True; except on E : Exception do ShowMessage(E.ClassName+' '+E.Message); но except не срабатывает, выскакивает системная ошибка. Подскажите почему. Или кто-нибудь знает другой способ проверки связи? |
#2
|
|||
|
|||
Цитата:
"А мужики-то и не знают" (с) реклама. Тут ровно таже ситуация. Вообще, компонент не знает о том, что связь сломалась. Надо попробоавть выполнить любой запрос, который гарантированно пройдет в обычном случае и не будет при этом возврашять пол бызя, например Код:
select count(1) from [любая_существующая_таблица] where 1=2 |
#3
|
||||
|
||||
ZAlex, а если exe запустить отдельно, не из под Delphi?
Пишу программы за еду. __________________ |
#4
|
|||
|
|||
NumLok, естесственно проверяется отдельный ехе
|
#5
|
|||
|
|||
Цитата:
Во-первых, вопрос: в каком месте выскакивает системная ошибка? Теперь опишу свой случай. После Connected:=true не факт, что, если связь не получилась, будет исключение (и какая-нибудь ошибка). Ошибка будет позже при проведении, например, запроса к базе, с которой нет связи. Поэтому 1) exception бесполезен 2) после попытки связи (или перед любой операцией) делайте проверку: if Connected ... Кстати, в Help'е так и сказано: Код:
with ADOConnection1 do begin Open; if Connected then { connection successful } else { connection unsuccessful }; Последний раз редактировалось AlexSku, 12.09.2011 в 12:11. |
#6
|
|||
|
|||
AlexSku
Если не трудно, о каком Help вы говорите? Я бы с удовольствием посмотрел. А в вашем коде все равно при попытке выполнить if Connected при отсутствии связи будет возникать системная ошибка, которую я и пытаюсь перехватить. |
#7
|
|||
|
|||
Цитата:
ADOConnection1: TADOConnection; Мышкой встаю на последнее слово и жму F1, открывается Help. Открываю окно Properties, в нём щёлкаю на Connected и - вуаля, пример, который я скопировал. 2) Вот как я делал: Код:
try IBDatabase1.Connected:= true; except end; if IBDatabase1.Connected then begin |
#8
|
|||
|
|||
Спасибо, коллеги, проблему кажется решил. Может по идее Connected и достаточно, но исключение перехватывается, толко если делаешь какой-нибудь простой select. Я поставил в try строку ADOQuery.Open и она вышла на обычный EOleException. Еще раз спасибо.
|