Главная страница
    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.315 c
14-1125580731
size=20
2005-09-01 17:18
2005.09.25
Защита программы


14-1125355510
KilkennyCat
2005-08-30 02:45
2005.09.25
http://delphi84.valuehost.ru


14-1125319285
data
2005-08-29 16:41
2005.09.25
Вопрос к "кошатникам" и "собачникам"


1-1125383823
Rogis
2005-08-30 10:37
2005.09.25
Функция заглючила


9-1117216279
rll-progr
2005-05-27 21:51
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский