Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

D5: MS SQL, ADO, RAISERROR

1 view
Skip to first unread message

Alexei P. Akimov

unread,
Mar 26, 2001, 5:34:45 AM3/26/01
to
Уважаемые коллеги,

Ответьте, пожалуйста, на следующий вопрос. Почему ошибка на MS SQL сервере,
созданная с помощью Raiserror, не всегда передается в компонент
ADOConnection. Я столкнулся с этим в следующей ситуации. У меня есть
хранимая процедура, которая выполняет модификацию таблицы. В ней есть
несколько проверок данных вида @parameter <> 0, вызов двух подпроцедур для
каскадных изменений в других таблицах и модификация самой таблицы. Поскольку
сервер игнорирует ошибки в подпроцедурах я поступил так

DECLARE @SpRes [int], @ErrMsg [varchar](60)
EXEC @SpRes = sp_subroutine1 @ErrMsg = @ErrMsg OUTPUT

IF @SpRes <> 0 OR @@Error <> 0
BEGIN
RAISERROR(@ErrMsg,16,1)
RETURN
END

EXEC @SpRes = sp_subroutine2 @ErrMsg = @ErrMsg OUTPUT

IF @SpRes <> 0 OR @@Error <> 0
BEGIN
RAISERROR(@ErrMsg,16,1)
RETURN
END

Но в результате получилось, что ADOСonnection обрабатывает сообщения об
ошибках, созданых до выполнения процедуры и игнорирует сообщение, созданное
после. Я проверил по SQL Server Profile - ошибка успешно создается, в
документации к серверу написано, что ошибка немедленно отсылается клиенту, в
помощи к Delphi написано, что ошибка обрабатывается в OnInfoMessage и др. .
Так кто виноват - я, сервер, провайдер ADO или компонент Delphi? В принципе
можно вообще обойтись без RAISERROR, используя результат завершения и
дополнительный параметр, но хотелось бы точно знать в чем дело.

С уважением,
Алексей Акимов

Roman Nikulenkov

unread,
Mar 26, 2001, 7:17:20 AM3/26/01
to
Здpавствуйте Alexei!

В пятницу 01 Мая 21:03, Alexei P. Akimov написал(а) к All:

APA> Ответьте, пожалуйста, на следующий вопрос. Почему ошибка на MS SQL
APA> сервере, созданная с помощью Raiserror, не всегда передается в компонент
APA> ADOConnection. Я столкнулся с этим в следующей ситуации. У меня
APA> есть хранимая процедура, которая выполняет модификацию таблицы. В ней
APA> есть несколько проверок данных вида @parameter <> 0, вызов двух
APA> подпроцедур для каскадных изменений в других таблицах и модификация самой
APA> таблицы. Поскольку сервер игнорирует ошибки в подпроцедурах я поступил
APA> так

Проверь стоит ли у тебя в начале процедуры
set nocount on

С уважением, Роман Hикуленков.
ICQ:35366117, EMail:n...@rambler.ru
Касис (Москва)

Ilya Zvyagin

unread,
Mar 26, 2001, 1:13:45 PM3/26/01
to

Alexei P. Akimov wrote in message <99n5su$190s$1...@gavrilo.mtu.ru>...

>Ответьте, пожалуйста, на следующий вопрос. Почему ошибка на MS SQL сервере,
>созданная с помощью Raiserror, не всегда передается в компонент

Глюки ADO и/или Delphi.

Если сообщение попало в RASERROR - оно всегда посылаеться клиенту.
Другое дело, что клиент с ним делает.


0 new messages