Главная страница
    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.01 c
14-100428
aga
2003-03-14 11:44
2003.03.31
*.sit


4-100513
Rouse_
2003-02-02 16:56
2003.03.31
Закрытие приложения


4-100519
Skolt
2003-01-31 00:15
2003.03.31
Запуск программы после Internet Explorer


1-100297
AndreyR
2003-03-19 15:08
2003.03.31
Как обратиться к адресной книге ms office?


7-100473
tulen
2003-02-02 14: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
Английский Французский Немецкий Итальянский Португальский Русский Испанский