Ответьте, пожалуйста, на следующий вопрос. Почему ошибка на 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, используя результат завершения и
дополнительный параметр, но хотелось бы точно знать в чем дело.
С уважением,
Алексей Акимов
В пятницу 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
Касис (Москва)
>Ответьте, пожалуйста, на следующий вопрос. Почему ошибка на MS SQL сервере,
>созданная с помощью Raiserror, не всегда передается в компонент
Глюки ADO и/или Delphi.
Если сообщение попало в RASERROR - оно всегда посылаеться клиенту.
Другое дело, что клиент с ним делает.