![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка ошибки от SQL [D7, MSSQL]
RKonst © (2006-01-12 18:22:00)Имеется хранимая процедура:
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
Результат - сообщения об ошибке нет
RKonst (2006-01-13 17:22:00) [1]ОК. Разобрался. Всем спасибо.
Ega23 (2006-01-13 16:22:00) [2]
> этим отсекаются только "пустышки", от команд типа insert/update,
> на select не действует.
Гляди-ка, действительно!
Блин, не знал...
sniknik (2006-01-13 16:14:00) [3]> то можешь воспользоваться директивой Set NoCount ON/OFF.
этим отсекаются только "пустышки", от команд типа insert/update, на select не действует.
sniknik (2006-01-13 16:12:00) [4]> Не понятно, почему Дельфи не получает сообщение об ошибке от SQL
она получает. для каждого рекордсета свое. см. Nikolay M. © (12.01.06 18:32) [1]
Ega23 (2006-01-13 16:11:00) [5]
> Не понятно, почему Дельфи не получает сообщение об ошибке
> от SQL
Процедура должна либо вернуть число (Return(N), где N - int), либо набор данных (Select что-то from что-то). Если у тебя по ходу выполнения процедуры идёт несколько селектов, нужных тебе по логике работы, но совершенно не нужных для выдачи их "в свет", то можешь воспользоваться директивой Set NoCount ON/OFF.
RKonst (2006-01-13 15:50:00) [6]Не понятно, почему Дельфи не получает сообщение об ошибке от SQL
Ega23 (2006-01-13 14:53:00) [7]
> Щщастье не наступило
>
Короче, что тебе непонятно?
Fay (2006-01-13 14:39:00) [8]@@error, raiserror
RKonst (2006-01-13 14:03:00) [9]
> И будет тебе щщастье
Щщастье не наступило
Nikolay M. (2006-01-12 19:58:00) [10]
> Но если в SP SQL-предложений штук 50?
Да хоть 50 тысяч. И все возвращают НД? Тогда, имхо, это неправильная ХП.
Кстати, Олег правильно сказал, стоить взять за правило добавлять в начало ХПSET NOCOUNT ON. Хотя к сути проблемы это, кмк, мало имеет отношения.
Ega23 (2006-01-12 19:40:00) [11]
>
> Изменяем процедуру:
> 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
И будет тебе щщастье
RKonst (2006-01-12 19:04:00) [12]И создаются они динамически и вызывают другие SP ?
RKonst (2006-01-12 18:54:00) [13]Хорошо, конечно. Но если в SP SQL-предложений штук 50?
Nikolay M. (2006-01-12 18:32:00) [14]Во втором варианте добавь в код
ADOStoredProc2.NextRecordset