Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л_8_9_БД.doc
Скачиваний:
1
Добавлен:
08.12.2018
Размер:
350.21 Кб
Скачать

7.4. Вычисляемые поля

Создадим вычисляемое поле, значение которого вычисляется на основании значений других полей записи. Например, поле, вычисляющее возраст сотрудника по году его рождения:

Ø Вызвать Редактор полей двойным щелчком на Table1. Из контекстного меню Редактора полей выбрать раздел New. Появится окно добавления нового поля в разделе Field Properties (свойства поля) нужно указать:

_ имя поля (Name) – назовем его Age

_ тип данных (Type) – Smallint;

_ и для некоторых типов (например, для строк) – размер (Size).

Ø В группе радиокнопок Field Type выбрать Calculated.

Ø Нажать на кнопку OK и вернуться в окно Редактора полей, там появится новое поле Age. Изменить для этого поля в Инспекторе объектов значение DisplayLabel на «Возраст».

Ø Чтобы указать функцию вычислений надо выйти из Редактора полей, выделить Table1, перейти в Инспектор объектов и задать обработчик события OnCalcFields, которое наступает каждый раз, когда нада обновить значение вычисляемых полей таблицы. В этом обработчике можно использовать функцию DecodeDate для преобразования ее первого аргумента, имеющего тип TDateTime, в целые значения года, месяца и дня.

Следующий программный код можно использовать, чтобы отобразить текущие значения года, месяца, дня, часа, минуты, секунды, миллисекунды из функции Now, которая возвращает значение текущих даты и времени: Date + Time:

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

Компонент Table позволяет также отфильтровывать данные по определенным критериям с использоваием свойств: Filter, Filtered, FilterOptions.

Свойство Filtered включает или выключает использование фильтра.

В свойстве Filter записывается сам фильтр в виде строки, содержащей ограничения на значения полей. Например, если свойство Filtered=true и в свойстве Filter записано:

Ø Dep=’Цех 1’, то в таблице отобразятся только те записи, в которых поле Dep имеет значение ’Цех 1’

Ø Dep=’Цех *’ – отображение всех записей, в которых значение поля Dep начинается с ’Цех’ (При этом опция foNoPartialCompare свойства FilterOptions должно быть false). Свойство FilterOptions содержит опции foNoPartialCompare(=true – запрещает частичное совпадение при сравнении) и foCaseInsentitive – делает сравнение строк нечувствительным к региситру (если включить эту опцию, то «Цех 1» и «цех 1» будут считаться идентичными).

Ø При записи условий можно использовать операции отношения =,>,>=,<,<=,<>, а также логические операции and, or, not. Фильтр:

(Dep=’Цех 1’) and (Year_b<=1970) and (Year_b>=1940)

отобразит сотрудников цеха 1, чей год рождения лежит в заданных пределах. Но использовать в фильтре имена вычисляемых полей (например, поля Age) не разрешается.

Добавим в приложение возможность фильтрации отображаемых записей по отделам, по возрасту и по обоим критериям:

Ø Перенесем на форму группу радиокнопок RadioGroup (Name=RGF). Зададим в редакторе свойству RGF->Items строки: Нет, Все, Отдел, Возраст. RGF->ItemIndex==1, RGF->Columns=2, RGF->Caption=Фильтрация

Ø Перенесем на форму выпадающий список ComboBox (Name=CBDep) для выбора подразделения, по которому производится фильтрация. В свойство CBDep->Items занести список имен подразделений.

Ø Два элемента SpinEdit со страницы Samples (Name=SEmin и SEmax) для задания диапазона возраста при фильтрации. Задать в этих компонентах соотвествующие значения MaxValue, MinValue, Value.

Ø Кнопку с заголовком «Обновить».

Ø Фильтрация в приложении должна проводиться при следующих событиях:

  • щелчок в группе радиокнопок RGFClick (его текст приведен ниже, для остальных событий проводится делегирование),

  • при событии OnChange выпадающего списка отделов

  • щелчок на кнопке «Обновить» (при изменении диапазона возраста).