Текущий архив: 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.47 MB
Время: 0.038 c