Шаг 43.
Работа с локальными БД в Delphi. Работа с полями. Использование объектов класса TField. События компонента TField

    На этом шаге мы рассмотрим события OnChange и OnValidate.

    События компонента TField возникают после или до присвоения полю значения. Благодаря написанию обработчиков этих событий можно корректировать вводимые данные и не допускать ввод недопустимых значений.

    Рассмотрим основные события этого компонента.

Событие OnChange

    Событие OnChange возникает после изменения данных и успешной записи их в буфер. На практике крайне редко пишут обработчик этого события, в основном приходиться писать обработчик для событий, возникающих перед занесением данных в буфер, но иногда он бывает крайне полезен.

    Вернемся к нашей программе, которая работала с БД FIRMA (приложение 39 шага). Откройте приложение и сохраните его под именем FirmaUnit и FirmaProject соответственно


    Совет. Давайте модулям осмысленные имена, т.к. если вы будете создавать более сложные приложения, состоящие из нескольких форм, модулей и т.д., вам будет гораздо проще ориентироваться в них.
Щелкните два раза на компоненте Table2. Перед вами откроется редактор полей. У нас уже созданы некоторые объекты-поля, выберите объект с именем Naim. Напишем для этого объекта такой обработчик события OnChange.


Рис.1. Выбор поля Naim

procedure TForm1.Table2NaimChange(Sender: TField);
begin
 ShowMessage ('Вы выбрали '+ DBLookupComboBox1.Field.AsString);
end;

    Запустите программу и попробуйте добавить запись. Когда вы выберите в компоненте DBLookupComboBox1 какое либо значение, программа выдаст сообщение "Вы выбрали <значение>".

Событие OnValidate

    Событие OnValidate возникает после изменения значения до записи в буфер. С помощью обработчика этого события можно проверить введенное в поле значение на его соответствие некоторым ограничениям или условиям. Это событие наступает при изменении значения поля вручную или программно до выполнения метода Post, который запоминает изменения БД. Поэтому если полю присвоено неверное значение, выполнение метода Post можно предотвратить, вызвав метод Abort.

    Например, поле Zena содержит цену, поэтому неразумно будет позволять пользователю вводить отрицательное значение. Чтобы предотвратить ввод отрицательных значений напишем следующий обработчик события OnValidate.

procedure TForm1.Table2ZenaValidate(Sender: TField);
begin
  if Table2Zena.Value < 0 then
    begin
     ShowMessage('Цена должна быть положительна');
     Abort;
    end;
end;

    Запускаем программу. После ввода отрицательного значения в поле Zena и любой попытке сохранить его, либо при потере фокуса компонента DBEdit3, выдается сообщение "Цена должна быть положительна".


Рис.3. Выдача сообщения в случае ввода отрицательного значения

    Созданное приложение можно взять здесь.

    На следующем шаге мы закончим изучение событий.




Предыдущий шаг Содержание Следующий шаг