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

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

"Глобальный" перехват исключений [D5, Win2k, WinXP]


Rav ©   (2005-10-19 20:55:00) 

Доброго времени суток, уважаемые!
Суть проблемы такова: есть программа для работы с БД, при работе естественно могут возникать различные исключения, которые обрабатываются в разных местах и по разному. Все было прекрасно, пока к данной проге я не прикрутил журнал работы. Возникла проблема: как "перехватить" любое (или почти любое, меня болше интересуют БД) исключение, возникающее в процессе работы программы, но не обрабатывать его, а просто записать сообщение в журнал работы, а затем передать его дальше, "по месту назанчения"?
Может быть есть ссылки на статьи. где почитать по теме? ... я не нашел :(

Заранее спасибо за помощь?


Rav   (2005-10-20 20:16:00) [1]


> Кроме как писать сразу правильно.

Правильно? Сразу все не предусмотришь....

И все же я нашел способ облегчить себе задачу...
Во всех обработчиках я использовал функцию вывода сообщения - в нее и встроил указатель на процедуру записи в лог. А для необработанных - OnException.


serthgadfhw   (2005-10-20 11:18:00) [2]

http://sourceforge.net/project/showfiles.php?group_id=47514


Lin7   (2005-10-20 10:43:00) [3]


> Rav   (20.10.05 06:34) [5]
> не совсем выход - опять же: проверять и править все обработчики.
> ...
> неужели нет способа? :(

Компонент ExWatcher тебя выручит. :)


ЮЮ   (2005-10-20 07:06:00) [4]

>неужели нет способа ? :(
способа изменить поведение программы, не переписывая кода?
Естественно, нет!!!
Кроме как писать сразу правильно.


Rav   (2005-10-20 06:34:00) [5]

не совсем выход - опять же: проверять и править все обработчики....
неужели нет способа? :(


TuborgBeer   (2005-10-19 22:41:00) [6]


> Rav   (19.10.05 22:17) [3]
>
> Например: ошибку при удалении данных из таблицы Application.
> OnException в следующем куске кода "не увидит" никогда:


Неправильно мыслишь:
try
      DbGrid.DataSource.DataSet.Delete;
      AddToDbLog(DbGrid.DataSource.DataSet.Tag, urUser.intUserId, Format(logRefDel, [Self.Caption, recID, recName]));
    except
      on E: Exception do
   begin
      ErrorDeleteMessage(DbGrid.DataSource.DataSet.Name,
E);
      raise;
   end;

    end;


Rav   (2005-10-19 22:17:00) [7]

Например: ошибку при удалении данных из таблицы Application.OnException в следующем куске кода "не увидит" никогда:

     try
       DbGrid.DataSource.DataSet.Delete;
       AddToDbLog(DbGrid.DataSource.DataSet.Tag, urUser.intUserId, Format(logRefDel, [Self.Caption, recID, recName]));
     except
       on E: Exception do ErrorDeleteMessage(DbGrid.DataSource.DataSet.Name, E);
     end;

Проблему решить в одном данном месте проще некуда: добавить еще AddToDbLog в блоке обработки. Беда только - таких мест ой как много, прога довольно большая :(


Rav   (2005-10-19 22:09:00) [8]


> Application.OnException

Не подходит :( Уже пытался :(
Application.OnException обрабатывает исключения, не перехваченные "местными" обработчиками, а мне нужно перехватить ДО "местной" обработки, а затем вернуть туда же.


Sam Stone   (2005-10-19 21:54:00) [9]

Application.OnException


Наверх

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