002 — Создание перекрестных таблиц в Delphi

Создание перекрестных таблиц в Delphi-7

Условие задания

Задана таблица товаров, со следующей структурой полей

Название поля

Тип данных Ключевое поле

Объяснение

ID_Tovar

Счетчик +

Уникальный идентификатор поля

Name

Текстовый

Название товара

Price

Вещественное число

Цена товара

Count

Целое число

Количество единиц товара

Используя средства системы программирования Delphi-7 сделать перекрестную таблицу по следующим двум измерениям: Название товара и цена единицы товара. Также осуществить суммирование по столбцам и строкам таблицы.

 

Выполнение

1. Запуск Delphi. Создание проекта

Запустить Delphi. Создать проект по шаблону VCL Forms Application. Подробный пример создания нового проекта по шаблону VCL Forms Application описывается здесь.

 

2. Создание псевдонима и таблицы базы данных

Создаем базу данных с псевдонимом myDb. Создаем таблицу базы данных с названием «tovar.db« имеющую структуру согласно с условием задачи.

Подробный пример создания базы данных и таблицы базы данных с помощью утилиты Database Desktop описывается здесь.

3. Компоненты для создания перекрестной таблицы

Для создания перекрестных таблиц в системе программирования Delphi используются компоненты с вкладки «Decision Cube» палитры компонент (рис. 1).

Delphi. Вкладка “Decision Cube” из палитры компонент

Рис. 1. Вкладка “Decision Cube” палитры компонент

Для начала выносим на форму следующие четыре компонента из вкладки «Decision Cube»:

  • компонент типа TDecisionCube (по умолчанию имеет имя DecisionCube1);
  • компонент типа TDecisionQuery (по умолчанию имеет имя DecisionQuery1);
  • компонент типа TDecisionSource (по умолчанию имеет имя DecisionSource1);
  • компонент типа TDecisionGrid (имя по умолчанию DecisionGrid1).

Из этих четырех компонент только TDecisionGrid предназначен для отображения данных таблицы.

Форма с размещенными компонентами имеет вид (рис. 2):

Delphi. Главная форма приложения с компонентами DecisionCube1, DecisionQuery1, DecisionSource1, DecisionGrid1

Рис. 2. Главная форма приложения с компонентами DecisionCube1, DecisionQuery1, DecisionSource1, DecisionGrid1

 

4. Настройка компонент

С помощью Object Inspector устанавливаем следующие свойства для компонент:

  • в компоненте DecisionCube1 свойство DataSet устанавливаем равным в DecisionQuery1;
  • в компоненте DecisionQuery1 свойство DatabaseName устанавливаем в значение «myDb»;
  • в компоненте DecisionSource1 свойство DecisionCube устанавливаем в значение DecisionCube1;
  • в DecisionGrid1 свойство DecisionSource равно DecisionSource1.

 

5. Настройка “Decision Query Editor”

Непосредственная настройка перехрестной таблицы осуществляется в компоненте DecisionQuery1. Для вызова окна настройки нужно кликнуть правой кнопкой мышки и из контекстного меню выбрать «Decision Query Editor…». Другой метод вызова – двойной клик мышкой в области компонента DecisionQuery1 (рис. 3).

Delphi. Вызов редактора для настройки в компоненте DecisionQuery1

Рис. 3. Вызов редактора для настройки в компоненте DecisionQuery1

В итоге откроется окно «Decision Query Editor» (рис. 4).

Delphi. Окно редактора “Decision Query Editor”

Рис. 4. Окно редактора “Decision Query Editor”

Как видно из рисунка, окно состоит из двух вкладок:

  • вкладка «Dimensions/Summaries» позволяет задавать поля таблицы и агрегатные функции (суммы, общее количество и т.д.) на основании которых производятся вычисления;
  • вкладка «SQL Query» позволяет описывать запросы к таблице на языке SQL.

В этом окне доступны следующие области:

  • область «List of Available Fields» выводит информацию о полях выбранной таблицы из списка (области) Table;
  • область Dimensions выводит информация о полях таблицы, которые есть измерениями на основании которых рассчитываются агрегатные функции (суммы, среднее арифметическое и т.д.);
  • область Summaries выводит какие агрегатные функции применяются к таблице;
  • поле Table показывает таблицу базы данных, для которой ведутся вычисления;
  • поле Database задает базу данных, к таблицам которой осуществляются вычисления.

В нашем случае выбираем таблицу «tovar.db« базы данных «myDb».

Окно редактора будет иметь следующий вид (рис. 5).

Delphi. Окно редактора “Decision Query Editor” после выбора базы данных и таблицы

Рис. 5. Окно редактора “Decision Query Editor” после выбора базы данных “myDb” и таблицы “tovar.db”

С помощью стрелок влево (вправо) можно добавлять поля таблицы, которые будут принимать участие в вычислениях. Поля добавляются в область Dimensions. С помощью стрелок влево/вправо, размещенных в нижней части редактора можно задавать ту или иную агрегатную функцию (рис. 6).

Delphi. Добавление агрегатных функций в таблицу базы данных

Рис. 6. Добавление агрегатных функций

Сформируем окно редактора таким образом, чтобы оно имело следующий вид (рис. 7) и подтвердим свой выбор кликом на «ОК».

Delphi. Окно редактора Decision Query Editor

Рис. 7. Окно редактора после заполнения (настройки) всех полей

Во вкладке «SQL Query» можно просмотреть вид сформированного редактором запроса на языке SQL.

 

6. Настройка компонента DecisionCube1

После настройки компонента TDecisionQuery можна осуществить настройку компонента TDecisionCube.

Для этого вызывается редактор «Decision Cube Editor» точно так же как и в случае с редактором «Decision Query Editor» (рис. 8).

Delphi. Вызов редактора “Decision Cube Editor” компонента DecisionCube1

Рис. 8. Вызов редактора “Decision Cube Editor” компонента DecisionCube1

В результате откроется окно “Decision Cube Editor” (рис. 9).

Delphi. Окно редактора “Decision Cube Editor”

Рис. 9. Окно редактора “Decision Cube Editor”

Окно содержит две вкладки: «Dimension Settings» и «Memory Control».

В первой вкладке «Dimension Settings» можно определить ряд настроек для измерений куба. Вкладка содержит такие поля:

  • поле «Display Name» задает имя, которое будет отображаться в компоненте отображения данных TDecitionGrid;
  • список «Type», который задает тип поля. В нашем случае список неактивен, так как информация вытягивается из компонента TDecisionQuery;
  • список «Active Type» задает момент загрузки в память базы данных («As Needed» — по мере необходимости, «Active» — всегда, «Inactive» — никогда);
  • строка «Format» позволяет задавать формат отображаемых значений;
  • выпадающий список «Grouping» позволяет группировать данные по времени.

В нашем случае оставляем все как есть без изменений.

 

7. Отображение перекрестной таблицы

Если предыдущие шаги выполнены верно, то можно отобразить перекрестную таблицу. Для этого в компоненте DecisionQuery1 свойство Active устанавливаем в значение true.

В результате форма программы будет иметь следующий вид (рис. 10).

Delphi. Перекрестная таблица. Главная форма

Рис. 10. Вид формы после проведенных настроек

После запуска программы на выполнение получаем перекрестную таблицу (рис. 11).

Delphi. Программа демонстрации отображения перекрестной таблицы базы данных

Рис. 11. Результат выполнения программы

 

Итоги

В этой работе изучено создание элементарных перекрестных таблиц в системе программирования Delphi-7.

Для организации работы с перекрестными таблицами используются следующие компоненты с палитры «Decision Cube»:

  • компонент TDecisionCube;
  • компонент TDecisionQuery;
  • компонент TDecisionSource;
  • компонент отображения TDecisionGrid.

Предварительно база данных и таблица должны быть созданы средствами утилиты Database Desktop, которая идет как инструмент работы с базами данных в системе программирования Delphi -7.

В рассмотренном примере создана таблица по двум измерениям. Пользователь может на свое усмотрение создавать перекрестные таблицы с большим количеством измерений. Увеличение измерений приводит к усложнению восприятия сформированных данных в таблице. Поэтому рекомендуется, чтобы число измерений колебалось от 2 до 4.