Текущий архив: 2002.12.26;
Скачать: CL | DM;
ВнизХранимые процедуры MS SQL Найти похожие ветки
← →
nikolo (2002-12-05 16:44) [0]Проблема в следующем. Есть процедура:
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-блоки, с ними можно разрулить любую ситуацию...
← →
nikolo (2002-12-05 17:45) [1]Народ! Ау!!!
← →
nikolo (2002-12-06 10:40) [2]Кто-нибудь ответит!? Очень нужно, друзья...
← →
ЮЮ (2002-12-06 10:51) [3]текст работающей процедуры предоставил, а текст Exception-а и вызова в Delphi - нет. Чем же мы помочь можем???
← →
Mirovodin (2002-12-06 10:53) [4]Проще всего, до начала удаления проверить ссылки в связанных таблицах (в данному случае T1) :
IF (SELECT Count(*) FROM Table WHERE ID=@ID)>=1
BEGIN
-- есть ссылка, выходим
RETURN -1
END ELSE
BEGIN
-- блок удаления
END
← →
nikolo (2002-12-06 11:04) [5]Delphi ругается на удаление, т.е. когда выполняется
DELETE dbo.T_Department WHERE Id = @Id
и выдает соответствующую ошибку о том, что на эту запись есть ссылки из других таблиц.
Проверять перед удалением есть ли ссылки на данную записть из других таблиц нет смысла, т.к. ссылающихся таблиц может быть мног и что каждую проверять?
Не понятно, почему Delphi падает на операции Delete, как сделать, чтобы удаление проходило без Exception для клиентов?
← →
Mirovodin (2002-12-06 11:21) [6]Тогда вызывай процедуру удаления в BeforeDelete :
try
... Тут заполняем поля ASP удаления и делаем EXECProc
...
if ASP.Parameters.ParamByName("@RETURN_VALUE").Value<>0 then
Raise Exception.Create("Ошибка удаления");
except
Abort;
end;
сторед проц-ра должна возврящать 0 в случае неудачи.
Страницы: 1 вся ветка
Текущий архив: 2002.12.26;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.008 c