Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странность в работе 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"


Наверх

Титульная страница Поиск, карта сайта Написать письмо