VB6 - Как отловить исключение или ошибку во время выполнения - PullRequest
4 голосов
/ 19 января 2010

Я разработал приложение в VB6. В среде клиента это вызывает ошибки времени выполнения, которые я не могу воспроизвести в отладчике. Есть ли способ получить трассировку стека или место ошибки? Я создал файл журнала и

Я использовал Err.Description, Err.Source но это дает пустые значения.

Пожалуйста, помогите мне.

 my method(......

    On Error GoTo Error_Handler

             .........
    Error_Handler : 
                  writeToLogFile(Err.Source,Err.Description)

Ответы [ 4 ]

4 голосов
/ 19 января 2010

Вы, вероятно, что-то сделали, чтобы очистить объект Err перед записью в файл журнала. Это очень легко сделать. Что вы хотите сделать, это как только вы обнаружите ошибку, захватите сообщение об ошибке, прежде чем делать что-нибудь еще. Затем передайте сообщение об ошибке любой используемой процедуре регистрации. E.g.:

Dim sMsg As String

On Error Goto ErrHandler

' ...code here...

Exit Function

ErrHandler:
sMsg = "Error #" & Err.Number & ": '" & Err.Description & "' from '" & Err.Source & "'"
GoLogTheError sMsg
2 голосов
/ 15 сентября 2011

Кстати, спасибо за ответы ваших парней, помогающие мне. Я опоздал на полвека на игру VB6. Я не делаю окна, если не вынуждены. ;)

Во всяком случае, при проверке ошибок, скажем, среди 3000 вставок отдельных запросов записей, я выучил пару приемов. Рассмотрим этот блок кода:

'----- order number 1246-------
On Error Goto EH1246:
sSql="insert into SalesReceiptLine ( CustomerRefListID,TemplateRe..."
oConnection.Execute sSQL
sSql="SELECT TxnID FROM SalesReceiptLine WHERE RefNumber='1246'..."
  oRecordset.Open sSQL, oConnection
sTxnId = oRecordset(0)
  oRecordset.Close
sSql="INSERT INTO SalesReceiptLine (TxnId,SalesReceiptLineDesc,Sal..."
  oConnection.Execute sSQL
EH1246:
IF Err.Number<>0 THEN
    sMsg = sMsg & "Order # 1246; sTxnId = " & sTxnId & _
        vbCrLf & Err.Number & ": " & Err.Description & vbCrLf
sErrOrders = sErrOrders & "1246,"
End If
On Error GoTo -1
'----- order number 1247-------
On Error Goto EH1247:

Если вы не проверяете номер Err.Number, вы получите 0: на каждый обработанный заказ. (может быть, вы этого не хотите). Функция On Error GoTo -1 сбрасывает ошибку, чтобы она снова заработала. Видимо, Err работает только «один раз».

Я написал php-скрипт для сборки исходного кода VB6 для выполнения 8000 запросов odbc ...: P

1 голос
/ 19 января 2010

У вас определенно, положительно есть Exit Function чуть выше Error_Handler:?

0 голосов
/ 18 мая 2015
    my method(......

        On Error GoTo Error_Handler
........
    Exit Sub
        Error_Handler : 
                      writeToLogFile(Err.Source,Err.Description)

Перед обработкой функции Error_Handler следует добавить «Exit Sub» .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...