Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

Ограничения на значения вводимые в поля, на прогр. уровне   Найти похожие ветки 

 
VID ©   (2003-01-10 01:17) [0]

Есть ТБД 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 не пустовало :)
Думается что я делают что-то не так...
ХЭЛП МИ ПЛИЗ :)


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

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


 
Johnmen ©   (2003-01-10 09:28) [2]

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


 
Lord Warlock ©   (2003-01-10 09:31) [3]

или OnValidate поля


 
passm ©   (2003-01-10 09:39) [4]

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


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

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


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

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


 
Johnmen ©   (2003-01-10 10:05) [6]

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

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



 
passm ©   (2003-01-10 10:18) [7]

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 наверняка иной способ форматирования сообщений, но наверняка он тоже поддается простейшему синтаксическому анализу для выявления типа ошибки и извлечения ключевых слов (имя ограничения, триггера...).


 
Anatoly Podgoretsky ©   (2003-01-10 10:44) [8]

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


 
passm ©   (2003-01-10 10:57) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
3-86647
Explorer
2003-01-08 08:28
2003.01.27
Поиск данных


3-86656
Ahmad K
2003-01-05 03:10
2003.01.27
Из .txt в .db или представление базы ввиде TXT


1-86876
sterran
2003-01-15 16:00
2003.01.27
Про MessageDlg


14-87071
1k
2003-01-08 03:18
2003.01.27
Ложные запросы


14-87132
Jorjick
2003-01-10 05:46
2003.01.27
как убить windows