![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хранимые процедуры 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]Народ! Ау!!!