- •1. Архитектура и функции bde
- •Процесс доступа к данным из приложения
- •2. Псевдонимы баз данных и настройка вdе
- •3. Принципы построения баз данных
- •4. Типы баз данных
- •4.1. Локальные и файл серверные бд
- •4.2. Клиент-серверные бд
- •5. Механизм доступа к Базам данных
- •6. Создание таблиц с помощью Database Desktop
- •7. Основные свойства компонента Table и простейшие приложения на его основе
- •7.1. Установка связей между компонентами и базой данных, навигация по таблице
- •7.2. Свойства полей
- •7.3. Ограничения вводимых значений
- •7.4. Вычисляемые поля
- •7.5. Фильтрация данных
- •8. Некоторые компоненты визуализации данных
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 выпадающего списка отделов
-
щелчок на кнопке «Обновить» (при изменении диапазона возраста).