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

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

Хранимые процедуры MS SQL [D5, MSSQL]


nikolo ©   (2002-12-05 16:44:00) 

Проблема в следующем. Есть процедура:

CREATE PROCEDURE dbo.P_T_Department_D(
@Id int)
AS
BEGIN
DELETE dbo.T_Department WHERE Id = @Id
IF @@ERROR = 0
DELETE dbo.T_TableDate
WHERE TableNameId = 1 AND TableId = @Id
ELSE
UPDATE dbo.T_TableDate SET DateOff = GetDate()
WHERE TableNameId = 1 AND TableId = @Id
RETURN @@ERROR
END


в которая, как видно, сначала пытается удалить записть, а если на нее есть ссылки (@@ERROR <> 0) "закрывает" запись по времени действия. Все замечательно, процедура работает в Query Analyzer, но! в Delphi, когда я ее запускаю, возникает Exception и она не отрабатывает.
Можно ли как-нибудь это дело побороть? В Oracle все было просто, там есть Exception-блоки, с ними можно разрулить любую ситуацию...


Mirovodin   (2002-12-06 11:21:00) [1]

Тогда вызывай процедуру удаления в BeforeDelete :
try
... Тут заполняем поля ASP удаления и делаем EXECProc
...

if ASP.Parameters.ParamByName("@RETURN_VALUE").Value<>0 then
Raise Exception.Create("Ошибка удаления");
except
Abort;
end;

сторед проц-ра должна возврящать 0 в случае неудачи.


nikolo   (2002-12-06 11:04:00) [2]

Delphi ругается на удаление, т.е. когда выполняется DELETE dbo.T_Department WHERE Id = @Idи выдает соответствующую ошибку о том, что на эту запись есть ссылки из других таблиц.

Проверять перед удалением есть ли ссылки на данную записть из других таблиц нет смысла, т.к. ссылающихся таблиц может быть мног и что каждую проверять?

Не понятно, почему Delphi падает на операции Delete, как сделать, чтобы удаление проходило без Exception для клиентов?


Mirovodin   (2002-12-06 10:53:00) [3]

Проще всего, до начала удаления проверить ссылки в связанных таблицах (в данному случае T1) :

IF (SELECT Count(*) FROM Table WHERE ID=@ID)>=1
BEGIN
-- есть ссылка, выходим
RETURN -1
END ELSE
BEGIN
-- блок удаления
END


ЮЮ   (2002-12-06 10:51:00) [4]

текст работающей процедуры предоставил, а текст Exception-а и вызова в Delphi - нет. Чем же мы помочь можем???


nikolo   (2002-12-06 10:40:00) [5]

Кто-нибудь ответит!? Очень нужно, друзья...


nikolo   (2002-12-05 17:45:00) [6]

Народ! Ау!!!


Наверх

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