Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Inform2005

.pdf
Скачиваний:
73
Добавлен:
08.02.2015
Размер:
4.37 Mб
Скачать

161

Указания

Создаваемая форма не предназначена для заполнения таблицы «Товары» (для этого имеется специальная форма «Товары» — см. упражнение A5–4). Тем не менее, в целях повышения наглядности, желательно, чтобы вместе с номером купленного товара в подчиненной форме отображались и его характеристики, взятые из таблицы «Товары» («Наименование», «Фирма», «Цена»), без возможности их корректировки. Для этого подчиненную форму необходимо создать не на основе обычной таблицы «Продажи», а на основе вспомогательного запроса, объединяющего данные из связанных таблиц «Продажи» и «Товары».

5.8. ФОРМИРОВАНИЕ ЗАПРОСА НА ОСНОВЕ ДВУХ ТАБЛИЦ: создайте новый за-

прос, включив в него таблицы «Продажи» и «Товары» (см. 3.1); при этом в окне конструктора запросов будут отображены не только окна таблиц, но и связи между ними. Поместите на бланк запроса все поля таблицы «Продажи» и следующие поля таблицы «Товары»: «Наим», «Фирма», «Цена» (см. 3.2). Установите сортировку поля «Ном» из таблицы «Продажи» по возрастанию (см. 3.3) и сохраните запрос под именем Продажи и товары (см. 1.5).

X Выполните созданный запрос и измените значение поля «НомТов» в первой строке результирующей таблицы на «4». Убедитесь, что это изменение автоматически приводит к изменению полей, связанных с описанием проданного товара.

Создайте на основе запроса «Продажи и товары» ленточную автоформу (см. 2.2); эта форма будет играть роль подчиненной формы. Откорректируйте форму следующим образом:

удалите поле «НомКли» (отображать это поле нет необходимости, поскольку данные о клиенте будут выводиться в основной форме, по отношению к которой создаваемая форма будет подчиненной);

не меняя внешнего вида, отключите возможность редактирования полей «Наим», «Фирма» и «Цена» (см. прием 2.10 и примечание к нему), так как эти поля будут использоваться только как информационные.

Созданную форму сохраните под именем Продажи (см. 1.5).

Для того чтобы сделать ввод данных в поле «НомТов» формы «Продажи» более удобным, выполните следующие действия.

5.9. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ, СВЯЗАННЫЕ С ВЫПАДАЮЩИМИ

СПИСКАМИ: преобразуйте поле «НомТов» в выпадающий список (см. 2.7) и определите его следующие свойства (ср. с 2.9):

Вкладка

Свойство

Значение

Данные

Тип источника строк

Таблица/запрос

Данные

Источник строк

Товары

Данные

Ограничиться списком

Да

Макет

Число столбцов

4

Макет

Заглавия столбцов

Да

Макет

Ширина столбцов

0,5;2;2;1

162

Часть III. Работа с базами данных: Microsoft Access

Благодаря сделанным настройкам, в поле «НомТов» можно вводить только номера, имеющиеся в таблице «Товары» (так как свойство «Ограничиться списком» имеет значение «Да»). При разворачивании списка в нем отображаются не только номера товаров, но и их характеристики, взятые из таблицы «Товары» (выпадающий список состоит из 4 столбцов, причем столбцы списка снабжаются названиями полей: «Ном», «Наим», «Фирма» и «Цена»). Ширина каждого столбца в выпадающем списке определяется в свойстве «Ширина столбцов» (соответственно 0,5 см, 2 см, 2 см, 1 см). Для отображения последнего столбца в выпадающем списке используйте полосу прокрутки в нижней части списка.

В качестве заготовки для основной формы можно использовать ранее созданную форму «Клиенты (комбинированная форма)» (см. упражнение A2–3). Создайте ее копию под именем Клиенты и продажи (копии форм создаются так же, как и копии отчетов — см. 5.3), измените ее режим отображения на «Простая форма» (см. 2.21) и включите в нее подчиненную форму «Продажи» (либо перетаскиванием — см. 5.2, либо с использованием панели элементов — см. 5.6).

l Форму «Клиенты и продажи» можно сделать еще более наглядной, если внести следующие изменения в подчиненную форму «Продажи»: удалите из нее столбец «Наименование», замените заголовок «Номер товара» на «Наименование» и в свойстве «Ширина столбцов» выпадающего списка «НомТов» замените первое число на 0: 0;2;2;1 (теперь первый столбец выпадающего списка имеет нулевую ширину, и, поскольку он не отображается, в поле выпадающего списка выводится значение из второго столбца, то есть наименование товара).

Подчеркнем, что это исправление никак не скажется на результирующих таблицах базы данных: в поле «НомТов» таблицы «Продажи» по-прежнему будет заноситься значение из (невидимого) первого столбца выпадающего списка.

A5–6. В существующей базе данных «Магазин» разработать на основе связанных таблиц «Клиенты», «Товары» и «Продажи» (см. упражнение A5–4) составной отчет «Клиенты и продажи» по образцу.

163

. . . . . . . . . . . . .

Указания

В качестве источника данных для подчиненного отчета используйте запрос «Продажи и товары» (см. 5.8).

Для того чтобы в основном отчете данные из подчиненного отчета обрамлялись рамкой, вызовите окно свойств элемента «Подчиненный отчет» (см. 2.8) и на вкладке «Макет» в свойстве «Тип границы» выберите вариант «Сплошная».

6.Запросы на основе связанных таблиц. Группировка и перекрестные запросы. Запросы с параметрами

Если в упражнении имя запроса не указано, то следует использовать составное имя, включающее название упражнения и порядковый номер запроса, например: A6-1-2 — запрос номер 2 из упражнения A6–1.

A6–1. В существующей базе данных «Видео» (см. упражнения A1–1, A5–1) с помощью соответствующих запросов вывести следующие данные:

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

164

Часть III. Работа с базами данных: Microsoft Access

2)список всех стран-производителей (с указанием количества фильмов, произведенных в каждой стране), отсортированный по убыванию количества фильмов;

3)общее число имеющихся кассет и их суммарную длительность;

4)список всех фильмов, отсортированный по дате записи, с указанием данных о кассетах, содержащих эти фильмы. Запрос должен содержать поля «Назв», «ДатаЗап» таблицы «Фильмы» и «Фирма», «Длит» таблицы «Кассеты»;

5)список всех кассет, содержащий поля «Фирма» и «Длит» таблицы «Кассеты», отсортированный по номерам кассет, с указанием количества фильмов, записанных на каждой кассете, и суммарной длительности этих фильмов;

6)таблицу, столбцы которой соответствуют различным странам (поле «Страна» таблицы «Фильмы»), строки — различным кассетам (поля «Ном», «Фирма» и «Длит» таблицы «Кассеты»), а на пересечении строк и столбцов указывается количество фильмов данной страны, записанных на данную кассету;

7)таблицу, столбцы которой соответствуют различным жанрам, строки

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

Решение

Откройте базу данных «Видео» (см. 2.1).

Запрос A6-1-1

Создайте новый запрос, включив в него таблицу «Фильмы» (см. 3.1); поместите на бланк запроса поля «Жанр», «Ном» и «Длит» (см. 3.2), установите сортировку поля «Длит» по убыванию (см. 3.3).

6.1. ГРУППИРОВКА ЗАПИСЕЙ В ЗАПРОСЕ: «Вид | Групповые операции» или

; в результате в бланке запроса появится новая строка «Групповая операция» и для всех полей в данной строке будет установлен вариант Группировка. Используя выпадающий список в строке «Групповая операция», замените в поле «Ном» вариант Группировка на Count, а в поле «Длит» — на Sum.

lСмысл данных настроек следующий: так как для поля «Жанр» установлена группировка, то при выполнении запроса все записи с одинаковым полем «Жанр» будут «сгруппированы» в результирующей таблице в одну строку. Значение Count, указанное в поле «Ном», означает, что в данном поле будет подсчитываться количество записей каждого жанра; значение Sum, указанное в поле «Длит», означает, что в данном поле будет вычисляться суммарная длительность всех записей для каждого жанра.

lЕсли в создаваемом запросе группировка не требуется, то необходимо скрыть строку «Группировка», повторно выполнив команду «Вид | Групповые операции»

165

или отжав кнопку .

При выполнении созданного запроса (см. 3.4) заголовки второго и третьего столбца примут вид «Count_Ном» и «Sum_Длит» (они получаются путем присоединения к имени поля названия групповой операции). Для того чтобы заголовки полей запроса имели более привычный вид, надо настроить свойства этих полей.

6.2. НАСТРОЙКА СВОЙСТВ ПОЛЕЙ С РЕЗУЛЬТАТАМИ ГРУППИРОВКИ:

вернитесь в режим конструктора и перейдите на поле «Ном» в бланке запроса;

«Вид | Свойства» или ;

в появившемся окне «Свойства поля» на вкладке «Общие» определите свойство «Подпись» следующим образом: Кол-во фильмов;

не закрывая окна свойств, щелкните мышью на поле «Длит» в бланке запроса; в результате в окне свойств отобразятся свойства данного поля. Введите в свойство «Подпись» текст Сумм. длит.;

закройте окно свойств, нажав кнопку .

Выполните запрос и сохраните его под именем A6-1-1 (см. 1.5).

Запрос A6-1-2

Очистите бланк запроса (см. 3.13), поместите на него поля «Страна» и «Ном», установите сортировку поля «Ном» по убыванию.

Измените значение строки Группировка в поле «Ном» на Count. С помощью окна свойств определите значение свойства «Подпись» для поля «Ном»:

Кол-во фильмов (см. 6.2).

Выполните запрос и сохраните его под новым именем A6-1-2 (см. 3.5).

Запрос A6-1-3

Очистите бланк запроса.

6.3. УДАЛЕНИЕ ТАБЛИЦЫ ИЗ ЗАПРОСА: щелкните мышью на окне таблицы «Фильмы» в верхней части окна конструктора; «Запрос | Удалить таблицу».

Добавьте в запрос новую таблицу «Кассеты» (см. второе примечание к 3.1), поместите на бланк запроса ее поля «Ном» и «Длит».

Установите в строке «Групповая операция» для поля «Ном» вариант Count, а для поля «Длит» — вариант Sum. С помощью окна свойств определите свойство «Подпись» для полей запроса: «Ном» — Кол-во кассет, «Длит» — Сумм. длит.

(см. 6.2).

Выполните созданный запрос и сохраните его под новым именем A6-1-3.

l Поскольку в данном запросе ни по одному полю не проводится группировка, в результате будет получена таблица, состоящая из одной строки.

Запрос A6-1-4

Очистите бланк запроса.

166

Часть III. Работа с базами данных: Microsoft Access

В дополнение к имеющейся таблице «Кассеты» включите в запрос таблицу «Фильмы» (см. второе примечание к 3.1); при этом в окне конструктора запроса будут показаны не только окна таблиц, но и связи между ними.

Скройте строку «Групповая операция» на бланке запроса (см. второе примечание к 6.1).

Последовательно поместите на бланк запроса поля «Назв» и «ДатаЗап» из таблицы «Фильмы» и поля «Фирма» и «Длит» из таблицы «Кассеты»; установите сортировку поля «ДатаЗап» по возрастанию.

Выполните созданный запрос и сохраните его под новым именем A6-1-4.

l Благодаря имеющейся связи между таблицами «Фильмы» и «Кассеты», рядом с данными о каждом фильме будут указаны данные о той кассете, номер которой содержится в поле «НомКас» для этого фильма.

Запрос A6-1-5

Очистите бланк запроса.

Отобразите строку «Групповая операция» на бланке запроса (см. 6.1). Последовательно поместите на бланк запроса поля «Ном», «Фирма» и «Длит»

из таблицы «Кассеты» и поля «Ном» и «Длит» из таблицы «Фильмы»; установите сортировку поля «Ном» из таблицы «Кассеты» по возрастанию.

Установите следующие значения в строке «Групповая операция»:

поля «Ном», «Фирма», «Длит» из таблицы «Кассеты»: Группировка;

поле «Ном» из таблицы «Фильмы»: Count;

поле «Длит» из таблицы «Фильмы»: Sum.

С помощью окна свойств определите свойство «Подпись» для полей из таб-

лицы «Фильмы»: «Ном» — Кол-во фильмов, «Длит» — Сумм. длит. (см. 6.2).

Снимите флажок видимости с поля «Ном» (см. 3.11).

l Поле «Ном» таблицы «Кассеты» должно присутствовать в запросе по двум причинам: во-первых, по нему проводится сортировка, во-вторых, по нему проводится группировка. Если удалить из запроса это поле, то при выполнении запроса будут

объединены данные по однотипным кассетам (например, кассете типа «Sony–180»

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

Выполните созданный запрос и сохраните его под новым именем A6-1-5.

Запрос A6-1-6

Очистите бланк запроса.

6.4. ИЗМЕНЕНИЕ ТИПА ЗАПРОСА НА «ПЕРЕКРЕСТНЫЙ ЗАПРОС»: «Запрос | Пере-

крестный» или разверните выпадающий список кнопок и выберите вариант

(«Перекрестный»). В результате в бланке запроса появится новая строка «Перекрестная таблица»; кроме того, будет заблокирована возможность отключения строки «Групповая операция».

167

l Для возврата к стандартному типу запроса «Выборка» следует выполнить коман-

ду «Запрос | Выборка» или выбрать вариант («Выборка») в списке кнопок.

Поместите на бланк запроса поля «Ном», «Фирма» и «Длит» из таблицы «Кассеты» и поля «Ном» и «Страна» из таблицы «Фильмы».

6.5. НАСТРОЙКА ЭЛЕМЕНТОВ ПЕРЕКРЕСТНОГО ЗАПРОСА: установите следующие

значения в строке «Перекрестная таблица»:

поля «Ном», «Фирма», «Длит» из таблицы «Кассеты»: Заголовки строк;

поле «Страна» из таблицы «Фильмы»: Заголовки столбцов;

поле «Ном» из таблицы «Фильмы»: Значение.

l При создании перекрестного (табличного) запроса требуется указать одно или несколько полей для строк результирующей таблицы, одно поле для ее столбцов и одно поле для ее значений (находящихся на пересечении строк и столбцов результирующей таблицы).

В поле «Ном» таблицы «Фильмы» установите в строке «Групповая операция» вариант Count, для остальных полей оставьте прежнее значение: Группировка.

Выполните созданный запрос и сохраните его под новым именем A6-1-6.

l В Access 2000/XP возможна ситуация, когда при выполнении запроса вместо названий стран в заголовках столбцов будет указан одинаковый текст «Кол-во фильмов». В этом случае вернитесь в режим конструктора, вызовите окно свойств поля «Ном», удалите текст «Кол-во фильмов» из свойства «Подпись», после чего сохраните запрос и закройте его. После повторного открытия запроса в заголовках столбцов появятся названия стран.

Запрос A6-1-7

Разработайте самостоятельно по аналогии с запросом A6-1-6.

A6–2. В существующей базе данных «Спорт» (см. упражнение A1–2) с помощью соответствующих запросов вывести следующие данные:

1)список всех стран с указанием среднего количества баллов, набранных спортсменами каждой страны на каждом снаряде. Список отсортировать в порядке убывания среднего количества баллов за упражнение на перекладине;

2)список всех стран с указанием количества спортсменов для каждой страны, отсортированный в порядке убывания количества спортсменов.

Указания к запросу A6-2-1

После включения режима группировки (см. 6.1) в поле «Страна» оставьте значение строки «Групповая операция» прежним (то есть равным Группировка), а в остальных полях («Перекл», «Кольца» и «Конь») измените значение строки «Групповая операция» на Avg (так обозначается вычисление среднего значения).

168

Часть III. Работа с базами данных: Microsoft Access

При выполнении

запроса некоторые средние значения будут выводиться

с большим числом знаков после запятой. Для того чтобы ограничиться выводом трех знаков после запятой, установите для полей «Перекл», «Кольца» и «Конь» свойство «Формат» равным 0,000 (см. 3.15 и 6.2).

A6–3. В существующей базе данных «Магазин» (см. упражнения A1–3, A5–4) с помощью соответствующих запросов вывести следующие данные:

1)количество клиентов, имеющих и не имеющих скидку;

2)таблицу со столбцами «АТС» и «Кол-во клиентов», содержащую список АТС и количество клиентов, имеющих телефонные номера от этих ATC (номер АТС определяется по первым двум цифрам телефонного номера);

3)таблицу со столбцами «Месяц» и «Кол-во клиентов», позволяющую определить количество клиентов, родившихся в каждом месяце;

4)список проданных товаров с указанием их наименования, фирмы, цены, фамилии покупателя, информации о наличии у него скидки и размера его оплаты за покупку (клиент без скидки оплачивает всю стоимость, клиент со скидкой оплачивает 90% стоимости). Отсортировать список по наименованиям товаров, а для одинаковых наименований — по названиям фирм;

5)список всех клиентов с указанием их фамилии, информации о наличии скидки, количества купленных товаров, суммарной стоимости покупок и суммарного размера оплаты (клиент без скидки оплачивает всю стоимость, клиент со скидкой оплачивает 90% стоимости). Отсортировать список по фамилиям клиентов;

6)список всех фирм-производителей с указанием количества проданных изделий каждой фирмы и их суммарной стоимости. Отсортировать список по названиям фирм;

7)таблицу, столбцы которой соответствуют различным видам товаров (поле «Наим» таблицы «Товары»), строки — различным клиентам (поле «ФИО» таблицы «Клиенты»), а на пересечении строк и столбцов указывается количество товаров данного вида, приобретенных данным клиентом;

8)таблицу, столбцы которой соответствуют различным фирмампроизводителям (поле «Фирма»), строки — различным видам товаров (поле «Наим»), а на пересечении строк и столбцов указывается цена товара данного вида, произведенного данной фирмой.

Указания

Запрос A6-3-1

Разработайте данный запрос на основе таблицы «Клиенты», выполнив группировку по полю «Скидка» и применив к полю «Ном» группирующую операцию

169

Count (см. 6.1). Заголовок поля «Ном» измените на следующий: Кол-во клиентов

(см. 6.2).

Запрос A6-3-2

Данный запрос создайте на основе таблицы «Клиенты».

6.6. ИЗВЛЕЧЕНИЕ ПОДСТРОК ИЗ ТЕКСТОВЫХ ПОЛЕЙ: в первый столбец бланка

запроса поместите вычисляемое поле (см. 3.14), определив его в строке «Поле» следующим образом: АТС: Left([Тел];2). Данное выражение означает, что вычисляемое поле имеет имя «АТС» и содержит два первых символа поля «Тел» (эти символы определяют номер АТС).

l Функция Left(S;N) возвращает N первых (то есть левых) символов строки S. Имеется также функция Right(S;N), возвращающая N последних (то есть правых) символов строки S, и функция Mid(S;K;N), возвращающая N символов строки S, начиная с символа номер K.

6.7. ОТБОР НЕПУСТЫХ ДАННЫХ: в строку «Условие отбора» поля «АТС» введите условие is Not Null (благодаря этому условию, в итоговой таблице не будут учитываться клиенты, не имеющие телефона, — ср. с реализацией запроса A3-7-3).

Используйте режим группировки (см. 6.1), установив для поля «Ном» группирующую операцию Count.

Запрос A6-3-3

Разработайте данный запрос на основе таблицы «Клиенты», используя группировку по вычисляемому полю «Месяц» (см. 3.14), содержащему номер месяца из даты рождения клиента. Поле «Месяц» можно определить следующим образом:

Месяц: Month([ДатаР]).

Запросы A6-3-4 – A6-3-5

Запросы создайте на основе связанных таблиц «Клиенты», «Товары» и «Продажи».

6.8. ИСПОЛЬЗОВАНИЕ УСЛОВНОЙ ФУНКЦИИ IIF: последнее поле этих запросов,

связанное с оплатой покупок (со скидкой или без скидки), является вычисляемым (см. 3.14); оно должно быть определено в строке «Поле» следующим образом:

Оплата: iif([Скидка];[Цена]*0,9;[Цена]).

lПри определении поля «Оплата» была использована функция iif с тремя аргументами: первый аргумент представляет собой логическое выражение (принимающее значение «Да» или «Нет»); если это выражение имеет значение «Да» (в нашем случае

— если клиент имеет скидку), то функция возвращает значение своего второго аргумента (в нашем случае — цену товара, умноженную на 0,9); если же логическое выражение имеет значение «Нет», то функция возвращает значение своего третьего аргумента (в нашем случае — полную цену товара).

lОбъединение данных о товарах и купивших их клиентах обеспечивается, благодаря имеющейся связи между таблицами «Клиенты» и «Товары» (посредством вспомогательной таблицы «Продажи»).

170

Часть III. Работа с базами данных: Microsoft Access

Запросы A6-3-7 – A6-3-8

Используйте режим перекрестного запроса (см. 6.4–6.5).

A6–4. В существующей базе данных «Видео» (см. упражнения A1–1, A5–1) разработать запрос «Отбор по жанрам», в котором запрашивается жанр фильма, после чего выводится список названий фильмов этого жанра (поле «Назв» таблицы «Фильмы») с указанием кассет, на которых эти фильмы записаны (поля «Фирма» и «Длит» таблицы «Кассеты»). Список сортируется по названиям фильмов.

Решение

Откройте базу данных «Видео» (см. 2.1).

Создайте новый запрос, включив в него связанные таблицы «Фильмы» и «Кассеты» (см. 3.1); поместите на бланк запроса поле «Назв» из таблицы «Фильмы» и поля «Фирма» и «Длит» из таблицы «Кассеты» (см. 3.2). Установите сортировку поля «Назв» по возрастанию (см. 3.3).

6.9. ОПРЕДЕЛЕНИЕ ПАРАМЕТРА ЗАПРОСА: поместите на бланк запроса поле «Жанр» из таблицы «Фильмы», снимите в этом поле флажок видимости (см. 3.11) и введите следующий текст в строку «Условие отбора»: =[Жанр фильма:].

Теперь при выполнении запроса вначале возникает диалоговое окно «Введите значение параметра», в котором запрашивается жанр фильма (название жанра требуется набрать в поле ввода, после чего нажать [OK]). После указания жанра формируется таблица, содержащая все фильмы этого жанра.

Сохраните запрос под именем Отбор по жанрам (см. 1.5).

l Обратите внимание на то, что параметр указывается в условии отбора в квадратных скобках (как и поля таблицы). Если текст в квадратных скобках совпадает с именем некоторого поля, то на его место подставляется значение этого поля; в противном случае (когда полей с таким именем нет) текст считается параметром запроса, и для определения его значения используется диалоговое окно, появляющееся в начале выполнения запроса.

A6–5. В существующей базе данных «Спорт» (см. упражнение A1–2) разработать запрос «Отбор по баллам», в котором запрашивается количество баллов, после чего выводится список спортсменов, имеющих в упражнении на перекладине указанное или большее количество баллов (выводятся поля «Фам», «Страна», «Перекл»). Список сортируется по полю «Фам».

Указание

Используйте параметр [Количество баллов:] (см. 6.9) в условии отбора для поля «Перекл».

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]