Не работает OnError?

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Не работает OnError?

Сообщение Snussi » 23.11.2006 (Чт) 16:41

Здравствуйте, господа!
Такой вопрос:
Есть у меня текстовое поле. К нему прописан следующий обработчик:
Код: Выделить всё

Private Sub txtEdit_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim bCancel As Boolean
    Dim iIndex As Integer
    Dim strQuery As String
    Dim sDate As String
    Dim strError As String
On Error GoTo CatchError
    If KeyCode = vbKeyReturn Then
        KeyCode = 0
        strError = "22-1"
        bCancel = False
        'BC2 = False
        strError = "22-2a"
        txtEdit_Validate bCancel
       
        strError = "22-3"
        If bCancel = True Then Exit Sub
        strError = "23"
    end if
finish:
    Exit Sub
CatchError:
    MsgBox "TXTEDIT_KEYDOWN_ERR " + err.Description + " AddInfo=" + strError
    GoTo finish
End Sub

Private Sub txtEdit_Validate(ByRef Cancel As Boolean)
On Error GoTo CatchError
' Мой суперкод :)

finish:
    Exit Sub
CatchError:
    MsgBox "TXTEDIT_VALIDATE_ERR " + err.Description + " AddInfo=" + strError + vbCrLf + rsInv.Filter
    GoTo finish



Часть кода я, конечно, поскипал...
При запуске в некоторых случаях программа валится с кодом 22-2а (strError) и ошибкой " 13 - Type Mismatch".
Как я понимаю, если бы мисматч был в коде валидейта, то сработал бы его OnError. Более того, в методе KeyDown я отключал обработчик ошибок - прогу тогда просто выбивало.
Похоже, ошибка в самой строке txtEdit_Validate bCancel.

Т.к. это ActiveX Exe, то я не могу (а скорее - не умею) подключиться отладчиком и посмотреть - что же валит прогу.

Может, кто-нибудь сталкивался с чем-нибудь подобным?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Не работает OnError?

Сообщение tyomitch » 23.11.2006 (Чт) 16:43

Snussi писал(а):Т.к. это ActiveX Exe, то я не могу (а скорее - не умею) подключиться отладчиком и посмотреть - что же валит прогу.

Ага. В одном экземпляре VB запускаешь сервер, в отдельном -- клиента.
И отлаживаешь в своё удовольствие.
Изображение

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 23.11.2006 (Чт) 16:56

Беда в том, что сервер - это ERP система, вызывающая данный ActiveX через свои методы.
Кроме того (и в этом самое гадство) - у меня все работает, у клиента нет.
Могут быть причины несрабатывания OnError'a?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.11.2006 (Чт) 16:59

Ты можешь в свойствах проекта задать (при запуске) ожидание создания объекта. Тогда (если сервер установлен на твоей машине) ты сможешь отлаживать.
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 25.11.2006 (Сб) 23:05

Snussi писал(а):Беда в том, что сервер - это ERP система, вызывающая данный ActiveX через свои методы.
Кроме того (и в этом самое гадство) - у меня все работает, у клиента нет.
Могут быть причины несрабатывания OnError'a?



Причин может быть очень много !
Добавь пошаговый Log к своему проекту и сразу найдеш ошибку.
//<-
Mit freundlichen Grüßen
//->

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.11.2006 (Сб) 23:28

Для таких случаев отладки я бы все-таки советовал использовать API OutputDebugString в сочетании с утилитой DbgView, это удобнее, чем вывод логов в файл.
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 25.11.2006 (Сб) 23:40

Все зависит от того насколько технически подкован клиент.
Но самое простое и с меньшим гемором это LOG.

P.S. Код кстати ниже планки :cry:
см использвание Validate
//<-
Mit freundlichen Grüßen
//->

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 27.11.2006 (Пн) 11:23

А что не так с кодом?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.11.2006 (Пн) 11:32

Да не очень правильный код.
Во-первых, из обработчика возвращаться надо по Resume, а не GoTo.
Во-вторых, MsgBox в Validate без дополнительных проверок -- это нехорошо для пользователя.
Lasciate ogni speranza, voi ch'entrate.

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 27.11.2006 (Пн) 11:38

1. Мне не надо возвращаться в случае ошибки - надо только сказать, что она возникла - и выходить из процедуры.
2. А о каких проверках идет речь? - я написал, что часть кода Validate (точнее, весь код) пропущена.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Не работает OnError?

Сообщение Vi » 28.11.2006 (Вт) 7:34

Snussi писал(а):
Код: Выделить всё
CatchError:
    MsgBox "TXTEDIT_VALIDATE_ERR " + err.Description + " AddInfo=" + strError + vbCrLf + rsInv.Filter
    GoTo finish
При запуске в некоторых случаях программа валится с кодом 22-2а (strError) и ошибкой " 13 - Type Mismatch".
Как я понимаю, если бы мисматч был в коде валидейта, то сработал бы его OnError. Более того, в методе KeyDown я отключал обработчик ошибок - прогу тогда просто выбивало.
Похоже, ошибка в самой строке txtEdit_Validate bCancel.


Ошибка в коде обработчика CatchError процедуры txtEdit_Validate. Произошла некая ошибка в основном коде txtEdit_Validate, управление передалось в обработчик CatchError, и в нем снова случилась ошибка => управление будет передано первому обработчику выше по стеку вызовов. И если его нет, программа завершится.

PS
Я бы советовал использовать & вместо + при сложении строк.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 28.11.2006 (Вт) 9:20

Логично.
Только не очень могу понять, где случится ошибка?
Насчет "&" - понял, правда до сих пор не могу понять разницы :(
Разве что при "+" генерятся ошибки при попытке сложить строку с числом...

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 28.11.2006 (Вт) 12:06

Snussi писал(а):Логично.
Только не очень могу понять, где случится ошибка?
Насчет "&" - понял, правда до сих пор не могу понять разницы :(
Разве что при "+" генерятся ошибки при попытке сложить строку с числом...


Recordset.Filter - > Variant со всеми вытекающими последствиями
подумай сам ... :wink:
//<-
Mit freundlichen Grüßen
//->

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.11.2006 (Ср) 0:55

Snussi писал(а):Насчет "&" - понял, правда до сих пор не могу понять разницы :(

Это чтобы избежать лишних неявных преобразований.
Правда в VB оптимизатор обычно достаточно сообразительный, чтобы не обращать внимания.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList