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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
3-1123585717
Alex--
2005-08-09 15:08
2005.09.25
Провайдер Interbase для ADO


14-1125744307
Cardinal
2005-09-03 14:45
2005.09.25
! Пятна на дисплее сквозь солнечные очки


14-1125863274
Кэш третьего уровня
2005-09-04 23:47
2005.09.25
сетевое администрирование


1-1125809659
Lower_
2005-09-04 08:54
2005.09.25
Использование MDIChild


3-1124100158
kreyl
2005-08-15 14:02
2005.09.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский