Форум: "Основная";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
ВнизОбработка exception ов из главного модуля приложения Найти похожие ветки
← →
Helldriver (2003-04-29 23:34) [0]Есть приложение, в главном модуле которого (файле проекта) блок CreateForm оформлен в скобки try...except (для отлова эксепшенов, возникающих в процессе создания форм). Сделано это для того, чтобы по критическому эксепшену приложение могло показать юзеру чего-нибудь и вывалиться без продолжения создания остальных форм (создание отражается ProgressBar"ом). Теперь начинается самое интересное - сначало эта констракшн работала... теперь нет! :) Вопрос - что я мог наковырять в настройках Delphi (ибо ни в конструкторы форм, ни в их OnCreate"ы никаких существенных изменений не вносилось и обработчиков ошибок внутри них нет - все должно уходить приложению), что это перестало работать?
Для информации - основным источником эксепшена является TDatabase, связанный через драйвер ODBC с MS SQL Server 7, хотя врядли это поможет :)).
← →
Юрий Зотов (2003-04-30 06:40) [1]Вероятно, где-то, где раньше возникало исключение, был добавлен свой блок try-except без raise. В итоге исключение гасится и во внешний блок не поступает.
← →
Helldriver (2003-04-30 19:33) [2]В том-то и дело, что потенциальные источники эксепшенов своих обработчиков не имеют и, по всем параметрам, возникающее исключение должно передаваться в вызывающий блок, т.е. файл проекта, но этого не происходит. Уже была опробована конструкция с принудительным отловом искючения (т.е. создания обработчика в OnCreate формы вокруг потенциального источника исключения и "генерации исключения по исключению") в любом случае, при компиляции проекта блок except в файле проекта просто игнорируется. Я бы все понял, но ведь работало же!
У меня подозрение, что одной из бессонных ночей я что-то перемудрил в настройках Delphi (ибо, как я уже говорил, существенных изменений со времени тестирования этой конструкции ни в файл проекта ни в обработчики событий создания форм не вносилось), т.к. пробуя совершенно новый проект примерно такого содержания:
Project1.pas:
uses Forms, DBTables, Dialogs, Unit1 in "Unit1.pas";
begin
Application.Initialize;
try
Application.CreateForm(TForm1, Form1);
except
on EDBEngineError do MessageDlg("Error!", mtError, [mbOK], 0);
Application.Terminate;
end;
Application.Run;
end.
Unit1.pas:
procedure TForm1.FormCreate(Sender: TObject);
begin
Database1.Open;
end;
при возникновении исключения получаю тот же результат - оно не ловится. А должно! :)
← →
Ученик (2003-05-01 10:53) [3]Будет ловиться, если в Инспекторе объектов Delphi свойство Database1.Connected = True, а так оно ловиться здесь
{ Forms.pas }
procedure TCustomForm.DoCreate;
begin
if Assigned(FOnCreate) then
try
FOnCreate(Self);
except
if not HandleCreateException then
raise;
end;
if fsVisible in FFormState then Visible := True;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c