Обработка сторонних ошибок

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dumm
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 27.05.2012 (Вс) 16:39

Обработка сторонних ошибок

Сообщение Dumm » 03.12.2013 (Вт) 21:06

День добрый. Такая проблема: коннекчусь к оракловой БД с заранее неверным паролем, на что и получаю законное сообщение:
Rin-time error '-2147467259 (80004005)':
ORA-01017: invalid username/password; logon denied

Но когда включаю игнорирование ошибки и анализирую объект Err, то вижу совсем другое: Err.Number = 0, Err.Description = “Overflow”. Вот и вопрос: откуда VB знает на что ругается Oracle, и как бы мне до этого сообщения добраться?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Обработка сторонних ошибок

Сообщение ger_kar » 03.12.2013 (Вт) 21:10

Что то ты видимо не так делаешь, код в студию, будем посмотреть. Вообще все должно работать
Бороться и искать, найти и перепрятать

Dumm
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 27.05.2012 (Вс) 16:39

Re: Обработка сторонних ошибок

Сообщение Dumm » 03.12.2013 (Вт) 21:19

Вопрос не в том, что я делаю неправильно, а в том, где VB хранит сообщения, передаваемые сторонними программами (в данном случае Oracle)? Явно, не в Err, т.к. он показывает только "Overflow".

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Обработка сторонних ошибок

Сообщение ger_kar » 03.12.2013 (Вт) 21:28

Ты предлагаешь решать вопрос со множеством неизвестных. Как осуществляется подключение, какие компоненты и провайдеры используются и т.д. Подключение через COM интерфейсы или WinAPI32? А неправильно ты можешь делать так, что объект Err очищается. Я например с Ораклом не работал, но с остальным проблем не возникало. Поэтому, что бы понять и помочь, нужно посмотреть что ты делаешь, а не пытаться решать уравнения со множеством неизвестных.
Бороться и искать, найти и перепрятать

Dumm
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 27.05.2012 (Вс) 16:39

Re: Обработка сторонних ошибок

Сообщение Dumm » 03.12.2013 (Вт) 21:41

Пожалуйста.
Код: Выделить всё
Dim oCnn As Object
Dim n As Long
Dim s As String

Sub Main()

Set oCnn = CreateObject("ADODB.Connection")
oCnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=BTIZ;Password=****;Data Source=SOUTH"
On Error Resume Next
oCnn.Open
n = Err.Number
s = Err.Description

End Sub

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Обработка сторонних ошибок

Сообщение ger_kar » 03.12.2013 (Вт) 22:04

Такое ощущение, что это не VB6, а VBS или по крайней мере пример взят оттуда.
Попробуй так:
Код: Выделить всё
Option Explicit

Dim oCN     As ADODB.Connection

Sub Main()

    Dim sCNStr  As String
    Dim oError  As ADODB.Error
   
    On Error GoTo ErrHandler
   
        sCNStr = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=BTIZ;Password=****;Data Source=SOUTH"
       
        Set oCN = New ADODB.Connection
        oCN.ConnectionString = sCNStr
       
        For Each oError In oCN.Errors
            Debug.Print oError.Number, oError.Description, oError.NativeError, oError.Source
        Next
       
    On Error GoTo 0
    Exit Sub
   
ErrHandler:
   
    Debug.Print Err.Number, Err.Description
   
End Sub

Только в референсах ADODB подключи
При возникновении ошибки есть переход в обработчик или нет?
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Обработка сторонних ошибок

Сообщение ger_kar » 03.12.2013 (Вт) 22:13

Вот же блин написал :) . Самое главное то забыл oCN.Open. Видимо уже спать пора...
Бороться и искать, найти и перепрятать

Dumm
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 27.05.2012 (Вс) 16:39

Re: Обработка сторонних ошибок

Сообщение Dumm » 03.12.2013 (Вт) 22:18

Спасибо. Попробую завтра на работе.

Dumm
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 27.05.2012 (Вс) 16:39

Re: Обработка сторонних ошибок

Сообщение Dumm » 04.12.2013 (Ср) 20:06

Вообще получилось, только
Код: Выделить всё
On Error GoTo ErrHandler

надо убрать. Иначе при ошибке сразу валится по переходу, и проверка коллекции Error не успевает отработать. И нужно отключить аварийное завершение при ошибке, иначе все просто завершается. Тогда готовый код такой:
Код: Выделить всё
Option Explicit

Dim oCN     As ADODB.Connection

Sub Main()

    Dim sCNStr  As String
    Dim oError  As ADODB.Error
   
    sCNStr = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=BTIZ;Password=****;Data Source=SOUTH"
       
    Set oCN = New ADODB.Connection
    oCN.ConnectionString = sCNStr

    On Error Goto Next

    oCN.Open
       
    For Each oError In oCN.Errors
        Debug.Print oError.Number, oError.Description, oError.NativeError, oError.Source
    Next
       
    On Error GoTo 0
   
End Sub

Моя ошибка была в том, что я анализировал объект Err, вместо объекта Error метода ADO. Спасибо за помощь.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Обработка сторонних ошибок

Сообщение ger_kar » 04.12.2013 (Ср) 20:19

Dumm писал(а):Иначе при ошибке сразу валится по переходу, и проверка коллекции Error не успевает отработать.
Ну собственно в этом и была идея. Или то или другое. Причем если будет переход в обработчик ошибок, то там и смотреть его содержимое.И возникает вопрос, а что содержал то Err при переходе в обработчик? Неужели был пуст? Мне, то что он был пуст не верится.
Dumm писал(а):Моя ошибка была в том, что я анализировал объект Err, вместо объекта Error метода ADO.

По сути основная разница, в том что Err содержит только последнюю ошибку, и не всегда она может быть связана с ADO и обменом данными. А ADO предоставляет возможность посмотреть все ошибки, так как это коллекция. И все эти ошибки связаны исключительно с ADO и обменом данными + дополнительная информация. Но на практике эта информация нужна довольно редко.
Бороться и искать, найти и перепрятать

Dumm
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 27.05.2012 (Вс) 16:39

Re: Обработка сторонних ошибок

Сообщение Dumm » 04.12.2013 (Ср) 20:51

а что содержал то Err при переходе в обработчик?

А все то же: Err.Description = “Overflow”.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Обработка сторонних ошибок

Сообщение ger_kar » 04.12.2013 (Ср) 20:52

А Err.Number?
Бороться и искать, найти и перепрятать

Dumm
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 27.05.2012 (Вс) 16:39

Re: Обработка сторонних ошибок

Сообщение Dumm » 04.12.2013 (Ср) 20:59

А вот не помню (дома этого проекта нет). То ли 0, то ли 6. В начале темы указал 0, но мог и ошибиться.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Обработка сторонних ошибок

Сообщение ger_kar » 04.12.2013 (Ср) 21:08

Ну если Overflow (Переполнение) то тогда точно должно быть 6. Значит и такая ошибка имело место быть, кроме всего прочего.
Бороться и искать, найти и перепрятать

Dumm
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 27.05.2012 (Вс) 16:39

Re: Обработка сторонних ошибок

Сообщение Dumm » 04.12.2013 (Ср) 21:31

Наверно, она была последней и перезатерла ту, нужную ошибку о неверном пароле. Спасибо.


Вернуться в Visual Basic 1–6

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

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

    TopList