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

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

Ограничения на значения вводимые в поля, на прогр. уровне [D5, IB6.x]


VID ©   (2003-01-10 01:17:00) 

Есть ТБД T_1 с полем F_1 INTEGER;
Есть датасет DS которые работает с ТБД T_1
НА УРОВНЕ БД, полю F_1 установлено ограничение на сохраняемое значение VALUE >=0 AND VALUE <= 100

При DS.FieldByName("F_1").AsInteger := 101;
как и положено возникает сообщение с сервера о недопустимости ввода...
Как НА ПРОГРАММНОМ УРОВНЕ установить ограничение на значение вводимое в поле DS.F_1 и что бы это работало :)
я пробовал присвоить DS.FieldByName("F_1").CustomConstraint := "VALUE >= 0 AND VALUE <= 100" но не сработало.. при этом конечно ConstraintErrorMessage не пустовало :)
Думается что я делают что-то не так...
ХЭЛП МИ ПЛИЗ :)


passm   (2003-01-10 10:57:00) [1]

Я почему-то думал про MS SQL. Еще не проснулся, наверное :)
Anatoly Podgoretsky © (10.01.03 10:44)> Возможно ли используя его вывести (interbase.msg), например, сообщение: "Ошибка: Невозможно провести документ. Причина: рабочий день закрыт"?


Anatoly Podgoretsky   (2003-01-10 10:44:00) [2]

К тому же никто не мешает подойти к этому на профессональном уровне, для этого существует файл interbase.msg


passm   (2003-01-10 10:18:00) [3]

VID © (10.01.03 09:58)> Для перевода сообщений от сервера на нормальный для пользователя язык можно перехватывать Exception"ы. Анализировать Exception.Message, вытаскивая из него ключевые слова, направлять запрос к заполненным тобою таблицами и извлекать из него нормальное сообщение.
Например, имеется CONSTRAINT CONSTRAINT1_ON_TABLE1 (FIELD1 >= 0). Когда генерируется Exception, и в строке сообщения получаем "..."SQLXXXXX..."CONSTRAINT1_ON_TABLE1"...", то анализирем XXXXX, пишем в параметр запроса "CONSTRAINT1_ON_TABLE1" и обращаемся к БД. Если запрос вернул некий текст, то выводим его. В противном случае оригинальное сообщение.
Надеюсь, что идея ясна.
P.S. Данный метод обработки ошибок применяю при работе с DB2, в MS SQL наверняка иной способ форматирования сообщений, но наверняка он тоже поддается простейшему синтаксическому анализу для выявления типа ошибки и извлечения ключевых слов (имя ограничения, триггера...).


Johnmen   (2003-01-10 10:05:00) [4]

>VID © (10.01.03 09:58)
>Я думаю было бы гораздо лучше если пользователь при вводе
>некорректного значения получил бы нормальное сообщение на
>русском, нежели сообщение на англ языке с непонятными для
>пользователя именами полей на англ языке...

Никто же не запрещает их подавить и выводить свои...:)
(см. предложения выше)


VID   (2003-01-10 09:58:00) [5]

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


to Наталия: как то не думал об этом... мысли были направлены в сторону CustomContraints, т.е. хотелось что бы хоть это было сделано не ручками :)

to Lord Warlock: попробую...


passm   (2003-01-10 09:39:00) [6]

Johnmen © (10.01.03 09:28)> Но, на практике, IMHO, дублирование проверки корректности данных может оказаться полезным. Имеется в виду простейшие ограничения. Например, ввода неотрицательных чисел.


Lord Warlock   (2003-01-10 09:31:00) [7]

или OnValidate поля


Johnmen   (2003-01-10 09:28:00) [8]

Если подходить к вопросу философски, то ни к чему разносить относящуюся к одному объекту бизнес логику по двум разным местам - БД и приложению. Еще хуже, если бизнес логика дублируется. Как в данном случае...


Наталия   (2003-01-10 05:57:00) [9]

Обрабатывать события dataset-а onposterror,beforepost - не пробовал?


Наверх

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