|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
Добрый день! Нужен лог ошибок, в котором записано какой sub был вызван в момент появления ошибки. Как узнать имя вызванного sub? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2019, 05:49 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
Стесняюсь спросить:а зачем? Если ошибка в коде то это не код Если ошибка возникает в результате действий пользователя то код и пишется для того чтоб этого избежать (часто "защита от дурака" занимает намного больший объем чем "полезный" код) обработчик ошибок обязан присутствовать в сколь-нибудь "серьезном" коде. Единственное-отключение питания. В зависимости от важности информации применяют ИБП ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2019, 12:35 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
quickstarДобрый день! Нужен лог ошибок, в котором записано какой sub был вызван в момент появления ошибки. Как узнать имя вызванного sub? В обработчике ошибок и напишите имя процедуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2019, 14:12 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
quickstar, Да и ошибка-ошибке рознь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2019, 14:14 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
ROI, вот и нужно понять как имя процедуры через VBA узнать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2019, 16:38 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
sdku, чтобы знать где именно ошибка возникла. чтобы опираться на факты, а не на мнение пользователя о том, что произошло. открыл лог и посмотрел в какой процедуре ошибка была. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2019, 16:40 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
Может есть метод как узнать строку, на которой произошла ошибка? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2019, 16:59 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
quickstarsdku, чтобы знать где именно ошибка возникла. чтобы опираться на факты, а не на мнение пользователя о том, что произошло. открыл лог и посмотрел в какой процедуре ошибка была.Вы говорите об этапе отладки.А при использовании приложения не должно быть никаких ошибок. Для этого и создан обработчик ошибок.Если она случится, а обработчика нет,что произойдет? Поэтому-то он и нужен.Какие при этом выполнятся действия зависит только от Вас (В том числе и запись кода ошибки и имя объекта в таблицу ). Лично мне не известно свойство которое бы возвращало имя процедуры. Да и вся Ваша затея весьма сомнительна-после передачи в работу проекта возникновение ошибок-плохая(никудышняя) программа. тынц (Много ошибок,которые останавливают работу программы Вы встречали в Ворде или Ёкселе) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2019, 20:21 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
quickstarНужен лог ошибок, в котором записано какой sub был вызван в момент появления ошибки. Как узнать имя вызванного sub? - в момент появления ошибки уже никакой sub не вызывается, программа вылетела и всё... - по идее в каждой стремной процедуре должен быть тот самый обработчик ошибок, который и может при желании писать лог вместо вылета программы, вот один из простых примеров: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
sdku(часто "защита от дурака" занимает намного больший объем чем "полезный" код) Ну почти всё так как уже говорили, главное чтобы программа говорила что не так, а не тупо вылетала... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2019, 21:49 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
quickstarМожет есть метод как узнать строку, на которой произошла ошибка?Err.Source Если у строки есть метка - именно она и будет в этом свойстве. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 07:18 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
Стоп, вру. Это Access - т.е. err.source содержит имя процедуры/функции, в которой возникла ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 07:27 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
AkinaСтоп, вру. Это Access - т.е. err.source содержит имя процедуры/функции, в которой возникла ошибка.нее, это будет имя vba-проекта базы (оно не обязательно совпадает с именем БД) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 07:52 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
quickstarМожет есть метод как узнать строку, на которой произошла ошибка?метод есть - erl Но для того что бы она возвратила что-то полезное, нужно что бы строка на которой произошла ошибка имела числовую метку Типа этого Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 07:57 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
court, Зачем такие извращения делаем стандартный обработчик ошибок в 99 случаех хватает Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
это для форм. для модулей убираем Me.Name ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 08:20 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
ROI, И в чём "извращение" ? ТС хочет "запилить" глобальный обработчик ошибок, разве ещё кто-то не понял ? Вполне похвальное желание, имхо, все через это проходили :) Плюсы вполне очевидные: - везде, во всех подпрограммах, будет стандартный обработчик ошибок, который можно даже в шаблон Sub/Function вставить и забыть о нём навсегда. - обработчик ошибок один для всего, а там уже делай в нём что хочешь, - хочешь в лог пиши, хочешь смс-ку разработчику отправляй. - в режиме отладки - реагировать так, а в нормальном, рабочем режиме - иначе. И весь перевод из одного режима в другое, - это изменение значения одной константы - можно предусмотреть возврат из обработчика какого-то кода, по которому "упавшая" процедура будет действовать дальше В общем, что-то типа такого Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Но, реально, в ВБА, сделать такое "по-простому" не получится. Разве что, писать какой-то парсер модулей, который будет "бегать" по процедурам, нумеровать строки, определять наименование подпрограммы и прописывать блок обработки ошибок ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 09:12 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
Слышал про MZTools. Может автору поможет. Сам не пользовался. Вот: Автоматическая вставка обработчиков ошибок в модули Вставка комментариев в заголовок процедуры, с автоматической вставкой времени, имени модуля и процедуры, возможностью указать автора процедуры Автоматическая нумерация строк кода Снятие нумерации со строк кода Создание шаблонов часто используемых кодов ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 10:42 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
все уже написано кстати пользую, модифицированный под себя конечно, но суть та же в обычных процедурах по err.raise улетаем в головную, где происходит обработка события ошибки - выход из каких-то программ(закрытия Excel скажем, запись в лог и т.д. и т.п.) все это используется для модулей класса и аналогичных вещей где одна функция вызывает кучу подфункций. создатель назвал его "Всплывающий обработчик ошибок". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 11:20 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
courtНо, реально, в ВБА, сделать такое "по-простому" не получится. Разве что, писать какой-то парсер модулей, который будет "бегать" по процедурам, нумеровать строки, определять наименование подпрограммы и прописывать блок обработки ошибок Опять повторюсь --Зачем такие извращения!? Alecko вам даже ссылку дал (изучайте) Что доктор прописал. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 12:14 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
Вообще не понимаю зачем весь этот огород с наворотами по обработке ошибок, да еще с указанием строки... Если в этом есть у кого очень острая необходимость, советую срочно просто поменять профессию, это не ваша стезя... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 13:16 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
vmagВообще не понимаю зачем весь этот огород с наворотами по обработке ошибок, да еще с указанием строки... Честно говоря, не ожидал от Вас такого ответа :) Эти навороты обязательно нужны в любой более-менее сложной программе, передаваемой заказчику, который не разбирается в Акцессе и не полезет в отладчик. Это просто необходимо для качественной поддержки приложения. Обработчик должен выдать подробную информацию, которую можно послать скриншотом разработчику для быстрого определения источнока ошибки. Ни одна более-менее сложная программа не обходится без ошибок, это сделать практически не реально. К тому же бывают не зависящие от качества написания кода ошибки: диска, сети, повреждения файлов, корявые данные и т.д. и т.п. - всех ситуаций не предусмотришь и все баги выловить тоже практически не реально. Я всегда передаю заказчику программы, которые выводят подробную информацию об ошибке, включая стек вызова процедур с номерами строк в каждой процедуре. Без использования MZ-Tools сделать корректный обработчик быстро нельзя, ибо нужно нумеровать строки и вписывать имя модуля и имя процедуры текстом, т.к. получить эти данные без запущеного редактора VBA не возможно, это абсолютно точно, изучал вопрос подробно. Тулза позволяет это сделать одним нажатием клавиши. Могу привести здесь мои шаблоны обработчиков и саму процедуру обработки, обкатанные на многих программах и клиентах. Типов обработчиков как минимум нужно 2 - "всплывающий" и "клиентский" - выводящий собственно сообщение об ошибке. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 14:43 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
MrShin, да, покажите, пожалуйста. Я хочу пользователя всего-лишь уведомить, что "ошибка записана в лог", а весь необходимый набор данных отправляется мне в MySQL. От данных о компе и сборке Access до строки, в которой произошла ошибка. Цель проста - без общения с пользователем понимать источник и причину бага. Пользователь рассказывает свое мнение. а нам нужно опираться на факты. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 15:05 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
quickstarMrShin, да, покажите, пожалуйста. слепой вы чёли. https://www.sql.ru/forum/1283697/obrabotka-oshibok-pri-vyzove-procedury-iz-procedury ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 15:44 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
vmagВообще не понимаю зачем весь этот огород с наворотами по обработке ошибок, да еще с указанием строки...+100500 MrShinНи одна более-менее сложная программа не обходится без ошибок, это сделать практически не реально. К тому же бывают не зависящие от качества написания кода ошибки: диска, сети, повреждения файлов, корявые данные и т.д. и т.п..Еще как обходится. Разве что непредвиденные ошибки,которые и возникают по вышеперечисленным причинам (достаточно знать что она возникла,без разницы где-потому как возникнуть может в любом месте, и надо разбираться с "железом" или сетью).А все остальное-выполненный небрежно(или вообще не выполненный) этап разработки называемый ОТЛАДКА(который зачастую очень трудоемок,сложен и занимает много времени-а все о чем говорится в этом топике есть попытка переложить часть этого этапа на пользователя и РС)-передавать такую программу заказчику ой как рано ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 16:16 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
Я использую MZ-Tools 8, он платный, но есть бесплатный V3, там шаблоны аналогичные. Вот наиболее используемый шаблон MZ-Tools для вывода сообщения об ошибке, используется в процедурах, которые вызываются системой и могут взамидействовать с пользователем - события обычно Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Здесь $P Код: _ELEMENT_NAME 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Задача этого обработчика - только добавить в сообщение об ошибке дополнительную информацию о месте ошибки и отправить ошибку выше. Конструкция Код: vbnet 1.
останавливает выполнение для отладки до передачи ошибки выше. Соотвественно, константы STOP_AT_ERROR и IS_DEV - просто булевские, в режиме отладки обе должны быть True, в продакшне просто меняю значение IS_DEV на False и остановок с перебрасыванием в редактор не будет. Третий тип - всплвающий обработчик с финальным кодом, который должен быть выполнен в любом случае, обычно это закрытие курсоров: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Финальный код вставляется как и в случае первого обработчика сразу после On Error Resume Next Ну и, собственно процедура записи в базу и вывода ошибки на экран: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Процедура не зациклится, если возникнет ошибка при ее выполнении (например, если таблица с логами ошибок будет недоступна) На картинке один из примеров выдачи, когда ошибка возникла на 3-м уровне вызовов процедур, при этом в самой верхней процедуре, взаимодействующей с пользователем (cmdAccept_Click) были не пронумерованы строки, поэтому самый последний символ - 0, а не номер строки. Т.к. в этой процедуре было несколько сот строк, то определить причину было сложно, поэтому стараюсь не забывать нумеровать строки ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 16:20 |
|
Как узнать имя sub
|
|||
---|---|---|---|
#18+
sdkuэтап разработки называемый ОТЛАДКА Кроме отладки вобщем случае есть этап тестирования, котрый обычно выполняется не разработчиком, а тестером, котрый может не занть VBA совсем, и подробная выдача жизненно необходима. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2019, 16:24 |
|
|
start [/forum/topic.php?fid=45&msg=39848071&tid=1610535]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 408ms |
0 / 0 |