508 Глава 9

Вы ввели вычисляемое поле Age, но еще не указали программе, как его надо
вычислять. Чтобы указать процедуру вычислений, выйдите из Редактора Полей,
выделите Table!, перейдите в Инспекторе Объектов на страницу событий и щелк-
ните на событии OnCalcFields. Это событие наступает каждый раз, как надо обно-
вить значение вычисляемых полей таблицы.

Чтобы вычислить возраст по году рождения вы можете в обработчике этого со-
бытия написать оператор:

TablelAge->Value = 1999 - TablelYear_b->Value;

В этом операторе TablelAge->Value и TablelYear_b->Value — значения полей
Age и Year_b соответственно. Правда, этот оператор рассчитан только на работу в
1999 году, и в дальнейшем его придется ежегодно менять. Можно, добавив в обра-
ботчик пару строк, сделать расчет возраста универсальным. Это делает следующий
обработчик:

void_fastcall TFormI::TablelCalcFields(TDataSet *DataSet)
(

unsigned short Year, Month, Day;

Date().DecodeDate(&Year,&Month,&Day) ;

TablelAge->Value = Year - TablelYear_b->Value;

В этом коде введены переменные Year, Month и Day для хранения текущего
года, месяца и дня. Использована функция Date (см. раздел 14.8 в главе 14), воз-
вращающая текущую дату типа TDateTime (этот тип используется в C++Builder
для хранения дат и времени). И использована функция DecodeDate для преобразо-
вания этой даты в целые значения года, месяца и дня. В результате переменная
Year становится равной текущему году (переменные Month и Day нам не нужны и
определены только для того, чтобы можно было обратиться к функции DecodeDate).

Запустите приложение и посмотрите, как оно теперь выглядит (рис. 9.33).

Рис. 9.33

Приложение с введенном вычисляемым
полем Возраст

9.5.5 Фильтрация данных

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

Фильтрация может задаваться свойствами Filter, Filtered и FilterOptions
компонента Table. Свойство Filtered включает или выключает использование фи-
льтра. А сам фильтр записывается в свойство Filter в виде строки, содержащей
определенные ограничения на значения полей. Например, вы можете задать в
свойстве Filter