Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.008 c
4-87183
LazorenkoX
2002-12-11 00:32
2003.01.27
Помогите с версией файла!!!


6-87000
RGG
2002-11-27 13:29
2003.01.27
Помогите примером


4-87220
AlexG
2002-12-12 14:05
2003.01.27
Win32Api и VCL


1-86839
error 2k
2003-01-18 23:32
2003.01.27
Пауза в программе


1-86904
Danik
2003-01-16 13:17
2003.01.27
Про Radiogroup





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский