Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.25;
Скачать: CL | DM;

Вниз

Обработка ошибок БД   Найти похожие ветки 

 
DimonNew   (2005-08-15 13:59) [0]

Привет, помогите разобраться с обработкой ошибок БД.
При возникновении ошибки, напрмер при сохранении данных в БД возникает исключение типа EDataBaseError или EUpdateError. Одно исключение, но разные сообщения в Message. Но хотелось бы на некоторые ошибки написать сообщение пользователю на русском языке, чтобы он мог как-то отреагировать и сделать правильно. Как отловить конкретные ошибки?


 
Fay ©   (2005-08-15 14:04) [1]

DimonNew   (15.08.05 13:59)

set nocount on

declare
 @rc int,
 @err int

update Table1 set
 NAME = "Name"
where ID = 1

select
 @rc = @@rowcount,
 @err = @@error

if (@@error <> 1) or (@rc = 0)
 raiserror 50001 "Ошибка, блин!"


 
alex_***   (2005-08-15 14:04) [2]

пишешь свое сообщение на каждый класс ошибки:

except on e: EDataBaseError do
...
end;

except on e: Exception do
Begin
 if e is EDatabaseEror then
 Begin
 End
...
...
End;
end


 
DimonNew   (2005-08-15 14:15) [3]

На исключение типа EDataBaseError может быть несколько разных сообщений, например ошибка нарушения ссылочной целостности или ошибка дупликата первичного ключа и т.п. Одно исключение типа EDataBaseError, но разные Message. Как отловить например только ошибку ссылочной целостности?


 
DenK_vrtz ©   (2005-08-15 14:34) [4]

>DimonNew   (15.08.05 14:15) [3]
>Одно исключение типа EDataBaseError, но разные Message.

Анализировать КОД ошибки и по коду выдавать соответствующее сообщение.


 
sniknik ©   (2005-08-15 14:50) [5]

у EDataBaseError кода нету.

а вообще это блаж, никто эти ошибки, понятным языком написанные, не читает. а тот кто читает, тот и на английском разберется, и даже лучше чем на русском, перевод не "сгладит" разные мелкие но важные детали.

если уж так необходимо то пусть юзеры сами переводят первоисточник (MSSQL), и заменяют сообщения в нем русскими (есть даже готовые переводы/апдейты. частично)

а еще сколько можно повторять, не связывайтесь с BDE для доступа MSSQL. (вот есть такое подозрение на него ;)


 
DimonNew   (2005-08-15 15:26) [6]

Я не заметил , что эти типы ошибок только для BDE, хотя я использую     ADO.
Ошибки ADO ловяться E : EOleException, только E.ErrorCode возвращает одно и тоже значение при разных сообщениях.


 
Nikolay M. ©   (2005-08-15 16:18) [7]


> хотелось бы на некоторые ошибки написать сообщение пользователю
> на русском языке, чтобы он мог как-то отреагировать и сделать
> правильно

Перевести на русский таблицу master..sysmessages?


 
sniknik ©   (2005-08-15 17:57) [8]

> Я не заметил , что эти типы ошибок только для BDE, хотя я использую     ADO.
в 95% случаев (имхо) если не написано чем пользуется -> = начинающий и = BDE.

> Ошибки ADO ловяться E : EOleException, только E.ErrorCode возвращает одно и тоже значение при разных сообщениях.
ErrorCode
при ошибке см. ADOConnection1.Errors[0].NativeError это "родной" из MSSQL, только их может быть несколько (может поэтому и не дают номер, а дают ссылку н список?)

> Перевести на русский таблицу master..sysmessages?
по моему лучший вариант. только переводит(или ищет готовые переводы) пусть сам клиент.


 
MOA ©   (2005-08-16 09:14) [9]

>Перевести на русский таблицу master..sysmessages?
О!. На скульру ~ в 2001 это была очень популярная тема. Даже первоапрельский розыгрыш такой был - пост "Мелкософт выложил локализованный русский sysmessages и русский BOL" ;).
Полезно почитать - к сожалению, перевод sysmessages тоже имеет свои минусы. Главный - что скажет юзеру сообщение "Нарушение ссылочной целостности FK_InvToCli_ID_ITC в таблице InvToCli" :)? Или "Нарушение ограничения PRIMARY KEY "PK_TabSb". Не могу вставить дублирующийся ключ в объект "TabSb". Оператор был завершён."?


 
Dimous   (2005-08-16 10:22) [10]

Я, например, поступаю следующим образом. Все действия с БД обрамляю в try... except... end, т.е. отдельные блоки на вставку, изменение и т.д. Пользователю показываю что-типа "При вставке (изменении...) записи произошла ошибка.... ", причем в своем диалоге, имеющем кнопку [Подробнее], где можно узнать класс ошибки, Original Message, адрес и т.п.
Такой подход обеспечивает независимость обработчика от типа СУБД и механизма доступа.
IMHO, при нарушении ссылочной целостности обычный юзер ничего сделать не сможет - нужно постараться исключить такие случаи...



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

Текущий архив: 2005.09.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.059 c
14-1125502212
БарЛог
2005-08-31 19:30
2005.09.25
Задачки по Си


14-1125152413
Гоман
2005-08-27 18:20
2005.09.25
Вопрос про дефективный монитор


14-1125637818
SergP
2005-09-02 09:10
2005.09.25
ICQ-вирусы


14-1125040298
vecna
2005-08-26 11:11
2005.09.25
Супер ролик!


14-1123609221
rts111
2005-08-09 21:40
2005.09.25
Оцените программу