powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить на клиенте все ошибки из ХП
12 сообщений из 12, страница 1 из 1
Получить на клиенте все ошибки из ХП
    #33521717
Ivan V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой вопрос неоднакратно поднимался, но в данном случае несовсем стандартная ситуация. На клиент приходит только первая ошибка.
Следующий код :
========================
create Procedure Test2
as

set nocount on
declare @msg varchar(100)
set @msg = 'xxx' + char(10) + 'yyy'
raiserror(@msg, 16, 1)
return

go

create Procedure Test
as

set nocount on

select 1 sid
into #t
union
select 2
union select 3

declare @sid int
DECLARE curs CURSOR LOCAL FORWARD_ONLY READ_ONLY FOR
select sid from #t

OPEN curs

FETCH NEXT FROM curs INTO @sid

WHILE @@fetch_status = 0 begin
exec Test2
FETCH NEXT FROM curs INTO @sid
end

close curs
deallocate curs

==============================
соответственно на клиенте стандартная обработка:
SQL = "exec Test"
.RSExec SQL

strError = ""
For Each tError In .vCONNECT.Errors
strError = strError & tError.Description & Chr(13) & Chr(10)
Next
If strError <> "" Then
MsgBox strError, 16, "Error" ...

Если убрать курсор, заменив его скажем на цикл, то все ОК. Курсор же "убивает" все напрочь.
...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #33521848
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть в том, что у вас происходит несколько выборок, и поэтому надо использовать метод NextRecordset, чтобы получить ошибки, произошедшие во всех выборках.
Я тоже год назад с этим столкнулся.
...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #33521932
Ivan V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MelkiadesСуть в том, что у вас происходит несколько выборок, и поэтому надо использовать метод NextRecordset, чтобы получить ошибки, произошедшие во всех выборках.
Я тоже год назад с этим столкнулся.
Про это я как бы знаю, но здесь несколько не тот случай. Выборок то нет вообще никаких.
...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #33522050
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan V MelkiadesСуть в том, что у вас происходит несколько выборок, и поэтому надо использовать метод NextRecordset, чтобы получить ошибки, произошедшие во всех выборках.
Я тоже год назад с этим столкнулся.
Про это я как бы знаю, но здесь несколько не тот случай. Выборок то нет вообще никаких.
Так вы полностью уверены, что NextRecordset is Nothing? Проверяли?
...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #33522156
Ivan V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да более того, пример можно упростить до безобразия:
====
create Procedure Test
as

set nocount on


select 1 sid
into #t
union
select 2
union select 3

declare @sid int
DECLARE curs CURSOR LOCAL FAST_FORWARD FOR
select sid from #t

OPEN curs

FETCH NEXT FROM curs INTO @sid

WHILE @@fetch_status = 0 begin
raiserror('xxx', 16, 1)
FETCH NEXT FROM curs INTO @sid
end

close curs
deallocate curs
====
а результат тот же. Никакой выборки здесь днем с огнем не сыскать.
...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #33522313
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня все работает... что я не так делаю?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Private Sub Command1_Click()
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim SQL As String, strError As String, i As Integer
    Dim cmd As New ADODB.Command
    
On Error GoTo errh:
    cn.ConnectionString = "Provider=MSDASQL.1;Password=" & TaskPWD & ";Persist Security Info=True;User ID=" & TaskUID & ";Data Source=" & TaskDsn & ""
    cn.Open
    cmd.CommandType = adCmdStoredProc
    Set cmd.ActiveConnection = cn
    cmd.CommandText = "test"
    Set rs = cmd.Execute
    
    Exit Sub
    
errh:
strError = ""
    For i =  0  To cn.Errors.Count -  1 
    strError = strError & cn.Errors(i).Description & Chr( 13 ) & Chr( 10 )
    Next
    If strError <> "" Then MsgBox strError,  16 , "Error"

End Sub

...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #33522715
Ivan V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И что выдает в мессаге?
...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #33522767
Ivan V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проделал, только на скрипте, бейсика у меня нет, думаю, что принципиальной разницы нет. Выдает одну "xxx", а нужно три.
...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #33522784
Ivan V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот заметил, а что это за провайдер Provider=MSDASQL.1
Я использую стандартный Microsoft OLE DB Provider for SQL Server, кратко SQLOLEDB.1
может из-за него работает по разному
...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #33522826
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил, действительно через SQLOLEDB.1 выдает один мессадж, а через MSDASQL.1 - три.
...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #34018231
Ivan V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно появились новые идеи по сабж.?
...
Рейтинг: 0 / 0
Получить на клиенте все ошибки из ХП
    #34018352
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас MDAC последний? Они могли уже это поправить.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить на клиенте все ошибки из ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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