Главная страница
    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.007 c
1-86022
Егор
2002-12-16 15:01
2002.12.26
Границы видимой обл. оси TChart при масштабировании


3-85871
Dmitriy
2002-12-09 04:16
2002.12.26
как сохранять пробелы в paradox e


14-86132
vopros
2002-12-05 16:25
2002.12.26
Пишите какой-то бред


3-85875
daimon
2002-12-08 18:11
2002.12.26
Тонкии клиент


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