![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка 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