Форум: "Основная";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];
ВнизОбработка ошибок Найти похожие ветки
← →
sapsi (2003-03-19 09:03) [0]ДОбрый день
Как обработать любую ошибку на уровне приложения?
При возниконовении любой ошибки перезапустить программу.
Программа состояит из одной формы, есть коннекты к базам, преобразование строк и т.п.
В случае ошибки можно, например, сделать Destroy формы и снова create?
Подскажите, как лучше.
Спасибо.
← →
Юрий Зотов (2003-03-19 09:12) [1]Смотря, что понимается под перезапуском. Если в буквальном смысле, то, например, можно подправить DPR:
uses
..., Windows;
begin
try
... // Весь стандартный текст
except
... // Запуск собственного EXE
raise
end
end.
← →
sapsi (2003-03-19 09:27) [2]а первый экземпляр программы останется в памяти при этом?
← →
Smithson (2003-03-19 09:56) [3]А то! Но при значительной ошибке виндоус как правило либо молча убивает приложение, либо выводит долгие предложения пользователю закрыть этут балалайку (зависит от настроек).
← →
sapsi (2003-03-19 10:06) [4]Допустим, в form1 при каком-то событии есть деление на нуль.
Если в dpr написать что-то вроде
try
Application.Initialize;
Application.CreateForm(Tform, form1);
Application.Run;
except
begin
form1.Destroy;
Application.CreateForm(Tform, form1);
end;
То будет ли этот код перехватывать ошибки - думаю нет.
Что нужно сделать, чтоб все ошибки отловить?
← →
Лёшик (2003-03-19 10:19) [5]Это можно здалав так в dpr пишем
type
TExceptClass=class
public
procedure GlobalException(Sender: TObject; E:Exception);
end;
procedure TExceptClass.GlobalException(Sender: TObject; E:Exception);
begin
;//здесь можем запустить приладу и зделать Halt;
end;
begin
With TExceptClass.Create do begin
Application.OnException:=GlobalException;
Application.Initialize;
...
end.
точно не помню может быть ещё надо будет в uses добавить Forms, Windows. должно всё работать если что обращайся :)
← →
REA (2003-03-19 10:29) [6]InterbaseGuardian :) Повесить вторую программу, которая будет запускать первую. Ну а первая вторую...
← →
AlexVit (2003-03-19 12:31) [7]Я делал так и это работает:
procedure TForm1.FormCreate(Sender: TObject);
begin
//...
Application.OnException := AppException;
//...
end;
procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
//...
Application.Terminate;
ShellExecute(0, "open", "путь к проге и ее имя", nil, nil, SW_SHOWDEFAULT) // снова запускаем прогу;
//...
end;
Т.е. прога сама себя перезапускает, если возникла ошибка.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c