Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.024 c
2-1124270115
Pasha L
2005-08-17 13:15
2005.09.25
message


2-1124172779
Гость22
2005-08-16 10:12
2005.09.25
Здравствуйте!


14-1125402367
leonidus
2005-08-30 15:46
2005.09.25
Подскажите софтину


3-1124142361
Adolis
2005-08-16 01:46
2005.09.25
Вопросы по БД.


1-1125323475
twin
2005-08-29 17:51
2005.09.25
Русский текст и английская раскладка




   Наверх