![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странность в работе try..except [D7, D2005, XP]
Oleg196lora © (2010-01-26 12:06:00)Здравствуйте уважаемые Мастера!
Имеется процедура:
procedure TForm1.Button1Click(Sender: TObject);
begin
try
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('CREATE TABLE D1 ([Дата] char(10), [Время] char(5), [Параметр] char(4))');
ADOQuery1.ExecSQL;
except
ShowMessage('База уже создана!');
D1.Active:=True;
ShowMessage('База активна');
D1.Active:=False;
ShowMessage('База закрыта');
end;
end;
Когда файла на диске нет, создание проходит нормально, при повторном запуске процедура должна "уйти" на except, но вместо этого вываливает
raised EOLEException.
При запуске ехе-шника вне среды Дельфи все работает как надо.
В чем здесь засада? (Говорят такое бывало не только у меня)
oleg1963lora (2010-01-26 14:32:00) [1]Вот теперь понятно. Думаю в моей задаче я смогу обойтись и без него. Кстати, насчет "крыжика" Сергей М. © [2] .
При возникновении сообщения о исключении внизу стоит чекбокс "игнорировать", я его взвел и черт перестал выскакивать :)
Все нормально.
Спасибо всем за помощь!
Сергей М. (2010-01-26 14:19:00) [2]
> компонент при исключении не вызывается
Он и не должен "вызываться", если исключение перехвачено и "погашено" (обаботано) except-блоком.
Кр.того, этот компонент не отвечает за перехват необработанных исключений, возникающих в доаолнительных потоках.
12 (2010-01-26 13:55:00) [3]смотря как вызывать ошибку.
Возможно, компилятор ее просто оптимизировал и тупо не вызывает
как например, код I:=0; R:=1/I; не будет вызывать ошибки.
но код
var
AC:TADOConnection;
ac:= TADOConnection.Create(self);
ac.ConnectionString:='Скайнет';
ac.Open;
вполне вызовет
oleg1963lora (2010-01-26 13:45:00) [4]Результат нулевой в том смысле, что данный компонент при исключении не вызывается. Я с ним ни разу не сталкивался, поэтому не знаю, что это и как его можно применить (если это вообще имеет смысл в данном случае)
Сергей М. (2010-01-26 13:26:00) [5]
> Результат нулевой
Что значит "нулевой" ?
И какой результат ты желал при этом иметь ?
oleg1963lora (2010-01-26 13:24:00) [6]
> turbouser © (26.01.10 13:16)
С базами давно не работал (с 1998 года:)) Это я для себя любимого.
oleg1963lora (2010-01-26 13:22:00) [7]
> Юрий Зотов © (26.01.10 13:05) [7]
Спасибо за совет :))).Успокоили. Я тут встретил упоминание компонента ApplicationEvents1Exception. Нельзя ли его применить? Насколько я понимаю обработчики исключений можно на него повесить.
Я попробовал написать в
procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception);. Результат нулевой.
begin
ShowMessage('Error!');
end;
turbouser (2010-01-26 13:16:00) [8]
>
> Oleg196lora (26.01.10 12:06)
А зачем 3 сообщения? Подряд? Чтобы юзер не расслаблялся?
Юрий Зотов (2010-01-26 13:05:00) [9]
> oleg1963lora (26.01.10 12:47) [4]
Крыжик снимать не надо. И избегать ничего не надо. Это совершенно нормальное поведение отладчика, все так и должно быть.
Нажать на кнопку, наверное, не очень трудно?
12 (2010-01-26 12:55:00) [10]EOLEException ему не нравится
>> путем добавления каких-либо строк
"//" перед этим поможет, 101%!
Сергей М. (2010-01-26 12:55:00) [11]
> крыжик снимать действительно страшновато
Страшно, но не смертельно)
Если мешает - снимай и не бойся)
oleg1963lora (2010-01-26 12:47:00) [12]
> Сергей М. © (26.01.10 12:08) [2]
> Сними крыжик в опциях дебагера "Stop on Delphi exceptions"
Спасибо за информацию. Однако крыжик снимать действительно страшновато, а то проглядишь что-нить такое - ящик водки не поможет :).
Однако, нельзя ли избежать выскакивания этого черта из табакерки путем добавления каких-либо строк. Ведь он выскакивает Не просто ТАК! Что-то ему не нравится.
Ega23 (2010-01-26 12:10:00) [13]Tools -> Debugger Options -> Language Exceptions -> Снять галку Stop On Delphi Exceptions
Но я крайне не рекомендую её выключать.
Игорь Шевченко (2010-01-26 12:08:00) [14]
> В чем здесь засада?
в том, что среда перехватывает исключения. нажми на continue в появляющемся диалоге
Сергей М. (2010-01-26 12:08:00) [15]Сними крыжик в опциях дебагера "Stop on Delphi exceptions"