Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД ACCESS (3).doc
Скачиваний:
3
Добавлен:
06.12.2018
Размер:
1.28 Mб
Скачать

3.5. Запросы и отчеты

Рассмотрим создание запросов на выборку с помощью Access. Общие сведения о запросах были приведены в разделе «2.3. Работа с СУБД. Запросы». Запросы на выборку далее будем называть просто «запросами».

Напомним, что запрос – это указание (инструкция) пользователя относительно отбора данных из связанных таблиц (раздел 3.1). Результат выполнения запроса мы называем таблицей-результатом. Далее будет рассмотрено создание запросов путем работы с диалоговыми окнами. В этом случае запрос создается в два этапа. На первом этапе задаются связи между таблицами. При этом о создании запроса не говорят, хотя фактически это уже создание части инструкции на языке SQL – общей для всех запросов ее части (раздел 2.3). Следующий этап при работе с окнами (этап конкретизации запроса) и называется обычно «созданием запроса». Будем придерживаться этой, общепринятой, терминологии. Итак, рассмотрим второй этап – «создание запроса».

В запросе указывается:

Какие поля из связанных таблиц нужно включить в таблицу-результат.

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

Еще раз напомним, каким образом при выполнении запроса «сработает» наличие связи между таблицами: задание связи устанавливает соответствие между записями нескольких таблиц, в таблицу-результат будут заноситься данные, взятые из соотвествующих записей.

Начало работы. Создание простых запросов

Приведем общую схему работы. Подробности можно найти в упражнениях 4 и 5.

1. В окне БД (рисунок 9) выбрать объект «Запросы».

2. Задать параметры объединения для таблиц, из которых будут отбираться данные (см. ниже).

3. Открыть окно «Конструктора». По умолчанию будет создаваться запрос на выборку. Поверх окна «Конструктора» расположится окно «Добавление таблицы», поэтому сначала идет работа с этим окном.

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

5. Нижняя часть окна Конструктора называется бланком запроса. Нужно заполнить бланк запроса, введя в него с помощью кнопок  имена таблиц и имена отобранных из них полей (рисунок 15). Если этим ограничиться (закрыть окно «Конструктора», сохранив запрос), то будет создан «простой запрос». Он же получится, если создавать запрос с помощью «Мастера».

Занесение имен полей в бланк запроса (второй способ): буксировать имена из схемы данных в верхней части окна.

6. Выполнение запроса (получение таблицы-результата) – щелкнуть кнопку «Запуск» в окне Конструктора. Результат выполнения запроса сохраняется, пока не закрыт Access. Сам запрос сохраняется в файле БД, как и другие объекты БД (раздел 3.1).

Имя запроса появляется в окне БД. После этого для просмотра таблицы-результата можно сделать двойной щелчок на этом имени.

Задание «параметров объединения»

Задание этого параметра могло быть произведено раньше, при задании связей. Но мы будем проводить его при создании запроса – как операцию редактирования связи между таблицами (раздел «3.4. Создание связей между таблицами»). Итак: вызвать окно «Схема данных», указать поле связи в подчиненной таблице, щелчком правой кнопки на линии связи (на тонкой ее части) вызвать окно «Изменение связей» (или сразу панель «Параметры объединения»), кнопка «Объединение…», включить верхний или средний переключатель (рисунок 14).

Рассмотрим смысл этого параметра на примере. Пусть создан запрос на выборку ФИО жителей мужского пола, их адресов и номеров их машин. То есть пункт 4 общей схемы работы выполнен, как показано на рисунке 15. Если на панели «Параметры объединения» был включен средний переключатель, то таблица-результат будет содержать кроме прочих и те данные из главной таблицы, для которых не нашлось соответствующих данных в подчиненной таблице:

ФИО

адрес

номер

Авазов Петр Иванович

Микуцкого 4-541

КЯ 56-67

Аралов Егор Кузьмич

Вейнбаума 8-67

Астахов Иван Сомович

Мира 4-98

КЯ 83-21

…………..

………………

…………

Рис. 13

В результате в таблице есть пустые ячейки.

Если включить верхний переключатель, то строк с такими данными в таблице-результате не будет.

Р Рис. 14

Рис. 15

При защите упражнений 5 – 9 нужно будет ответить, в частности, на

КОНТРОЛЬНЫЕ ВОПРОСЫ

к этим упражнениям. Они приведены в конце практикума.

УПРАЖНЕНИЕ 5: создание простого запроса с помощью «Конструктора»

В упражнениях 5 и 6 на основе созданной БД «Граждане» проведем исследование на тему: какие марки автомашин предпочитают люди того или иного возраста?

В этом упражнении получим таблицу-результат, составленную из столбцов «марка» таблицы «Машины» и «возраст» таблицы «Жители». Столбец «марка» сделаем первым.

1. Открыть БД «Граждане». В окне БД выбрать «Запросы», щелкнуть кнопку «Конструктор» (если запросы еще не создавались). Если в окне БД уже есть имена запросов, то дважды щелкнуть «Создание запроса в режиме Конструктора» или использовать кнопку «Создать». В появившемся окне «Добавление таблицы» выбрать («добавить») таблицы «Жители» и «Машины».

2. Заполнить бланк запроса: щелкнуть в первом верхнем поле бланка, в меню кнопки  выбрать «Машины.марка», в соседнем верхнем поле выбрать «Жители.возраст».

3. Сохранение запроса: при попытке закрыть окно «Конструктора» система предложит дать запросу имя. Дайте ему имя «марка-возраст». Вариант сохранения: Файл, Сохранить как… .

4. Просмотр таблицы-результата: в окне «Конструктора» щелкнуть кнопку «Запуск». Если открыто окно БД, то дважды щелкнуть имя запроса или щелкнуть кнопку «Открыть».

УПРАЖНЕНИЕ 6: редактирование запроса; групповые операции;

сортировка записей

На основе созданного выше запроса, получим другой запрос, внеся изменения в бланк запроса.

Постановка задачи: для каждой марки машин в отдельности выяснить, каков средний возраст владельцев.

Итак, таблица-результат будет содержать два поля: марки автомашин и соответствующий каждой марке средний возраст владельцев. Ход работы:

1. Открыть запрос «марка-возраст» в режиме «Конструктора».

2. Щелкнуть кнопку «Групповые операции» . Σ . . В бланке запроса, в столбце «возраст», щелкнуть поле «Групповая операция»; в меню кнопки  выбрать «Avg» (от Average, то есть «средний»).

Если строка «Групповые операции» в бланке отсутствует, ее можно вывести с помощью опции Вид главного меню.

3. Сохраните запрос под именем «марка-средний возраст»: Файл, Сохранить как… .

5. Откройте таблицу-результат (пункт 4 предыдущего упражнения).

6. Дополните запрос указанием о сортировке в таблице-результате. А именно, ее строки должны располагаться в порядке возрастания данных в столбце «возраст». Итак: перейдите в режим «Конструктора», в столбце «возраст» щелкните в поле «Сортировка», выберите в меню кнопки  «по возрастанию». Просмотрите таблицу-результат.

Замечание о сортировке: можно сортировать записи, работая с самой таблицей-результа­том (опция «Записи» главного меню и так далее).

Создание запросов, содержащих условия на значения полей (условия отбора строк)

В предыдущем разделе разбиралось создание так называемых простых запросов. Рассмотрим создание с помощью «Конструктора» запросов более общего вида. Ход работы включает следующие этапы:

1. Первый этап тот же, что и описанный выше в разделе «Начало работы». А именно: отбираются таблицы, затем из таблиц отбираются поля, которые должны войти в таблицу-результат. (Имена полей можно заносить в бланк буксировкой из макетов таблиц.)

2. Если нужно, задается групповая операция (пример приведен в упражнении 6).

3. Задаются условия отбора данных (условия на значения полей).

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

Для записи условий отбора используются некоторые понятия и конструкции логики. Высказыванием в логике называют любой текст, относительно которого можно утверждать, что он истинен или ложен. Другими словами, высказывание может иметь одно из двух значений: «истина» или «ложь». Частный вид высказывания – отношение, то есть равенство или неравенство. Простейшие условия на значения полей записываются в виде отношений.

Примеры отношений:

а) [марка]= «ауди» ; б) [пробег]>10000 ; в) [марка]<>«вольво»

Оператор <> означает «не равно». В таблицу-результат будут отобраны данные, для которых заданное отношение принимает значение «истина».

Занесение отношений в бланк «Конструктора» (рисунок 15): для занесения отношения (а) достаточно в столбце «марка» занести в поле «Условие отбора» данное «ауди» (можно без кавычек, они появятся автоматически). Отношения (б) и (в) заносятся в виде >10000 и <>«вольво» в столбцы «пробег» и «марка»..

Более сложные условия отбора записываются в виде логических выражений, то есть выражений составленных из отношений с помощью логических операторов ИЛИ, И, НЕ и других. В Access 2000 первые три оператора записываются на английском как Оr, And, Not. Логическое выражение также является высказыванием, то есть может принимать два значения: ИСТИНА или ЛОЖЬ.

Условия, касающиеся значений только одного поля

Примеры:

А) [марка]= «ауди» Оr [марка]=«вольво»

Разберемся, какие данные будут отобраны. Для некоторых данных из таблицы «Машины» истинно первое отношение, для некоторых второе, для остальных ложны оба. Все выражение «целиком» истинно, когда истинно хотя бы одно из двух отношений, соединенных оператором Оr. Поэтому будут отобраны данные по маркам и «ауди», и «вольво».

Занесение в бланк: первое отношение заносится в поле «Условие отбора», второе – в поле «или», расположенное ниже. Оператор Or при таком способе явным образом не заносится.

Б) [пробег]>10000 And [пробег]<30000

Выражение с оператором And истинно, если истинны оба выражения, которые этот оператор «соединяет». Поэтому с помощью условия (Б) будут отобраны записи таблицы «Машины», в которых поле «пробег» принимает значение из интервала (10000;30000).

Занесение в бланк, два варианта:

а) С помощью окна «Построитель выражений»: в бланке в столбце «пробег» щелкнуть поле «Условие отбора»; вызвать окно «Построитель выражений» кнопкой «Построить» ; с помощью кнопок окна набрать инструкцию-условие, ОК. Условие можно набирать в сокращенном виде: >10000 And <30000.

б) В столбце «пробег» занести в поле «Условие отбора» выражение

>10000 And <30000.

Условия, касающиеся значений двух и более полей

Итак, разберем случай, когда входящие в логическое выражение отношения записываются для разных полей.

! При выполнении операций, описанных в примерах ниже, и при выполнении упражнений, удалите связь между таблицами «Жители» и «Машины» по полю «место работы». То есть либо удалите ее на время выполнения запроса клавишей Delete, либо задайте связь между таблицами заново – связь по простому ключу «ФИО».

Примеры:

В) выберем «молодые» «ауди»: [марка] = «ауди» And [пробег] <10000.

Занесение в бланк: занести «ауди» в поле «Условие отбора» в столбце «марка», а <10000 – в столбце «пробег». (Оператор And в этом случае в явном виде не заносится. Напомним, что логическое выражение «целиком», то есть с оператором And записывается пользователем при создании запроса на языке SQL (пример приведен в разделе 2.3)).

Г) отберем «стариков» и среди машин, и среди их владельцев:

[пробег]>100000 Or [возраст]>60

Будут отобраны данные и по машинам с пробегом >100000, и по владельцам с возрастом >60. Занесение в бланк, два варианта:

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

Рис. 16

б) Одно из отношений заносится в поле «Условие отбора», а другое в поле «или». То есть, возможны два варианта. Один из них: >100000 заносится в поле «или» столбца «пробег», а >60 заносится в поле «Условие отбора» столбца «возраст».

УПРАЖНЕНИЕ 7

Если упражнение 7 выполняется сразу после упражнения 6, то можно выключить кнопку «Групповые операции» . Σ . , чтобы убрать соответствующую сроку в бланке. Создайте четыре запроса в БД «Граждане», задавая условия отбора, приведенные в пунктах А) – Г). Дайте запросам имена «ауди-вольво», «пробег», «молодые «ауди»», «старики».

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

Общее правило конструирования условий отбора: занесение отношений в поле «Условие отбора» в разных столбцах бланка «Конструктора» означает создание условия вида

«отношение 1» And «отношение 2» And «отношение 3» …

Если подобные условия занесены и в поле «Условие отбора», и в поле «или», то они будут связаны оператором Or , то есть будет создано условие вида

(«отношение 1» And «отношение 2» And … )Or(«отношение n» And «отношение n+1» And …)

Для добавления еще одного оператора Or нужно перейти в следующую строку полей «или» с помощью вертикальной полосы прокрутки окна «Конструктора». При этом введенная ранее часть условия перестанет быть видным (полностью все условия отбора можно увидеть в инструкции на языке SQL: воспользуйтесь меню кнопки «Вид»).

УПРАЖНЕНИЕ 8: редактирование запроса, арифметические дейст-

вия в условиях, флажок «Вывод на экран»

Получите список владельцев автомашин, составляющих «группу риска». А именно, отберите владельцев машин с возрастом больше 70 лет, при этом их машины тоже должны быть «не молоды»: [пробег]> [возраст] х1000.

Таблица-результат должна содержать только «ФИО» владельцев.

Запрос создавайте путем редактирования запроса «пробег», полученного в упражнении 7. Работайте самостоятельно, учитывая следующие указания:

1. Открыв запрос «пробег» в режиме «Конструктора», удалите часть условия. Потренируйтесь вставлять столбец: выделите столбец «пробег» (также как при работе с таблицей WORD), Вставка, Столбцы. Занесите в новый столбец имя поля «ФИО».

2. Условие на пробег занесите в виде > [возраст]*1000.

3. Флажки «Вывод на экран» для полей «марка», «пробег», «возраст» нужно выключить. Для поля «ФИО» – включить.

Некоторые дополнительные сведения по записи условий отбора и по созданию запросов в целом можно найти в пособии [7].

Дополнительные указания по созданию запросов

Добавление таблиц в схему БД в окне «Конструктора»; вызвать окно «Добавление таблицы» кнопкой «Отобразить таблицу».

Занесение в бланк имен полей можно выполнять буксировкой имен из схемы БД над бланком.

Создание копии запроса: указать имя запроса в окне БД, Копировать, щелкнуть правой кнопкой мыши правее имен запросов, Вставить, дать копии имя, ОК.

Строку «Сортировка» на бланке запроса в Access 2002 можно убирать и восстанавливать с помощью опции Вид главного меню.

Если условие отбора на бланке полностью не видно (рисунок 17), 

можно увеличить ширину столбца: получите указатель

мыши, каким он показан на рисунке, и буксируйте границу столбца вправо.

Рис. 17

Форматирование таблицы-результата, подготовка ее к распечатке:

А) Простой вариант: открыть таблицу-результат и форматировать ее с помощью опции «Формат» главного меню. Просмотреть перед печатью – кнопка «Предварительный просмотр». Эти же операции могут быть выполнены для любой таблицы БД.

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

Б) Для форматирования таблицы-результата можно создать алгоритм форматирования, а именно, объект называемый отчетом (следующий подраздел).

Создание отчетов

Запрос – это указания относительно отбора данных в таблицу-резуль­тат. Запрос можно дополнить указаниями относительно форматирования таблицы-результата, и создать тем самым объект называемый отчетом. Отчет можно создать и на основе таблицы БД. В отчет входят также указания относительно распечатки таблицы-результата. Как и другие объекты БД, отчет запоминается в ее файле.

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

А. Создание отчетов с помощью средства «Автоотчет»

Отчеты, созданные с помощью Автоотчета не меняют структуры исходной таблицы БД (или таблицы-результата, полученной с помощью запроса).

Ход работы:

1. В окне БД выбрать вкладку «Отчеты», кнопка «Создать».

2. В окне «Новый отчет» выбрать «Автоотчет:ленточный» (тогда сохранится табличная структура данных). В нижнем поле окна задать исходную таблицу или запрос, ОК.

3. Дать отчету имя: Файл, Сохранить как… .

4. Просмотр результата: кнопка «Просмотр» или двойной щелчок на имени отчета в окне БД.

5. Подготовка к печати: задать поля, число столбцов на странице и другие параметры (Файл, Параметры страницы). Просмотреть разбивку на страницы перед печатью: кнопка «Просмотр», использовать одну из кнопок «Одна страница», «Две страницы», … .

Редактирование отчета: указать отчет, кнопка «Конструктор». С помощью «Конструктора» можно полностью изменить формат таблицы-ре­зультата. Например, получив указатель мыши в виде ладони, можно буксировать текстовые поля на другое место.

Б. Создание отчета с помощью «Мастера»

С помощью «Мастера» можно создавать таблицы, которые отличаются от исходных компоновкой данных (пример – на рисунке 18). Начало работы: в окне БД выбрать вкладку «Отчеты», дважды щелкнуть «Создание отчета с помощью мастера». Дальнейшая работа разбирается ниже в упражнении 9.

Созданный отчет можно редактировать с помощью «Конструктора», а затем подготовить к печати, как это описано в конце предыдущего раздела. Другой вариант, редактирование средствами WORD, описан в упражнении 9.

УПРАЖНЕНИЕ 9: создание отчета с помощью «Мастера»,

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

На основе таблиц «Жители» и «Машины» создайте с помощью «Мастера» отчет, «генерирующий» таблицу, изображенную на рисунке 18. В этой таблице произведена группировка записей по значениям поля «марка». То есть, по терминологии Access, полю «марка» приписан 1-й уровень группировки. (Отметим также, что в таблице строка с данными относительно Кузьмина Николая не соотнесена с каким либо значением поля «марка», так как у этого жителя нет машин).

марка-пробег-ФИО

марка

пробег

ФИО

Кузьмин Николай

ауди

20000

Корин Василий

5000

Желудев Олег

2000

Романов Евгений

вольво

0

Корин Василий

194000

Кузин Петр

174000

Иванов Петр


Рис. 18

Указания по выполнению упражнения:

1. На первом этапе работы с «Мастером» сначала отберите из таблицы «Машины» поля «марка» и «пробег». Тогда в таблице-результате первым будет столбец «марка» и его имени можно будет приписать 1-й уровень группировки.

2. На втором этапе, то есть на вкладке «Выберите вид представления данных», следует указать «машины», иначе полю «ФИО» будет приписан 1-й уровень, а остальным полям – 2-й.

3. На вкладке «Добавить уровни группировки?» щелкните знак “>”, для имени «марка», чтобы приписать соответствующему полю 1-й уровень.

4. На вкладке «Выберите вид макета» выберите «блок».

5. На последней вкладке отчету дается имя. Это имя станет также заголовком таблицы-результата: «марка-пробег-ФИО».

6. Для дальнейшего форматирования таблицы-результата выполните перенесение таблицы-результата в WORD: в окне БД щелкнуть правой кнопкой на имени отчета, «Копировать», вставить в документ WORD. К полученной таблице примените средства работы с таблицей WORD и другие средства. Форматируйте таблицу, как показано на рисунке 16.

Запросы и редактирование данных. Назначение форм и макросов

Таблица БД может содержать тысячи записей. Возникает проблема: как найти запись в такой таблице для ее редактирования? Как отобрать для редактирования записи таблицы, удовлетворяющие некоторым условиям? Если исправлена запись в главной таблице, как найти для исправления этих же данных соответствующие записи в подчиненных таблицах?

Во-первых, для редактирования таблиц БД можно использовать запросы:

Если изменить данные в таблице-результате, то изменятся данные во всех связанных таблицах, на основе которых получалась таблица-ре­зультат.

Во-вторых, можно создавать объект Access, специально предназначенный для редактирования таблиц БД (и, в частности, для занесения в таблицы новых записей). Этот объект называется формой [4-6]. С точки зрения пользователя форма – это средство интерфейса, так как пользователю предоставляется диалоговое окно с полями для ввода данных в таблицы,

Не разбирая способы создания форм, поясним их назначение подробнее. Во-первых, назначение форм – упрощение работы с таблицей (в том числе с таблицей-результатом) при вводе и редактировании данных. Во-вторых, освоение форм необходимо, чтобы сделать следующий шаг – применять макросы (точнее, программы на языке VBA). Формы и запросы – это объекты, с которыми пользователь часто производит один и тот же набор действий. Например, учреждение принимает человека на работу. Последовательность действий пользователя будет следующей: в БД «Сотрудники» открывается форма «Общий список», для занесения данных о новом работнике в общий список сотрудников; далее, если он будет работать в отделе №1, то следующей открывается форма «Список отдела №1», заносятся данные; далее, если новый сотрудник – мать-одиночка, то следующей открывается форма «льготники» и так далее. Каждый раз этот набор операций с формами повторяется. Процесс можно автоматизировать, создав макрос «Прием на работу». После запуска макроса, откроется форма «Общий список», далее макрос проверит выполнение одного из условий [Общий список]![отдел]=1, [Общий список]![отдел]=2, … и, после занесения записи, откроет одну из форм «Отдел №1», «Отдел №2», … И так далее. Приводя этот пример, мы только бегло наметили направление дальнейшего освоения Access. Рекомендуемые учебники [3-5], хорошо дополняет справочник [6].