Форум: "Базы";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
ВнизОграничения на значения вводимые в поля, на прогр. уровне Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c