Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-100217
VP
2003-03-20 12:43
2003.03.31
Эмуляция двойного клика на объекте.


14-100398
Timber Wolf
2003-03-13 17:44
2003.03.31
А может у кого есть?


3-100145
АндрейБ
2003-03-12 02:38
2003.03.31
Поиск в БД


3-100178
edst
2003-03-13 09:12
2003.03.31
Где находится isc4.gdb в Linux


14-100437
dimich1978
2003-03-13 10:44
2003.03.31
Прикол





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский