Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

"Глобальный" перехват исключений   Найти похожие ветки 

 
Rav   (2005-10-19 20:55) [0]

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

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


 
Sam Stone ©   (2005-10-19 21:54) [1]

Application.OnException


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


> Application.OnException

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


 
Rav   (2005-10-19 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 ErrorDeleteMessage(DbGrid.DataSource.DataSet.Name, E);
     end;

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


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


> 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-20 06:34) [5]

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


 
ЮЮ ©   (2005-10-20 07:06) [6]

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


 
Lin7 ©   (2005-10-20 10:43) [7]


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

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


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

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


 
Rav   (2005-10-20 20:16) [9]


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
4-1126204799
alexa
2005-09-08 22:39
2005.11.13
DlgDirList


14-1130154592
Del_programmer
2005-10-24 15:49
2005.11.13
Другая жизнь...


8-1118270419
ДЫМ
2005-06-09 02:40
2005.11.13
Нужна быстрая графическая библиотека, чтобы рисовать примитивы


3-1128508944
dragon_dp
2005-10-05 14:42
2005.11.13
Как узнать существует ли таблица в БД?


14-1130042170
SergP.
2005-10-23 08:36
2005.11.13
MSWORD