
Создание запросов
Запрос используется для выбора из базы данных интересующей пользователя информации. Результат запроса называется выборкой. Под выборкой понимается динамическая таблица с записями данных, которые удовлетворяют определенным условиям запроса. Динамическая таблица формируется всякий раз заново на основе реальных таблиц базы данных, а ее содержимое удовлетворяет условиям запроса.
Основные виды запросов:
♦ запрос на выборку;
♦ запрос на изменение.
Запрос на выборку позволяет выбрать информацию на основе заданных условий отбора из одной или нескольких таблиц. К таким запросам относятся:
♦ групповые запросы;
♦ перекрестные запросы;
♦ параметрические запросы.
Групповые запросы используются тогда, когда необходимо выполнение групповых операций, например определение количества занятых номеров в гостинице для каждого типа номеров. При создании группового запроса используется строка Групповая операция в режиме конструктора запросов (строка активизируется из меню Вид - Групповая операция).
Для выполнения групповых операций в Access имеется несколько функций, которые позволяют производить вычисления на основании значений полей. Можно выполнять групповые запросы для всех записей сразу или только для группы записей в одной или нескольких таблицах.
Чтобы выполнить вычисления, необходимо для каждого поля, включенного в запрос, выбрать соответствующую функцию из раскрывающегося списка в строке Групповая операция. Все
функции делятся на четыре категории:
• группировка - эта категория состоит только из функции Группировка и используется для указания поля, которое будет применяться в качестве группирующего;
• итоговые функции - эта категория состоит из девяти функций: Sum, Avg, Min, Max, Count, StDev, Var, First, Last. Каждая из этих функций выполняет вычисления над полем;
• выражение - эта категория состоит из одной функции Выражение, предназначенной для указания на создание поля, значения которого будут вычисляться (например, в запросе можно создать поле, значения записей которого являются результатом каких-либо вычислительных действий над записями других полей, используемых в запросе);
• условие - эта категория состоит из одной функции Условие и предназначена для указания поля, записи которого выбираются на основании заданного условия отбора. При выполнении сложных вычислений и указания условия отбора в поле группировки рассматриваются только те записи, для которых выполняются эти условия.
Перекрестные запросы - это специальный вид группового запроса, представляющего собой выборку данных, записанных в виде двухмерной матрицы, где в качестве заголовков строк и столбцов используются сгруппированные значения заданных полей или выражения.
Параметрические запросы - это вид запросов, при котором выбор информации из таблиц производится на основании задания условий отбора записей (параметров). Например, при выполнении запроса о пользовании клиентом дополнительными услугами параметром будет являться регистрационный номер клиента. Вводимые параметры предварительно необходимо описать в окне, которое вызывается при выполнении пункта меню Запрос - Параметры (рис. 18).
Запрос на изменение - это запрос, который позволяет выполнять более сложные действия по сравнению с выборкой определенных групп записей. Этот запрос можно представить как запрос на выборку, который должен выполнять действия над выбранной группой записей.
Основными запросами на изменение являются:
• запросы на создание таблицы - позволяют создать новую таблицу с помощью условия отбора записей из других таблиц;
Рис18
• запросы на добавление - позволяют добавить отобранные записи из таблицы или запроса текущей базы данных в конец другой таблицы;
• запросы на обновление - позволяют изменить в таблице группу записей данных, удовлетворяющих определенным условиям;
• запросы на удаление - позволяют удалить группу записей данных, удовлетворяющую заданным условиям.
Следует отметить, что в Access есть запросы, которые не могут быть созданы в режиме конструктора запроса. Эти запросы формируются с помощью специального языка структурированных запросов SQL (Structured Query Language).
SQL-запрос представляет собой последовательность команд, выражений и вызовов функций. Существует три типа запросов SQL:
• запрос на объединение - объединяет поля (или столбцы) одной или нескольких таблиц или запросов в одно поле (или столбец) в результирующем наборе записей;
• запрос к серверу - передает SQL-инструкции непосредственно в базу данных сервера;
• управляющий запрос — создает или изменяет объекты базы данных, такие как таблицы Microsoft Access или Microsoft SQL Server.
Работа с такими запросами выходит за рамки данного пособия.
Запросы могут быть созданы как с использованием Мастера запросов, так и с помощью Конструктора запросов, окно которого приведено на рис. 19.
Рис.19
Окно конструирования разделено на две части:
• область таблиц запроса;
• бланк запроса.
Область таблиц запроса - это место, где размещаются таблицы или запросы в форме списков полей и устанавливаются связи между ними.
Бланк запроса - предназначен для определения полей и условий, которые будут использованы для извлечения результирующего набора данных.
В каждом столбце бланка содержится информация об одном поле из таблицы или запроса в верхней части окна. Выбор полей осуществляется перетаскиванием их с помощью мыши из области таблиц запроса. Добавление столбца осуществляется с помощью пункта меню Вставка - Столбцы, а удаление - с помощью пункта меню Правка - Удалить столбцы. Ввод Условий отбора и Выражений можно осуществлять, используя Построитель выражений. Запуск запроса для проверки выполнения можно проводить с помощью кнопки Запуск.
Задание 1
Создайте простой запрос, позволяющий вывести список клиентов, проживающих в гостинице, с их регистрационными номерами.
Для создания такого запроса удобно воспользоваться Мастером запросов. Мастер простых запросов позволяет только выделить поля, которые необходимо отобразить.
Порядок работы
1. Щелкните мышью вкладку Запросы.
2. Щелкните кнопку Создать. Появится диалоговое окно Новый запрос.
3. Выберите Простой запрос. Появится окно мастера создания простых запросов.
4. Выберите таблицу Регистрация клиентов в спускающемся списке Таблицы/Запросы.
5. Выберите названия полей НомерРегистрКарточки и ФИОклиента в списке Доступные поля и переместите их в список Выбранные поля. Нажмите кнопку Далее.
6. Выберите вид запроса Подробный. Нажмите кнопку Далее.
7. В поле ввода текста Задайте имя запроса введите заголовок запроса Список регистрационных номеров. Для отображения результатов запроса нажмите кнопку Готово.
Вид запроса приведен на рис. 20.
Задание 2
Создайте запрос, позволяющий определить сумму денег, на которую фирмы-поставщики поставили клиентов в гостиницу для каждого типа номеров. Для создания запроса используйте Мастер создания перекрестных запросов.
Порядок работы
1. Щелкните мышью вкладку Запросы.
2. Щелкните кнопку Создать. Появится диалоговое окно Новый запрос.
3. Выберите Перекрестный запрос. Появится окно Создание перекрестных запросов.
4. Выберите таблицу Регистрация клиентов. Нажмите кнопку Далее.
5. Выберите названия поля ФирмаПоставщик в качестве заголовка строк в окне Доступные поля и переместите его в список Выбранные поля. Нажмите кнопку Далее.
6. Выберите название поля ТипНомера в качестве заголовка столбцов. Нажмите кнопку Далее.
7. В появившемся окне определите, какие вычисления надо провести для каждой строки. В данном случае это должна быть операция суммирования по полю Стоимость для каждой из фирм-поставщиков. Для этого в окне Поля выберите поле Стоимость, а в окне Функции выберите функцию Sum. Нажмите кнопку Далее.
8. В открывшемся окне Задайте имя запроса введите имя Сведения о поставках клиентов и нажмите кнопку Готово.
Вид запроса приведен на рис. 21.
Задание 3
Создайте запрос на обновление записей в полях СтоимостьЕдУслуги и СтоимостьУслуги в таблице Регистрация дополнительных услуг. Запуск запроса должен проводиться при нажатии кнопки Регистрация в форме Регистрация дополнительных услуг.
Порядок работы
1. Щелкните мышью вкладку Запросы.
2. Щелкните кнопку Создать. Появится диалоговое окно Новый запрос.
3. Выберите Конструктор. Появится окно Добавление таблицы.
4. В окне Добавление таблицы выберите таблицы Регистрация дополнительных услуг и Стоимость дополнительных услуг, нажимая кнопку Добавить.
5. По окончании выбора нажмите кнопку Закрыть. Область таблиц запроса Конструктора запроса должна выглядеть при этом, как показано на рис. 22.
Рис.22
6. Войдите в пункт меню Запрос и выберите вид запроса Обновление.
7. В области Бланка запроса в столбцах укажите поля таблицы Регистрация дополнительных услуг, которые необходимо изменить. В первом столбце выберите поле СтоимостьЕдУслуги, а во втором столбце - поле СтоимостьУслуги.
8. В графе Обновление, используя Построитель выражений, наберите:
• для поля СтоимостьЕдУслуги:
[Стоимость дополнительных услуг]![СтоимостьЕдУслуги]
(данная запись означает, что в качестве обновленного значения берется выбранное значение из таблицы Стоимость дополнительных услуг);
• для поля СтоимостьУслуги:
[Регистрация дополнительных услуг] ! [СтоимостьЕдУслуги]* [ВремяПользованияУслугой]
(данная запись означает, что в качестве обновленного значения берется произведение записей из таблицы Регистрация дополнительных услуг).
9. При выходе из Конструктора запросов задайте имя запроса, например Услуги.
Для создания кнопки, позволяющей запускать запрос Услуги в форме Регистрация дополнительных услуг, сделайте следующее:
1. Откройте форму Регистрация дополнительных услуг в режиме Конструктора.
2. На Панели элементов выберите значок Кнопка и разместите его в Области данных формы, при этом откроется окно мастера Создание кнопок.
3. В окне Категории выберите пункт Разное, а в окне Действия - пункт Запуск запроса. Нажмите кнопку Далее.
4. В открывшемся окне в качестве запроса, выполняемого при нажатиикнопки, выберите запрос Услуги. Нажмите кнопку Далее.
5. Выберите текст для размещения на кнопке и введите название Регистрация. Нажмите кнопку Готово.
Задание 4
Создайте запрос, позволяющий получать
информацию о количестве свободных мест
в гостинице на любой заданный промежуток времени.
Данный запрос можно организовать как последовательное выполнение двух запросов. Первый запрос позволит определить количество занятых мест в заданный промежуток времени, а второй - количество свободных мест как разность между имеющимся количеством мест в гостинице (из таблицы Информация о номерах) и полученным в первом запросе количеством занятых мест.
Порядок работы
Определение занятых номеров
1. Щелкните мышью вкладку Запросы.
2. Щелкните кнопку Создать. Появится диалоговое окно Новый запрос.
3. Выберите Конструктор. Появится окно Добавление таблицы.
4. В окне Добавление таблицы выберите таблицы Регистрация клиентов и Тип номера, нажимая кнопку Добавить.
5. По окончании выбора нажмите кнопку Закрыть. Область таблиц запроса Конструктора запроса должна выглядеть при этом, как показано на рис. 23.
6. Войдите в пункт меню Вид и выберите пункт Групповые операции.
7. В области Бланка запроса в столбцах нужно указать поля таблицы Регистрация клиентов, которые необходимы для создания запроса. В первом столбце выберите поле Тип номера, во втором столбце - поле Количество мест, в третьем столбце -День приезда, в четвертом столбце - День отъезда.
8. В графе Групповые операции необходимо правильно расставить вид действий, которые будут совершаться с каждым из выбранных полей. По полю Тип номера должна проводиться Группировка по каждому из типов номеров. По полю Количество мест должно проводиться суммирование мест для каждого типа номеров. Для этого в раскрывающемся окне выберите функцию суммирования Sum. По полям ДеньПриезда и День-Отъезда должны быть проверены условия отбора, поэтому выставите вид действий Условие.
9. В графе Вывод на экран определите, пометив галочкой, поля, значения которых будут выводиться на экран. Такими полями должны быть Тип номера и Количество мест.
10. В графе Условие отбора определите условие отбора для формируемого запроса. Для того чтобы занятые номера попали в заданный промежуток времени, необходимо выполнение следующих условий:
ДеньПриезда<=[ДеньОтьезда],
ДеньОтьезда>=[ДеньПриезда],
где переменные, стоящие в квадратных скобках, определяют заданный промежуток времени. Для ввода этих значений их необходимо описать в окне, которое открывается в пункте меню Запрос - Параметры (рис. 18).
Вид сформированного запроса Занятые номера приведен на рис. 23.
Определение свободных номеров
1. Щелкните мышью вкладку Запросы.
2. Щелкните кнопку Создать. Появится диалоговое окно Новый запрос.
Рис.23
Выберите Конструктор. Появится окно Добавление таб лицы.
В окне Добавление таблицы выберите таблицу Информация о номерах и запрос Занятые номера. По окончании на жмите кнопку Закрыть. Окно конструктора запросов примет вид, показанный на рис. 24.
Создайте связи между полями Тип номера из таблицы Информация о номерах и Тип номера из запроса Занятые номера. При этом надо определить Параметры объединения. Для этого, щелкнув мышью на линии связи, выделите ее, а за тем, нажав правую клавишу мыши, откройте контекстное меню и войдите в пункт Параметры объединения. Выберите в каче стве параметра объединения пункт 2.
В области Бланка запроса в столбцах необходимо указать поля, которые нужны для создания запроса. В первом столбце выберите поле Тип номера, а во втором столбце в качестве по ля надо взять вычисляемое поле СвобНомера. Название поля и выражение разделяются двоеточием.
Рис.24
7. Для создания выражения вызовите построитель выражений (нажав на кнопку на панели инструментов с изображением волшебной палочки) и наберите следующее выражение:
СвобНомера: [КоличествоМест]-ПF([Sum-КоличествоМест]>0;[Sum-КоличествоМест];0),
где Sum-КоличествоМест - поле, содержащее данные о количестве занятых мест, сформированное в результате запроса.
Вид запроса приведен на рис. 25.
Примечание. Для построения этого выражения используйте функцию IIF, которая находится в папке Функции -Встроенные функции. Использование этой функции связано с доопределением значения Sum-КоличествоМест в случае, если по какому-либо из типов номеров номера не заполнялись, поэтому некоторые записи в поле Sum-КоличествоМест могут не иметь никакого значения.
Задание 5
Создайте запрос, позволяющий получать информацию о виде и стоимости дополнительных услуг, которыми пользовался клиент, проживая в гостинице. Поиск информации по клиенту должен проводиться по номеру регистрационной карточки.
Порядок работы
1. Щелкните мышью вкладку Запросы.
2. Щелкните кнопку Создать. Появится диалоговое окно Новый запрос.
3. Выберите Конструктор. Появится окно Добавление таблицы.
4. В окне Добавление таблицы выберите таблицу Регистрация дополнительных услуг. Нажмите кнопку Закрыть.
5. В области Бланка запроса в столбцах нужно указать поля таблицы Регистрация дополнительных услуг, которые необходимы для создания запроса. В первом столбце выберите поле ВидУслуг, во втором столбце - поле ДатаОказУслуги, в третьем - ВремяПользованияУслугой, в четвертом - Стоимость-Услуги, в пятом - НомерРегистрКарточки.
6. В графе Вывод на экран определите, пометив галочкой поля, значения которых будут выводиться на экран. Такими полями должны быть ВидУслуг, ДатаОказУслуги, ВремяПользованияУслугой, СтоимостьУслуги.
7. В графе Условие отбора определите условие отбора записей для формируемого запроса. Должны быть отобраны только те записи, у которых номер, записанный в поле НомерРегистрКарточки, совпадает с заданным, описанным в переменной [Номер регистрационной карточки]. Для ввода номера регистрационной карточки переменную [Номер регистрационной карточки] необходимо описать в окне (рис. 18), которое открывается в пункте меню Запрос - Параметры.
Вид сформированного запроса Счет приведен на рис 26.
ПРАКТИЧЕСКАЯ РАБОТА № 4
Создание отчетов
Отчеты используются для представления данных в удобном виде. Отчет можно вывести на экран или распечатать на принтере. В нем можно группировать и сортировать данные в любом порядке, получать итоговые значения, средние значения и другие статистические величины, а также помещать в него графические объекты.
Основными типами отчетов являются:
• ленточные отчеты - в них данные распечатываются в виде строк и столбцов с группировкой и итогами. Их разновидности включают отчеты с итоговым и групповым суммированием;
• отчеты в столбец - данные распечатываются в виде формы с возможным включением итогов и графиков;
• отчеты для рассылки - создаются как шаблоны писем;
• почтовые наклейки - создаются наклейки для конвертов.
Различия между формами и отчетами
Главное различие между формами и отчетами заключается в их назначении. Если формы задуманы для ввода данных, то отчеты - для просмотра данных. В формах можно использовать вычисляемые поля. В отчетах вычисляемые поля формируются на основе общей группы записей, страницы записей или всех записей отчета (итоги).
Все, что можно сделать с формой, можно сделать и с отчетом (за исключением ввода данных). Форму можно сохранить в виде отчета, а затем редактировать в окне конструктора отчетов.
Отчеты можно создавать, используя Мастер отчетов и Конструктор отчетов.
Записи в отчете обрабатываются последовательно. В зависимости от макета отчета элементы данных обрабатываются по-разному. Отчеты делятся на следующие разделы:
• заголовок отчета - печатается один раз в начале каждого отчета. Здесь же может быть размещена дата создания отчета;
• верхний колонтитул - печатается вверху каждой страницы. Обычно верхние колонтитулы служат в качестве заголовков столбцов для итоговых данных;
• заголовок группы - печатается перед обработкой первой записи группы;
• область данных - печатается каждая запись таблицы или динамического набора данных запроса;
• примечание группы - используется для отображения итоговых данных в записях текущей группы. Печатается после обработки последней записи группы;
• нижний колонтитул - обычно помещаются номера страницы и вычисляемые элементы управления. Иногда подводятся итоги по страницам и по группам. Печатается внизу каждой страницы;
• примечание отчета - печатается один раз в конце отчета после всех записей данных и примечаний групп. Обычно в примечании отчета отображается общий итог и другие статистические данные.
Вид Конструктора отчетов приведен на рис. 27.
Задание 1
Создать бланк счета об оплате дополнительных услуг, которыми пользовался клиент, проживая в гостинице.
Порядок работы
1. Щелкните мышью вкладку Отчеты.
2. Щелкните кнопку Создать. Появится диалоговое окно Новый отчет.
3. Выберите Мастер отчетов. А в окне Выбор таблицы или
запроса выберите в качестве данных для создания отчета запрос Счет. Нажмите кнопку Далее.
4. В открывшемся окне Создание отчетов в качестве полей для отчета выберите все поля из списка. Нажмите кнопку Далее.
5. В открывшемся окне на вопрос о добавлении уровней группировки ответьте «нет». Нажмите кнопку Далее.
6. В следующем открывшемся окне определите порядок сортировки записей (например, по дате оказания услуги). Нажмите кнопку Итоги. В открывшемся окне Итоги определите итоговые значения, которые необходимо вычислить. Для этого поставьте галочку для вычисления Sum по полю СтоимостьУслуги. Нажмите кнопку ОК для возвращения в окно Создание отчетов. Нажмите кнопку Далее.
В открывшемся окне определите вид макета для отчета (например, ступенчатый). Нажмите кнопку Далее.
Выберите стиль оформления отчета (например, строгий). Нажмите кнопку Далее.
В качестве имени отчета введите имя Счет. Нажмите кнопку Готово.
Вид созданного отчета приведен на рис. 28.
Рис.27
Задание 2
Создать отчет о клиентах, въехавших за день в гостиницу, и выручке, полученной от них.
Примечание. Для создания такого отчета надо предварительно создать запрос на выборку.
В запросе в качестве условия отбора в поле ДеньПриезда указать день, по которому необходимо получить сведения. Создайте такой запрос самостоятельно, дав ему имя Сведения о заезде, а в качестве выводимых полей возьмите: ФИОклиен-та, НомерПутевки, ФирмаПоставщик, СтоимостьПутевки.
Порядок работы
Щелкните мышью вкладку Отчеты.
Щелкните кнопку Создать. Появится диалоговое окно Но вый отчет.
Выберите Конструктор. В окне Выбор таблицы или за проса выберите в качестве данных для создания отчета запрос Сведения о заезде. Нажмите кнопку Далее.
В открывшемся окне Конструктора разместите в области данных поля данных, используемые в запросе (подобно тому, как это делалось в Конструкторе форм), а заголовки полей - в области Верхний колонтитул, в линию.
В области Заголовка отчета создайте заголовок Сведения о заезде и, используя Панель элементов, поле для ввода даты, для которой составляется отчет.
6. Выделите поле для ввода даты, с помощью правой клавиши мыши войдите в пункт меню Свойства и в графе Данные, используя Построитель выражений, наберите имя переменной [День приезда].
7. В области Примечание отчета создайте пустое поле, куда, как и в предыдущем пункте, используя Построитель выражений, введите формулу для вычисления суммы по полю СтоимостьПутевки. В графе пункта меню Свойства - Формат поля задайте формат поля как Денежный.
8. В области Примечание отчета создайте поле для ввода даты составления отчета. Для ввода даты используйте встроенную функцию возвращения системной даты Now().
9. Для отделения заголовков полей и итоговых значений можно воспользоваться Мастером линий из Панели элементов.
Общий вид отчета в Конструкторе отчетов представлен на рис. 29, а вид отчета - на рис. 30.
ПРАКТИЧЕСКАЯ РАБОТА № 5