Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка EDataBaseError [D7, XP]


Alex7 ©   (2006-05-04 12:20:00) 

Уважаемые мастера!

Обработку исключения EDataBaseError
я провожу примерно так:

// E.Message: 'Field value required.'#$D#$A'Field: Cname'
//            'Key violation.'#$D#$A'Index: name'

procedure Izv_DBEr(pTbl: TTable; E: String);
Var r1: Integer; r2: String;
begin
 r1 := Pos('.', E);
 r2 := Trim(Copy(E, 1, r1)); // Текст ошибки
 If r2= 'Key violation.' Then MessageBox ('Эти данные уже вводились!);
 If r2 = 'Field value required.' Then  MessageBox ('Введите реквизит......');;
 Abort;
end;

Это плохой вариант, но как сделать лучше ?
Где можно посмотреть перечень возможных "E.Message"
для EDataBaseError ?. Думаю, что есть и другие
Потом, наверное, их можно идентифицировать
не только текстовым сравнением (например, по какому-то коду) ?
Подскажите, пожалуйста. Спасибо.


Alex7   (2006-05-06 17:08:00) [1]

>Какие СУБД-компоненты используешь при этом ?
Paradox.
Кроме того см. 7


Сергей М.   (2006-05-06 16:32:00) [2]


> Alex7   (06.05.06 14:52) [14]


Какие СУБД-компоненты используешь при этом ?


ANB   (2006-05-06 15:42:00) [3]


> Alex7   (06.05.06 14:52) [14]

Писал же уже.
1) Это ошибки приехавшие от СУБД
2) Желательно проверит все на клиенте (в том числе и запросами к БД), чтобы ошибок не возникало
3) Если лень проверять - наступи на все возможные грабли, собери список ошибок и обработай их.

В результате все равно должно получиться так, что ошибок от СУБД пользователь видеть не должен, а если вылезла незнакомая - пусть сообщит тебе.


Alex7   (2006-05-06 14:52:00) [4]

>Сергей М.
>Да что его искать ?
>DBConst.pas он называется (см. [1])

Так нет в DBConst текста "Field value required" и
"Key violation." тоже нет см.2


Desdechado   (2006-05-06 13:40:00) [5]

но здесь сообщение уже не датасетовское, а от СУБД будет

проверять до сохранения, например


Loginov Dmitry   (2006-05-06 12:01:00) [6]

Desdechado ©   (06.05.06 11:50) [11]
вот во избежание "глупых" сообщений типа "не заполнено обязательное поле" сделать умолчательные значения, которые сразу использовать в программе.


Так а если поле обязательное + уникальное, тогда что?


Desdechado   (2006-05-06 11:50:00) [7]

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

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


Сергей М.   (2006-05-06 11:12:00) [8]


> Loginov Dmitry ©   (05.05.06 20:45) [9]


Ну в целом - да. Можно и Pos() обойтись.
Но зато это дает общее решение подобных задач, которые могут в дальнейшем возникнуть, ну и теория+практика в новой (для автора) технологии тоже, думаю, будет иметь немалую ценность.


> Alex7   (05.05.06 19:14) [7]


> найти в Delphi  модуль


Да что его искать ?
DBConst.pas он называется (см. [1])


Loginov Dmitry   (2006-05-05 20:45:00) [9]

ИМХО, тут пользоваться регулярными выражениями - что из пушки по воробьям.
Вполне достаточно старого доброго Pos().


ANB   (2006-05-05 19:27:00) [10]


> Alex7   (04.05.06 12:20)

Вариант 1)
проверять корректность данных до их посылки в базу, чтобы исключения были именно исключениями.
Вариант 2) самому понаступать на грабли, поймать эти исключения и переписать их текст. По идее, у них еще и коды есть.


Alex7   (2006-05-05 19:14:00) [11]

Просмотрел рекомендованную статью о
регулярных выражениях.
 Если я правильно понял, то это совет
найти в Delphi  модуль, где приведены
используемые
E.Message: 'Field value required.'#$D#$A'Field: Cname'
//            'Key violation.'#$D#$A'Index: name'.

К сожалению, (видно в силу моей недостаточной квалификации)
средствами Windows XP я не смог найти найти эти
тексты. (тексты в других папках находятся, а в Delphi-нет.
Хотя я задавал режимы поиска в системных и закрытых файлах).
 Так что решения пока нет. Спасибо.


Сергей М.   (2006-05-05 09:06:00) [12]

http://www.rsdn.ru/article/alg/regular.xml


Alex7   (2006-05-04 20:51:00) [13]

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


Сергей М.   (2006-05-04 16:34:00) [14]


> Ну и что?


То что в этом случае впору обратить свой взор на регулярные выражения


Loginov Dmitry   (2006-05-04 16:32:00) [15]

А чем текстовое сравнение не устраивает? Хорошо хоть так проверить тип ошибки можно.


Alex7   (2006-05-04 16:28:00) [16]

Посмотрел. "Своих"  E.Message там
не нашел. Есть только один формат
на эту тему:
SFieldRequired = 'Field '%s' must have a value'.
Ну и что?


Сергей М.   (2006-05-04 13:23:00) [17]

см. DBConsts.pas


Наверх

Титульная страница Поиск, карта сайта Написать письмо