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

Вниз

2000 Вернуть сообщение об ошибке   Найти похожие ветки 

 
KAA   (2002-07-03 21:12) [0]

Из одной хранимой процедуры вызываются другие, одна за другой. В одной из вызываемых процедур произошла ошибка и выскочило сообщение об ошибке. Если основная процедура будет запущена из под Queryanalyzer, то будет выдано сообщение об ошибке. Но если эту процедуру запустить из клиентского приложения (в частности приложение написано на Delphi 5) под конструкцией try .. except, туда сообщение об ошибке уже не приходит.
Что делать?


 
TSV   (2002-07-04 10:36) [1]

Ну, примерно так:

CREATE PROCEDURE dbo.Proc1
AS BEGIN
...
execute Proc2
if @@ERROR <> 0
begin
RAISERROR("Ошибка выполнения процедуры [proc2]", 16, 10) WITH SETERROR
RETURN -1
end

...
END



 
TSV   (2002-07-04 10:38) [2]

В общем-то принцип тот же самый - "отрейзить" ошибку на более верхний уровень...


 
KAA   (2002-07-04 10:52) [3]

Хотелось бы разобраться с причиной. В одних случаях ошибка попадает клиенту, в других нет.


 
TSV   (2002-07-04 11:51) [4]

Обрати внимание на опцию WITH SETERROR .

Также недавно в форуме проскакивало, что если идет работа с ADO, то нужно в цикле просмотреть свойство Errors или что-то в этом роде...


 
KAA   (2002-07-04 12:05) [5]

так а что конкретно WITH SETERROR делает?

А название той ветви не помните?


 
Alex-A   (2002-07-04 14:53) [6]

WITH SETERROR устанавливает значение гловальной переменной @@ERROR в код ошибки, независимо от уровня "серьезности" этой ошибки

А вопрос про который упомянул TSV задавал я, там речь шла немного о другом, но этот способ тебе тоже поможет после вызова процедуры в цикле посмотри свойство Errors у ADOConnection - там все ошибки и обнаружишь если по try ... except не получилось.


 
KAA   (2002-07-04 20:29) [7]

В вызываемой процедуре выполняется команда INSERT. Если до этого инсерта сделать RAISERROR, ошибка вернется в клиентское приложение. Если после инсерта, то уже не возвращается.


 
TSV   (2002-07-04 21:08) [8]

Сразу после Insert:

if @@ERROR <> 0
begin
RAISERROR("Ошибка.", 16, 10) WITH SETERROR
RETURN -1
end



 
Alex-A   (2002-07-05 07:33) [9]

2TSV
Не-а, не получиться так, я уже пробовал!


 
KAA   (2002-07-05 09:22) [10]

В INSERT нет никакой ошибки, он отрабатывает правильно и добавляет запись. Просто если я перед ним просто вызову RAISERROR, он вернется клиенту, если после, то уже не вернется.
Ошибка - это не обязательно системная ошибка, я генерю ошибки, например, если данные переданные в процедуру оказались неправильные.


 
TSV   (2002-07-05 10:32) [11]

Ну так по логике вещей сначала данные проверяют, а уж потом, если они правильные, применяет их в БД. А если неправильные, генерят ошибку...


 
KAA   (2002-07-05 10:46) [12]

Есть самостоятельные процедуры, в начале которых есть все необходимые проверки. Крайне неохота дублировать их в вызывающей процедуре.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
1-81326
Skier
2002-07-12 17:30
2002.07.25
Просто стало интересно


7-81492
Sender
2002-05-06 15:34
2002.07.25
Работа с портами (Lpt,Com)


8-81389
Vvedensk
2002-03-15 14:23
2002.07.25
Как увеличить изображения с малой потерью качества подобно таму как это делает PhotoShop


3-81136
nitro313
2002-07-03 14:52
2002.07.25
Народ, подскажите пожалуйста: Как динамически создавать алиас ?


3-81207
wHammer
2002-07-05 12:30
2002.07.25
Приношу извинения за затерный вопрос...





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