|
|
|
Проблемы с "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:08 |
|
||
|
Проблемы с "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, 12:23 |
|
||
|
Проблемы с "On Error GoTo label"
|
|||
|---|---|---|---|
|
#18+
Все сделал так, всеравно відает ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2003, 13:24 |
|
||
|
Проблемы с "On Error GoTo label"
|
|||
|---|---|---|---|
|
#18+
Конструкция Код: plaintext 1. 2. 3. нежизнеспособна в принципе. После первой ошибки программа переходит в режим обработки ошибок и никакие обработчики (второй On Error) не действуют. Т.е. если в обработчике случается ошибка - она бросается вверх/валится в код. Нужно выходить из обработчика с помощью волшебного слова Resume. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2003, 13:37 |
|
||
|
Проблемы с "On Error GoTo label"
|
|||
|---|---|---|---|
|
#18+
Согласен с Лохом (простите, что без батюшки). Есть идея: поскольку там идут подряд два совершенно однотипных куска, то можно написать подпрограмму, в ней обработчик ошибок, и обращаться к ней два раза. При каждом очередном входе обработчик будет срабатывать как надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2003, 21:41 |
|
||
|
Проблемы с "On Error GoTo label"
|
|||
|---|---|---|---|
|
#18+
А зачем городить огород? просто можно проверить есть ли там файл... Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2003, 08:44 |
|
||
|
Проблемы с "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:43 |
|
||
|
Проблемы с "On Error GoTo label"
|
|||
|---|---|---|---|
|
#18+
С On Error Resume Next разумеется все будет обрабатываться :) Только зачем тебе два раза On Error Resume Next писать? Напиши один раз в начале функции, и живи себе спокойно, никаких ошибок никогда не будет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2003, 09:50 |
|
||
|
Проблемы с "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:04 |
|
||
|
Проблемы с "On Error GoTo label"
|
|||
|---|---|---|---|
|
#18+
Так зачем тебе On Error Goto 0? Чтобы потом On Error Resume Next писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2003, 10:05 |
|
||
|
Проблемы с "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:13 |
|
||
|
Проблемы с "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 - решает эту проблему. Так что, извините, что сразу не объяснил (думал все знают ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2003, 10:30 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32144967&tid=1681744]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 314ms |

| 0 / 0 |
