Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

Хранимые процедуры 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
1-85894
shelbi
2002-12-14 16:59
2002.12.26
перемещение Tlabel по форме


14-86131
malkolinge
2002-12-05 12:21
2002.12.26
Кто за сколько грохнет человеческое существо ?


14-86090
ev
2002-12-04 18:54
2002.12.26
16-битная Delphi


1-86036
Ops
2002-12-16 15:29
2002.12.26
Объявление двоичных констант


14-86078
Igor_thief
2002-11-10 21:33
2002.12.26
Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский