Вниз
Скачать: CL | DM;

Обработка ошибки от SQL   Найти похожие ветки 

← →
RKonst   (2006-01-12 18:22) [0]

Имеется хранимая процедура:
CREATE PROCEDURE _test_Yury AS
SET ANSI_PADDING ON
select convert(float,"f")
GO

и код :
 try
   ADOStoredProc2.ExecProc;
 except
   on E:Exception do ShowMessage(E.Message);
 end;

Результат - выдается сообщение об ошибке.

Изменяем процедуру:
CREATE PROCEDURE _test_Yury AS
SET ANSI_PADDING ON
select 7  -- добавили строку
select convert(float,"f")
GO


Результат - сообщения об ошибке нет


← →
Nikolay M. ©   (2006-01-12 18:32) [1]

Во втором варианте добавь в код
ADOStoredProc2.NextRecordset


← →
RKonst   (2006-01-12 18:54) [2]

Хорошо, конечно. Но если в SP SQL-предложений штук 50?


← →
RKonst   (2006-01-12 19:04) [3]

И создаются они динамически и вызывают другие SP ?


← →
Ega23 ©   (2006-01-12 19:40) [4]


>
> Изменяем процедуру:
> CREATE PROCEDURE _test_Yury AS
> SET ANSI_PADDING ON
> select 7  -- добавили строку
> select convert(float,"f")
> GO
>
> Результат - сообщения об ошибке нет
>


Сделай так:

CREATE PROCEDURE _test_Yury AS
SET ANSI_PADDING ON
Set NoCount ON
select 7  -- добавили строку
Select 8
Select getdate()
Select @@IDENTITY
.........

Set NoCount OFF
select convert(float,"f")
GO


И будет тебе щщастье


← →
Nikolay M. ©   (2006-01-12 19:58) [5]


> Но если в SP SQL-предложений штук 50?

Да хоть 50 тысяч. И все возвращают НД? Тогда, имхо, это неправильная ХП.
Кстати, Олег правильно сказал, стоить взять за правило добавлять в начало ХП SET NOCOUNT ON. Хотя к сути проблемы это, кмк, мало имеет отношения.


← →
RKonst   (2006-01-13 14:03) [6]


> И будет тебе щщастье


Щщастье не наступило


← →
Fay ©   (2006-01-13 14:39) [7]

@@error, raiserror


← →
Ega23 ©   (2006-01-13 14:53) [8]


> Щщастье не наступило
>


Короче, что тебе непонятно?


← →
RKonst   (2006-01-13 15:50) [9]

Не понятно, почему Дельфи не получает сообщение об ошибке от SQL


← →
Ega23 ©   (2006-01-13 16:11) [10]


> Не понятно, почему Дельфи не получает сообщение об ошибке
> от SQL


Процедура должна либо вернуть число (Return(N), где N - int), либо набор данных (Select что-то from что-то). Если у тебя по ходу выполнения процедуры идёт несколько селектов, нужных тебе по логике работы, но совершенно не нужных для выдачи их "в свет", то можешь воспользоваться директивой Set NoCount ON/OFF.


← →
sniknik ©   (2006-01-13 16:12) [11]

> Не понятно, почему Дельфи не получает сообщение об ошибке от SQL
она получает. для каждого рекордсета свое. см. Nikolay M. ©   (12.01.06 18:32) [1]


← →
sniknik ©   (2006-01-13 16:14) [12]

> то можешь воспользоваться директивой Set NoCount ON/OFF.
этим отсекаются только "пустышки", от команд типа insert/update, на select не действует.


← →
Ega23 ©   (2006-01-13 16:22) [13]


> этим отсекаются только "пустышки", от команд типа insert/update,
>  на select не действует.


Гляди-ка, действительно!
Блин, не знал...


← →
RKonst   (2006-01-13 17:22) [14]

ОК. Разобрался. Всем спасибо.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.024 c
2-1140207329
parovoZZ
2006-02-17 23:15
2006.03.05
ADOQuery, SQL и MSAccess


2-1139677326
JEK2
2006-02-11 20:02
2006.03.05
Запрос INSERT INTO вставка нескольких строк


2-1139987912
Древолаз
2006-02-15 10:18
2006.03.05
Мастера помогите советом!( AbstractError)


4-1134737392
Nickolay
2005-12-16 15:49
2006.03.05
WM_DEVICECHANGE - отлов подключения/отключения USB-устройства


2-1140282291
delphi-oracle
2006-02-18 20:04
2006.03.05
Как получать информацию от EM_GETTEXT и т. д.




   Наверх