- •1Создание базы данных путевых листов
- •1.1Создание таблицы «Водители»
- •1.2Создание таблицы «Автомобили»
- •1.3Создание таблицы «Пункты назначения»
- •1.4Создание таблицы «Путевые листы»
- •1.5Создание связей между таблицами базы «Путевые листы»
- •2Создание экранных форм для ведения базы данных путевых листов
- •2.1Создание экранной формы для таблицы «Водители»
- •2.2Создание экранной формы для таблицы «Автомобили»
- •2.3Создание экранной формы для таблицы «Пункты назначения»
- •2.4Создание экранной формы для таблицы «Путевые листы»
- •3Редактирование структуры базы данных
- •3.1Добавление поля в существующую таблицу
- •3.2Добавление новой таблицы в базу данных
- •4Обработка данных бд
- •4.1Сортировка записей по одному полю
- •4.2Сортировка записей по нескольким полям
- •4.3Использование вычисляемых полей
- •4.4Использование групповых операций
- •4.5Использование фильтров (запросов к одной таблице)
- •4.6Использование запросов к нескольким таблицам
- •4.7Использование перекрестных запросов
- •5Формирование отчетов
- •5.1Создание автоотчетов
- •5.2Создание отчетов с использованием мастера
- •6Экспорт данных и макросы
- •7Оформление приложения
4.4Использование групповых операций
Для определения записи с максимальным (минимальным) значением некоторого поля, вычисления итоговой суммы, среднего значения, общего количества и т.п. используются групповые операции, которые задаются в запросах. Наиболее часто используются такие групповые операции (табл. 4.1):
Таблица 4.1 – Основные групповые операции
-
Sum
Сумма значений поля.
Avg
Среднее от значений поля.
Min
Наименьшее значение поля.
Max
Наибольшее значение поля.
Count
Количество значений поля без учета пустых (Null) значений.
Применение групповых операций рассмотрим на примере определения общего количества водителей. Для этого необходимо в окне объектов БД перейти на вкладку «Запросы» и выбрать пункт «Создание запроса в режиме конструктора». После этого, в появившемся окне (см. рис. 4.6) выбрать таблицу «Водители» и добавить её в источники данных запроса (нажатием кнопки «Добавить»).
Чтобы
задать групповую операцию определения
количества записей (Count) необходимо
выбрать поле, по которому будет выполняться
подсчет записей (обычно в качестве
такого поля выбирается уникальное
ключевое поле). В рассматриваемом примере
для этого целесообразно выбрать поле
«Табельный номер». Далее необходимо
включить возможность использования
групповых операций, нажатием на кнопку
на панели инструментов. После этого в
окне конструктора запроса добавится
строка «Групповая операция» (рис. 4.11).
Рисунок 4.11 – Конструктор запроса с групповой операцией определения общего количества водителей
В этой строке необходимо выбрать требуемую групповую операцию (в нашем случае, Count) и можно выполнять запрос (см. рис. 4.8).
Для лучшего восприятия результата выполнения запроса имеет смысл задать соответствующую подпись поля, указав перед его именем текст «Всего водителей:».
Рисунок 4.12 – Результат выполнения запроса с групповой операцией определения общего количества водителей
Аналогично формируются запросы для определения общего количества автомобилей (в качестве поля для подсчета можно использовать гаражный или гос. номер), количества пунктов назначения, в которые осуществляются перевозки (поле для подсчета – код пункта назначения) и т.п.
Групповые операции применимы и к вычисляемым полям. Например, для определения среднего возраста (в годах) водителей, работающих на предприятии необходимо вначале задать вычисляемое поле «Возраст» (см. п. 4.3) а затем применить к нему групповую операцию определения среднего значения Avg (рис. 4.13).
Рисунок 4.13 – Конструктор запроса с вычисляемым полем и групповой операцией определения среднего возраста водителей
Результат выполнения запроса представлен на рис. 4.14
Рисунок 4.14 – Результат выполнения запроса с вычисляемым полем и групповой операцией определения среднего возраста водителей
4.5Использование фильтров (запросов к одной таблице)
Для отбора записей из одной таблицы по заданному критерию (или нескольким критериям) используются фильтры.
Самым
простым видом фильтра является «Фильтр
по выделенному». Для его создания
необходимо «мышкой» выделить значение
поля (или его часть) и выбрать в главном
(или контекстном, появляющемся при
нажатии правой кнопки «мышки») меню
пункт «Фильтр по выделенному» или нажать
на панели инструментов кнопку
(рис. 4.15).
Рисунок 4.15 – Создание фильтра «по выделенному» для отбора водителей с фамилией, оканчивающейся на «-ов»
Результат применения фильтра показан на рис. 4.16.
Рисунок 4.16 – Результат применения фильтра «по выделенному» для отбора водителей с фамилией, оканчивающейся на «-ов»
Для
отмены фильтрации необходимо «отжать»
кнопку
на панели инструментов (см. рис. 4.16).
Просмотреть/задать установки фильтра (рис. 4.17) можно в окне свойств таблицы, которое вызывается в режиме конструктора (см. рис. 4.5).
Рисунок 4.17 – Установки фильтра
Текст ((ВОДИТЕЛИ.ФАМИЛИЯ Like “*ов”)) в поле «Фильтр» означает, что в таблице «Водители» производиться отбор записей по полю «Фамилия», в котором может быть любой текст (задается символом *), который заканчивается символами «ов» (Like “*ов”). Like - ключевое слово отбора значений.
Большие возможности для отбора записей предоставляет расширенный фильтр. Для задания расширенного фильтра необходимо выбрать пункт меню «Записи»-«Фильтр»-«Расширенный фильтр» и в появившемся окне конструктора фильтра задать поля, по которым необходимо осуществлять отбор данных.
Например, для отбора водителей категории В следует задать такой фильтр (рис. 4.18):
Рисунок 4.18 – Конструктор фильтра отбора водителей категории В
Для отбора водителей категорий В или ВС следует задать такой фильтр (рис. 4.20):
Рисунок 4.20 – Конструктор фильтра отбора водителей категорий В или ВС
В этом случае установки фильтра (рис. 4.21) содержат строку:
(((ВОДИТЕЛИ.КАТЕГОРИЯ)="В")) OR (((ВОДИТЕЛИ.КАТЕГОРИЯ)="ВС"))
которая означает, что записи будут отобраны по полю «Категория» и значение полей может быть «В» либо «ВС». Ключевое слово OR означает «ИЛИ», т.е. выполняться отбор по критерию КАТЕГОРИЯ="В" или КАТЕГОРИЯ="ВС".
Рисунок 4.21 – Конструктор фильтра отбора водителей категорий В или ВС
Если отбор записей необходимо выполнять с учетом значений вычисляемого поля, либо осуществлять групповую операцию над отобранными данными, то необходимо использовать запросы. Например, для определения количества водителей, прошедших медосмотр в этом году, необходимо вначале получить их список (задав критерий отбора Year([ВОДИТЕЛИ]![ДАТА_МЕДОСМОТРА])=Year(Now()), т.е. равенство года медосмотра текущему году), а затем выполнить над выборкой групповую операцию COUNT (для этого в выборке должны быть уникальные поля (например поле «Табельный номер»)). Для этого необходимо в окне объектов БД перейти на вкладку «Запросы» и выбрать пункт «Создание запроса в режиме конструктора». После этого, в появившемся окне (рис. 4.6) выбрать таблицу «Водители» и добавить её в источники данных запроса (нажатием кнопки «Добавить»). В появившемся окне (рис. 4.22) необходимо задать критерий отбора данных, а затем и групповую операцию.
Рисунок 4.22 – Конструктор запроса отбора водителей, прошедших медосмотр в этом году
Результат выполнения запроса для исходных данных рис. 4.23 приведен на рис. 4.24.
Рисунок 4.23 – Исходные данные (таблица «Водители») для запроса отбора водителей, прошедших медосмотр в этом году
Рисунок 4.24 – Результат выполнения запроса отбора водителей, прошедших медосмотр в этом году
Аналогично, например, для определения списка марок автомобилей и количества автомобилей каждой марки соответствующий запрос будет иметь такой вид (рис. 4.25):
Рисунок 4.25 – Конструктор запроса отбора списка марок автомобилей с указанием количества автомобилей каждой марки
Результат выполнения запроса для исходных данных рис. 4.26 приведен на рис. 4.27.
Рисунок 4.26 – Исходные данные (таблица «Автомобили») для запроса отбора списка марок автомобилей с указанием количества автомобилей каждой марки
Рисунок 4.27 – Результат выполнения запроса отбора списка марок автомобилей с указанием количества автомобилей каждой марки
Для определения разности двух дат, например в запросе на получение списка рейсов длительностью более 3х часов (дней и т.д.) в вычисляемом поле следует использовать функцию
DateDiff(<интервал>, дата1, дата2),
где <интервал> - специальная строка символов, показывающая в каких единицах измерения времени необходимо выдать разность (“yyyy” – в годах, “q” – в кварталах, “m” – в месяцах, “d” – в днях, “h” – в часах, “n” – в минутах).
Рисунок 4.28 – Конструктор запроса определения длительности рейсов в часах
