Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2009, 22:03   #1
Lisi4ka
Пользователь
 
Регистрация: 28.09.2008
Сообщений: 31
По умолчанию RAISERROR В DELPHI

Имеется БД SQL, сервер приложений (ADO), клиент. Вставка данных осуществляется с помощью хранимых процедур, одновременно проверяющих функц.ограничения и, следовательно, предусматривающих откат и RAISERROR. Приметрный текст процедуры:
Код:
CREATE PROCEDURE FORMA_DEL
@ID_F INT
 AS
 BEGIN TRAN
 IF (EXISTS(SELECT * FROM GROUPS_OF_UCH WHERE FORM=@ID_F))
	BEGIN
		ROLLBACK TRAN RAISERROR 100557 'Для удаления указанной формы обучения необходимо удалить все группы, обучающиеся по ней!'
	END
Каким образом мне "поймать" из клиента код указанной RAISERROR?
Пробовала следующим образом:
Код:
try
  AdoStoredProc1.ExecProc;
  except
  on EO:EDatabaseError do
   Showmessage('EDatabaseError');
  on Ea:EDBEngineError do
   Showmessage('EDBEngineError'); 
  on Ev:EDBClient do
   Showmessage('EDBClient ');
  on EOb:EUpdateError do
   Showmessage('EUpdateError ');
 end;
Я хотела таким образом получить хотя бы вид ошибки на клиенте, возникающей при RAISERROR на сервере, однако прога выдает только стандартное сообщение ADO.
Lisi4ka вне форума Ответить с цитированием
Старый 14.04.2009, 00:14   #2
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

Код:
except on E: Exception do
   Showmessage(Format('Error: %s', [E.Message]);
end;
попробуй так, по идее он сам должен текст ошибки из базы вставить
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 14.04.2009, 12:27   #3
Lisi4ka
Пользователь
 
Регистрация: 28.09.2008
Сообщений: 31
По умолчанию

Спасибо, а можно ли вообще каким-то образом перехватить не текстовое описание ошибки, а ее код, прописанный в SQL? Я пробовала через параметры хранимой процедуры - по умолчанию 0 параметр имеет тип RETURN_VALUE, редактировала тексты процедур: если RAISERROR RETURN 0, но не прокатило
Lisi4ka вне форума Ответить с цитированием
Старый 14.04.2009, 15:22   #4
Lisi4ka
Пользователь
 
Регистрация: 28.09.2008
Сообщений: 31
По умолчанию

Видимо, я не совсем корректно сформулировала вопрос: мне необходимо перехватить сам код ошибки (в данном случае 100557) и подавить вывод какого-либо сбщ на экран, т.к. хочу возложить на сервер почетную обязанность контроля некоторых вводимых данных, формируемых в цикле. Не хотелось бы при каждой ошибке 100557 нажимать ОК) т.е:
если сервер сказал :"Ошибка 100557", - повторяем итерацию (а юзер ничего не видит),
а если сервер сказал :"Ошибка 100558",-все прерываем и цикл заканчиваем, выдаем сбщ типа "произошла ошибка такая-то"
Lisi4ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На Delphi 7 сделать игру кто хочет стать миллионером в delphi 7 666dart666 Помощь студентам 11 04.11.2010 17:57
Программа-тест в Delphi) скиньте))а то програмку здавать преподу надо,и самой хочется понять Delphi Верчик Помощь студентам 9 02.03.2009 17:46
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54
не StringGrid1.Cells[1,1]:='Delphi'; а вот так SG1.C[1,1]:='Delphi' Nemesisking Компоненты Delphi 7 08.09.2007 03:27