Delphi 3 и создание приложений баз данных

       

Свойство IsNull и обработчики событий OnSetText, On Validate, OnChange


Свойство IsNull: Boolean; во время выполнения возвращает True, если поле содержит пустое значение.

Проверить введенное в поле значение на его соответствие некоторым ограничениям или условиям можно в обработчике события OnValidate. Это событие наступает при изменении значения поля либо вручную, либо программно. Событие наступает до выполнения метода Post, который запоминает изменения БД. Поэтому, если полю присвоено неверное значение, выполнение метода Post можно предотвратить, выполнив метод Abort или возбудив исключительную ситуацию (raise Exception.Create}. Заметим, что для новых записей данное событие выставляется также, поскольку при занесении значений в поля пустые значения заменяются на непустые (т.е. модифи-цируются). Данный подход контроля правильности значений называется ориентированным на поля.

Существует и другой подход, ориентированный на записи. Он состоит в том, что в структуре ТБД при ее определении описываются ограничения на значения, которые может принимать данное поле. В этом случае контроль правильности ведется автоматически.

Пример.

Пусть поле Table I Company не должно содержать символа '@'.

procedure TForm1.Table1CompanyValidate(Sender: TField) ;

begin

IF POS('@',TablelCompany.AsString) > 0 THEN

begin

ShowMessage('Обнаружен символ @!');

Abort;

end;

end;

или



procedure TForm1.Table1CompanyValidate(Sender: TField);

begin

IF POS('@',TablelCompany.AsString) > 0 THEN

raise Exception.Create('Неверное значение');

end;

Если символ '@' содержится в значении, присвоенном полю, метод Abort или принудительно возбужденная исключительная ситуация не позволят выполниться методу Post и запись с неверным полем не будет физически записана в БД НД останется в том состоянии, в котором он находился (режиме редактирования dsEdit или добавления новой записи dslnsert}.

Для проверки введенного значения может быть использовано и другое событие, OnSetText Подобно событию OnVahdate, оно возникает при изменении значения поля Однако на момент события новое значение полю не присвоено и, если этого не сделать программно в обработчике события, сделано никогда не будет.

Например,

пусть в поле Table 1PUR_PRICE типа TFloatField было изменено значение с 10 на 200 Пусть новое значение не должно превышать 100 Тогда обработчик события будет выглядеть так

procedure TFormI.TablelPUR_PRICESetText(Sender: TField; const Text: String);

var Tmp : Real;

begin

Tmp := StrToFloat(Text);

IF Tmp > 100 THEN

ShowMessage('Ошибочное значение')

ELSE

TablelPUR_PRICE.Value := Tmp;

end;

что аналогично такому обработчику события OnVahdate.

procedure TFormI.TablelPUR_PRICEValidate(Sender: TField);

begin

IF TablelPUR_PRICE.Value > 100 THEN begin

ShowMessage('Ошибочное значение');

Abort;

END;//if

end;

Как видно, особенность события OnSetText состоит в том, что в обработчик передается константа-параметр Text, содержащая в текстовом виде новое значение, назначенное полю, в то время как действительное значение поля остается без изменения

Третье событие, OnChange, может быть использовано для тех же целей, что и On Validate

procedure TFormI.TablelPUR_PRICEChange(Sender: TField);

begin

IF TablelPUR_PRICE.Value > 100 THEN

raise Exception.Create('Ошибочное значение');

end;

Порядок вызова обработчиков событий OnSetText, On Validate, OnChange

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

1 OnSetText;

2 On Validate,

3 OnChange

Это важно, когда действия по проверке правильности нового значения поля сосредоточены не в одном обработчике, а распределены в обработчиках разных событий

Относительно события OnSetText известно, что если полю присвоено ошибочное значение, то нет нужды выполнять метод Abort или возбуждать исключительную ситуацию для предотвращения занесения этой записи в ТБД (поскольку новое значение в поле в этом случае еще не занесено) Наоборот, если поле удовлетворяет критериям правильности, в него программно нужно записать введенное пользователем новое значение (передаваемое в обработчик как параметр const Text String)

В обработчиках событий OnVahdate и OnChange, наоборот, в этом случае необходимо выполнять метол Abort или возбуждать исключительную ситуацию для предотвращения занесения этой записи в ТБД (поскольку новое значение в поле в этом случае уже занесено)

Однако следует помнить, что событие OnChange возникает только после события On Validate Поэтому, обработчик события OnChange может быть и не вызван, если обработчик On Validate выполняет метод Abort или возбуждает исключительную ситуацию для того, чтобы измененная запись с некорректным значением поля не была записана в ТБД



Содержание раздела