Ограничения

Контроль вводимых в поля набора данных в Delphi возложен на объекты полей, а не на компоненты отображения данных. Именно в рамках этого вопроса мы рассмотрим работу методов-обработчиков событий базового класса TField.

Перед сохранением значения поля в БД всегда вызывается метод-обработчик onvalidate, при этом автоматически проводится проверка на выполнение задаваемых ограничений и ограничений типа данных. Кроме этого, здесь можно предусмотреть свою дополнительную обработку:

procedure TForml.TablelSomeFieldValidate(Sender: TFieid); 

begin

if (Sender as TFieid).Value < 0 then 

begin

ShowMessage('Значение поля не может быть отрицательным'); 

(Sender as TFieid).Value := Null; 

end; 

end;

Различают контроль значения в целом и посимвольный контроль. Метод OnValidate проверяет значение поля целиком. Если при проверке обнаружена ошибка, то выдается сообщение и фокус формы устанавливается на соответствующем компоненте отображения данных.

Если метод OnValidate не вызвал исключительной ситуации, то при сохранении значения поля в БД вызывается обработчик события onchange. В принципе, можно предусмотреть операции по контролю данных и в этом методе, но тогда в случае ошибки возникает нежелательная исключительная ситуация, которая может привести к серьезным сбоям в работе приложения.

Проверить текущее значение поля перед его появлением в компоненте отображения данных можно в методе-обработчике OnGetText. Если параметр DisplayText принимает истинное значение, то в параметре Text передается значение свойства DisplayText (значение в строковом формате в таком виде, как оно будет показано в компоненте отображения данных — с символами форматирования). В противном случае в параметре Text передается текущее значение в строковом формате.

Примечание 

При использовании метода-обработчика OnGetText на разработчика ложится обязанность самостоятельно предусмотреть передачу значения в компонент отображения данных, в противном случае компонент останется незаполненным.

В методе-обработчике onSetText можно осуществлять текущий контроль значения в строковом формате в том виде, как оно представлено в компоненте отображения данных. Напомним, что этот обработчик вызывается при каждом изменении свойства Text класса TField.

Рассмотренные методы-обработчики удобнее всего использовать для проверки текущего значения с точки зрения программной логики. Например, чтобы отпускная цена не была ниже закупочной или чтобы остаток не был больше первоначального количества товара в партии. Для проверки правильности самого значения класс TField имеет несколько полезных свойств.

Если на сервере БД задано ограничение на некоторое поле, его можно использовать в приложении Delphi при помощи свойства importedconstraint

Для создания собственного ограничения можно использовать свойство Customconstraint, в котором применяется синтаксис SQL:

Value>10

ИЛИ

OutputPrice>InputPricexl.25

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

Для встроенного контроля предусмотрено специальное свойство — GonstraintErrorMessage, которое выводится в виде сообщения при возникновении ошибки. Согласитесь, что это гораздо проще, чем исправлять и перекомпилировать соответствующие файлы ресурсов. Если приложение работает с сервером БД и возникла ошибка ограничения поля, то выводится сообщение, определяемое сервером, а не этим свойством.

Если для поля заданы ограничения, то свойство HasConstraints принимает истинное значение.

Посимвольный контроль данных осуществляется свойством validchars, в котором можно определить допустимые в строковом представлении значения поля символы, и методом isvalidchar, который определяет допустимость использования переданного в параметре символа.

Еще один мощный инструмент контроля данных предоставляет свойство EditMask, которое позволяет создавать шаблоны ввода данных, облегчая тем самым работу пользователя и уменьшая возможность ошибки. Рассмотрим правила создания шаблонов.

Шаблон состоит из трех частей.

Первая часть содержит управляющие символы собственно шаблона. Доступные для создания шаблона символы приведены в табл. 13.2.

Таблица 13.2. Управляющие символы шаблона

Символ

Описание

!

>

Все символы после этого преобразуются в заглавные

<

Все символы после этого преобразуются в строчные

<>

Все символы после этого остаются в том регистре, как это было задано пользователем

\

Символ, следующий за этим, считается алфавитным, а не управляющим

L

В позиции этого символа обязательно должен находиться только алфавитный символ

I

В позиции этого символа может находиться алфавитный символ

А

В позиции этого символа обязательно должен находиться алфавитный символ или цифра

а

В позиции этого символа может находиться алфавитный символ или цифра

C

В позиции этого символа обязательно должен находиться знак препинания

с

В позиции этого символа может находиться знак препинания

0

В позиции этого символа обязательно должна находиться цифра

9

В позиции этого символа может находиться цифра

#

В позиции этого символа может находиться цифра, плюс или минус

:

Символ разделения часов, минут и секунд (зависит от системных установок)

/

Символ разделения дней, месяцев, годов (зависит от системных установок)

;

Символ разделения частей шаблона

-

Символ автоматического ввода в текст пробела

В первую часть шаблона можно включать любые алфавитные символы (для создания поясняющих надписей, слов и сокращений), если их нет среди управляющих символов. Также можно использовать в качестве алфавитных и управляющие символы, для этого перед ними нужно помещать символ "\".

Вторая часть состоит из одного символа и определяет, могут ли не арифметические символы быть частью вводимого текста. Если здесь расположен ноль, то можно вводить только цифры, если любой другой символ — можно использовать и алфавитные символы.

В третьей части содержится символ, используемый для обозначения мест, запрещенных для ввода.

Части шаблона разделяются точкой с запятой.

Например, шаблон для ввода телефонного номера выглядит следующим образом:

!\{999\)000-0000;1;_

 


Знаете ли Вы, что любой разумный человек скажет, что не может быть улыбки без кота и дыма без огня, что-то там, в космосе, должно быть, теплое, излучающее ЭМ-волны, соответствующее температуре 2.7ºК. Действительно, наблюдаемое космическое микроволновое излучение (CMB) есть тепловое излучение частиц эфира, имеющих температуру 2.7ºK. Еще в начале ХХ века великие химики и физики Д. И. Менделеев и Вальтер Нернст предсказали, что такое излучение (температура) должно обнаруживаться в космосе. В 1933 году проф. Эрих Регенер из Штуттгарта с помощью стратосферных зондов измерил эту температуру. Его измерения дали 2.8ºK - практически точное современное значение. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution