Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Название текущей процедуры

1.8K
13 апреля 2007 года
rSolanov
106 / / 04.05.2005
Здравствуйте! Подскажите, пожалуйста, как внутри программы можно узнать название исполняемой процедуры или функции?
Может ли такие данные содержаться в RTTI-информации? А если может, то как вытащить?
497
13 апреля 2007 года
IL84
267 / / 24.04.2003
А зачем?? Название процедуры известно на этапе компиляции.
1.8K
13 апреля 2007 года
rSolanov
106 / / 04.05.2005
Дело в том, что имеется уже написанная программа, работающая с БД, в которой часто происходят исключения. Поэтому, ловя исключение в защищенном блоке, хотелось бы автоматически записывать в лог-файл название процедуры, в которой произошло исключение.
497
13 апреля 2007 года
IL84
267 / / 24.04.2003
Можно в начале каждой функции сохранять название этой функции в специальной переменной, а в обработчике исключения читать эту переменную.
10
13 апреля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Delphist_Roman
Дело в том, что имеется уже написанная программа, работающая с БД


Компоненты для БД какие?

4.6K
14 апреля 2007 года
Tokolist
268 / / 22.03.2007
Цитата: Delphist_Roman
Здравствуйте! Подскажите, пожалуйста, как внутри программы можно узнать название исполняемой процедуры или функции?
Может ли такие данные содержаться в RTTI-информации? А если может, то как вытащить?



Думаю возможно ибо DeDe как-то с этим справляется. А вот как он это делает - другой вопрос :)

257
14 апреля 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=Tokolist]Думаю возможно ибо DeDe как-то с этим справляется. А вот как он это делает - другой вопрос[/quote]
как DeDe это делает можно посмотреть в его сорцах, которые найти в сети не так уж и сложно.
10
14 апреля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Tokolist
Думаю возможно ибо DeDe как-то с этим справляется. А вот как он это делает - другой вопрос :)


Вы все пытаетесь решить проблему в том виде, в каком предложил автор, что в данном случае не есть правильно. На самом деле проблема-то в другом.

Цитата: Delphist_Roman
Дело в том, что имеется уже написанная программа, работающая с БД, в которой часто происходят исключения. Поэтому, ловя исключение в защищенном блоке, хотелось бы автоматически записывать в лог-файл название процедуры, в которой произошло исключение.


Когда перед нами стояла аналогичная задача, мы решили её по-другому.

257
14 апреля 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=Freeman]Когда перед нами стояла аналогичная задача, мы решили её по-другому.[/quote]
Freeman подскажи тогда, как решалась подобная задача.
10
14 апреля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: kosfiz
Freeman подскажи тогда, как решалась подобная задача.


Преамбула. Разрабатывался проект, который должен был внедряться и работать сразу в десятке мест одновременно (в пределах города). В некотором смысле данные были разрознены, и полностью воссоздать условия работы программы в процессе разработки было затруднительно. Плюс постоянный цейтнот: "проект должен быть сдан вчера".

Амбула. В результате мозгового штурма было решено завести режим журналирования (логирования), в котором сохранять в файле все запросы, отсылаемые на сервер. Записи должны выглядеть следующим образом:

 
Код:
/*<дата-время> <имя компонента (запроса)>*/
<текст SQL>
<если позволяет компонент, параметры>

Если произошло исключение, добавлялось:
 
Код:
/*<дата-время> <тип исключения>*/
<текст исключения>

Ясен пень, что если журналирование велось последовательно, текст исключения в журнале следовал непосредственно за некорректным запросом. При возникновении ошибок и невозможности решить их на месте, группе внедрения было достаточно привезти разработчикам журнал, по которому было легко понять, что делал пользователь, и как реагировала программа.

Реализация. Для этой цели был специально разработан компонент TLog, сохраняющий журнал в автоматическом режиме - его было достаточно кинуть на модуль данных, и потом пользоваться методами. Все запросы (TxxxQuery) имели обработчик BeforeOpen и BeforeRefresh (или вызывали в числе прочих действий), записывающий нужные данные в журнал. Для журналирования исключений пришлось писать хитрый метод на Application.OnException, чтобы не попасть в клинч. Впоследствии, при переходе на ODAC, журналирование было возложено на специализированный компонент TOraSQLMonitor, обрабатывающий и исключения тоже.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог