
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
21.04.2003, 12:08
|
|||
|---|---|---|---|
Проблемы с "On Error GoTo label" |
|||
|
#18+
Есть примерно такой код: Надо проинсертить две таблицы, если какойто из них нет действие не должно происходить On Error GoTo label DoCmd.TransferDatabase acImport, "Microsoft Access", "c:\fin2003\fin2003_3.mdb", acTable, "rahunok", "rahunok" ... label: On Error GoTo Label1 DoCmd.TransferDatabase acImport, "Microsoft Access", "c:\fin2003\fin2003_3.mdb", acTable, "kod_nom_rozp", "kod_nom_rozp" .... Label1: ... Если нет первой таблици то первая ошибка пропускаеться(делает то что надо), и если нету второй, то выдает сообщение что нету такойто таблицы. А должно также пропустить эту ошибку. Наверное гдето надо сбросить первую ошибку. Подскажите что делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2003, 12:23
|
|||
|---|---|---|---|
|
|||
Проблемы с "On Error GoTo label" |
|||
|
#18+
Я обычно использую следующий алгоритм обработки ошибок: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. В твоем случае можно (наверное) просто вставить Err.Clear On Error Goto 0 После того места где могла бы быть ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2003, 13:24
|
|||
|---|---|---|---|
Проблемы с "On Error GoTo label" |
|||
|
#18+
Все сделал так, всеравно відает ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2003, 13:37
|
|||
|---|---|---|---|
|
|||
Проблемы с "On Error GoTo label" |
|||
|
#18+
Конструкция Код: plaintext 1. 2. 3. нежизнеспособна в принципе. После первой ошибки программа переходит в режим обработки ошибок и никакие обработчики (второй On Error) не действуют. Т.е. если в обработчике случается ошибка - она бросается вверх/валится в код. Нужно выходить из обработчика с помощью волшебного слова Resume. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.04.2003, 21:41
|
|||
|---|---|---|---|
|
|||
Проблемы с "On Error GoTo label" |
|||
|
#18+
Согласен с Лохом (простите, что без батюшки). Есть идея: поскольку там идут подряд два совершенно однотипных куска, то можно написать подпрограмму, в ней обработчик ошибок, и обращаться к ней два раза. При каждом очередном входе обработчик будет срабатывать как надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.04.2003, 08:44
|
|||
|---|---|---|---|
Проблемы с "On Error GoTo label" |
|||
|
#18+
А зачем городить огород? просто можно проверить есть ли там файл... Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.04.2003, 09:43
|
|||
|---|---|---|---|
|
|||
Проблемы с "On Error GoTo label" |
|||
|
#18+
2 vinni >Все сделал так, всеравно відает ошибку Че ты сделал из двух вариантов? Опять мне гадать? 2 All Что вы привязались к меткам. Есть нормальный способ обхода (почти как Try в VB.Net). Дал пример. Даю ище один. Все обрабатывается. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.04.2003, 09:50
|
|||
|---|---|---|---|
|
|||
Проблемы с "On Error GoTo label" |
|||
|
#18+
С On Error Resume Next разумеется все будет обрабатываться :) Только зачем тебе два раза On Error Resume Next писать? Напиши один раз в начале функции, и живи себе спокойно, никаких ошибок никогда не будет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.04.2003, 10:04
|
|||
|---|---|---|---|
|
|||
Проблемы с "On Error GoTo label" |
|||
|
#18+
2 Лоху Позорному Из хелпа: On Error GoTo 0 - Disables any enabled error handler in the current procedure. Убираем 2-ой Resume Next - получаем ошибку. Так что жить спокойно не получиться. А вот err.clear - можно было бы и не писать - но так красивее и правильней (IMHO) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.04.2003, 10:05
|
|||
|---|---|---|---|
|
|||
Проблемы с "On Error GoTo label" |
|||
|
#18+
Так зачем тебе On Error Goto 0? Чтобы потом On Error Resume Next писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.04.2003, 10:13
|
|||
|---|---|---|---|
|
|||
Проблемы с "On Error GoTo label" |
|||
|
#18+
И еще раз, чтобы о разных вещах не спорить. В том коде, который привел винни, проблема в том, что если мы находимся внутри обработчика ошибки, то накакие On Error'ы не действуют (в том числе On Error Resume Next). Решать эту проблему можно по разному - или глобальным Resume Next, или нормальным обработчиком типа Public Sub Test() On Error Goto Err_Handler DoCmd.TransferDatabase ' В 1-й файл DoCmd.TransferDatabase ' Во 2-й файл Exit Sub Err_Handler: If err.Number=... Then' Файл не найден Resume Next Else err.Raise err.Numer,,err.Description End If End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.04.2003, 10:30
|
|||
|---|---|---|---|
|
|||
Проблемы с "On Error GoTo label" |
|||
|
#18+
>Так зачем тебе On Error Goto 0? Чтобы потом On Error Resume Next писать? Точно! Пока отлаживаю - не знаю где что вылезет. Есть обрабатываемая ошибка - ОК, нет обрабатываемой ошибки - надо обработать - ставлю On Error Resume Next IIF Err.Number.... И так далее On Error Resume Next - вещь вредная и опасная. Запросто можно пропустить серьезную (не обрабатываемую) ошибку. On Error Goto 0 - решает эту проблему. Так что, извините, что сразу не объяснил (думал все знают ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=45&tablet=1&tid=1681744]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 333ms |

| 0 / 0 |
