Главная страница
    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.45 MB
Время: 0.008 c
14-86128
Svin
2002-12-04 12:44
2002.12.26
Выч Мат


6-86072
RomanRom2
2002-10-29 14:58
2002.12.26
Вернуть IP адрес подключаемого компа к моему серверу


3-85795
Wic42
2002-12-06 00:07
2002.12.26
Delphi6-DBF


3-85823
maxx2000
2002-12-06 13:23
2002.12.26
Foreign Key for Paradox


3-85813
KV
2002-12-06 11:50
2002.12.26
Базы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский