Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.032 c
14-86154
nadin
2002-12-06 09:55
2002.12.26
Paradox помогите вскрыть пароль


1-85900
AVR
2002-12-14 11:44
2002.12.26
Свойства формы, порождённой от TForm в инспекторе объектов.


14-86119
Ketmar
2002-12-04 15:24
2002.12.26
а-а-а... вам хорошо. а я мазохизмом занимаюсь. Рихтера читаю.


7-86204
olphi
2002-10-21 21:32
2002.12.26
Как узнать порядковый номер (букву) диска - CD-ROMa?


14-86110
oleon
2002-12-05 12:51
2002.12.26
Здраствуйте. Какие есть аналоги Visual Source Safe.