Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка ошибки от 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо