Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
Знакомый выверт 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 ошибка выдается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 11:49 |
|
||
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
Если коллекция Errors проверяется при открытом рекордсете (или при его открытии), то Raiserror на тот момент еще не произошел. Его нужно смотреть после закрытия Recordset-a. Или писать процедуру по-другому - Raiserror до select-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 12:00 |
|
||
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
Коллекция Errors проверяется после выполнения хранимой процедуры. Причем я на клиента не получаю рекордсет - conn.Execute "exec sp1". А raiserror - это аналог любого действия, которое может вызвать ошибку. Не могу же я закрывать коннект для того, чтобы проверить, произошла ошибка или нет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 13:15 |
|
||
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
Рекордсет таки получаешь. Тока неявно и не обрабатываешь. Соответственно, он и остается открым, пока не сделаешь другой exec или не закроешь коннекш. set rs = conn.Execute "exec sp1". rs.Close ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 14:43 |
|
||
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
И все равно не работает! Ну вот попробуйте сами простейший вбшный скрипт (это дело 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 Не выдает ошибки, хоть тресни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 15:27 |
|
||
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
Я тоже с этим сталкивался при работе напрямую с ODBC, а ADO, насколько я помню встает поверх ODBC. Прооблема в том, что если возвращается RecordSet, то ошибку, сгенерированную RaicrError в пакете или процедуре поймать невозможно, SQLExecDirect возвращает SQL_SUCCESS после выполнения. Я так и не победил эту проблему, может кто-нибудь подскажет решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 16:01 |
|
||
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
А у меня всё работает 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2001, 07:24 |
|
||
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
alexeyvg, как выглядит SQL скрипт, который ты пробуешь? Меня интересует случай, когда в пакете делается select, а потом некий оператор, который вызывает ошибку. В остальных случаях и у меня все работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2001, 10:41 |
|
||
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
Как выглядит SQL скрипт? Естественно, тот-же самый: create proc sp1 as set nocount on select 1 raiserror('Some error', 16, 1) Собственно, я хотел показать своим примером, что сообщение о ошибке появляется сразу после RS.GetRows Попробуйте пройти по шагам отладчиком в VB... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2001, 11:33 |
|
||
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
Прохожу по шагам - не выдает ошибку. Может быть, влияют еще какие-нибудь настройки сервера или коннекта? А в VB выдается все правильно вплоть до текста сообщения, которое было задано? Не могли бы вы привести список ваших настроек? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2001, 15:26 |
|
||
|
И снова ADO и обработка ошибок
|
|||
|---|---|---|---|
|
#18+
Да вообщем-то никаких особенных настроек... cnn.Open "DSN=" & txtDSN & ";UID=" & txtUserName & ";PWD=" & txtPassword & ";" MSSQL Server 2000, всякие там SP... А укажите тот текст, который проходите по шагам. Да, в VB выдается все правильно вплоть до текста сообщения, которое было задано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2001, 10:35 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1825091]: |
0ms |
get settings: |
16ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
3ms |
| others: | 248ms |
| total: | 422ms |

| 0 / 0 |
