Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / И снова ADO и обработка ошибок / 12 сообщений из 12, страница 1 из 1
01.11.2001, 11:49
    #32016396
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
Знакомый выверт VBScript с ADO и обработкой ошибок.

В сокращенном виде процедура выглядит так:
create proc sp1
as
set nocount on
raiserror('Some error', 16, 1)

Ошибка честно вываливается в басиковскую переменную Err и заносится в conn.Errors.

Изменим процедуру:
create proc sp1
as
set nocount on
select 1
raiserror('Some error', 16, 1)

Никакого сообщения об ошибке не появляется, Err = 0, коллекция Errors пуста


Как видите, set nocount on предварительно вызывается - это грабли знакомые. Разумеется, в QA ошибка выдается.
...
Рейтинг: 0 / 0
01.11.2001, 12:00
    #32016399
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
Если коллекция Errors проверяется при открытом рекордсете (или при его открытии), то Raiserror на тот момент еще не произошел. Его нужно смотреть после закрытия Recordset-a. Или писать процедуру по-другому - Raiserror до select-а.
...
Рейтинг: 0 / 0
01.11.2001, 13:15
    #32016415
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
Коллекция Errors проверяется после выполнения хранимой процедуры. Причем я на клиента не получаю рекордсет - conn.Execute "exec sp1". А raiserror - это аналог любого действия, которое может вызвать ошибку. Не могу же я закрывать коннект для того, чтобы проверить, произошла ошибка или нет!
...
Рейтинг: 0 / 0
01.11.2001, 14:43
    #32016426
И снова ADO и обработка ошибок
Рекордсет таки получаешь. Тока неявно и не обрабатываешь. Соответственно, он и остается открым, пока не сделаешь другой exec или не закроешь коннекш.

set rs = conn.Execute "exec sp1".
rs.Close
...
Рейтинг: 0 / 0
01.11.2001, 15:27
    #32016429
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
И все равно не работает!

Ну вот попробуйте сами простейший вбшный скрипт (это дело 5 сек.):

(только не забудьте строку коннекта нормальную вписать)

Const strConnect = ""

Dim cn, rs
set cn = CreateObject("ADODB.Connection")
cn.Open strConnect
set rs = cn.Execute("exec sp1")
rs.Close
if cn.Errors.Count > 0 then
MsgBox "Error"
else
MsgBox "Success"
end if

Не выдает ошибки, хоть тресни.
...
Рейтинг: 0 / 0
01.11.2001, 16:01
    #32016430
Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
Я тоже с этим сталкивался при работе напрямую с ODBC, а ADO, насколько я помню встает поверх ODBC. Прооблема в том, что если возвращается RecordSet, то ошибку, сгенерированную RaicrError в пакете или процедуре поймать невозможно, SQLExecDirect возвращает SQL_SUCCESS после выполнения. Я так и не победил эту проблему, может кто-нибудь подскажет решение?
...
Рейтинг: 0 / 0
02.11.2001, 07:24
    #32016446
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
А у меня всё работает


On Error Resume Next
Debug.Print cn.Errors.Count, Err.Number
Set rs = cn.Execute(SQL)
Debug.Print cn.Errors.Count, Err.Number
vArray = rs.GetRows
Debug.Print cn.Errors.Count, Err.Number
rs.Close
Debug.Print cn.Errors.Count, Err.Number

Или так:

On Error GoTo ErrHandler
Debug.Print cn.Errors.Count, Err.Number
Set rs = cn.Execute(SQL)
Debug.Print cn.Errors.Count, Err.Number
vArray = rs.GetRows
Debug.Print cn.Errors.Count, Err.Number
rs.Close

Exit Sub

ErrHandler:
rs.Close
...
Рейтинг: 0 / 0
02.11.2001, 10:41
    #32016465
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
alexeyvg, как выглядит SQL скрипт, который ты пробуешь? Меня интересует случай, когда в пакете делается select, а потом некий оператор, который вызывает ошибку. В остальных случаях и у меня все работает.
...
Рейтинг: 0 / 0
02.11.2001, 11:33
    #32016472
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
Как выглядит SQL скрипт? Естественно, тот-же самый:
create proc sp1
as
set nocount on
select 1
raiserror('Some error', 16, 1)

Собственно, я хотел показать своим примером, что сообщение о ошибке появляется сразу после RS.GetRows
Попробуйте пройти по шагам отладчиком в VB...
...
Рейтинг: 0 / 0
02.11.2001, 15:26
    #32016500
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
Прохожу по шагам - не выдает ошибку. Может быть, влияют еще какие-нибудь настройки сервера или коннекта? А в VB выдается все правильно вплоть до текста сообщения, которое было задано? Не могли бы вы привести список ваших настроек?
Спасибо!
...
Рейтинг: 0 / 0
05.11.2001, 10:35
    #32016564
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
Да вообщем-то никаких особенных настроек...
cnn.Open "DSN=" & txtDSN & ";UID=" & txtUserName & ";PWD=" & txtPassword & ";"
MSSQL Server 2000, всякие там SP...

А укажите тот текст, который проходите по шагам.
Да, в VB выдается все правильно вплоть до текста сообщения, которое было задано.
...
Рейтинг: 0 / 0
05.11.2001, 13:32
    #32016576
Dmitriy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова ADO и обработка ошибок
..
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / И снова ADO и обработка ошибок / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]