
- •Исмагилова к.К. Работа с базами данных
- •Общие положения.
- •Структура базы данных
- •Простейшие базы данных
- •Свойства полей. Типы полей
- •Связанные таблицы
- •Поля уникальные и ключевые
- •Субд access
- •Объекты access
- •Режимы работы с access
- •Особенности таблиц баз данных
- •Надежность и безопасность баз данных
- •Совместное использование данных
- •Приемы работы с таблицами баз данных
- •Создание связей между таблицами
- •Практическая работа с базами данных в программе microsoft access
- •1. Создание и заполнение таблиц баз данных
- •2. Формы
- •3. Запросы. Вычисляемые поля
- •3.1. Создание запроса:
- •4. Отчеты
- •4.11. Группировка данных в отчете:
- •5. Базы данных, содержащие несколько связанных таблиц. Составные формы и составные отчеты
- •5.1. Определение связей между таблицами:
- •6. Запросы на основе связанных таблиц. Группировка и перекрестные запросы. Запросы с параметрами
- •6.2. Настройка свойств полей с результатами группировки:
- •7. Макросы и автоматизация работы с базой данных
- •7.7. Настройка параметров запуска базы данных:
- •7.9. Определение элементов кнопочной формы:
- •7.10. Настройка макета кнопочной формы:
- •Приложение
- •Литература
5. Базы данных, содержащие несколько связанных таблиц. Составные формы и составные отчеты
А5-1. Дополнить существующую базу данных «Видео» (см. упражнение А1-1), включив в таблицу «Фильмы» поле «НомКас» (см. последний столбец таблицы 1 в приложении) и создав таблицу «Кассеты» (см. таблицу 4 в приложении). Связать таблицы с помощью полей «Ном» (таблица «Кассеты») и «НомКас» (таблица «Фильмы»), после чего заполнить их данными, указанными в таблицах 1 и 4 приложения.
Решение
Откройте базу данных «Видео» (см. 2.1).
Откорректируйте структуру таблицы «Фильмы», открыв ее в режиме конструктора (см. 1.15) и добавив в список полей новое поле НомКас типа «Числовой» размера «Длинное целое» (см. 1.3, 1.7), после чего сохраните структуру таблицы (см. 1.5) и закройте таблицу «Фильмы» (см. 1.16).
Действуя так же, как при создании таблицы «Фильмы» (см. 1.2—1.3), создайте новую таблицу, определив ее поля следующим образом:
Имя поля |
Тип данных |
Описание |
Ном |
Счетчик |
Порядковый номер кассеты |
Фирма |
Текстовый |
Фирма-производитель |
Длит |
Числовой |
Длительность кассеты |
Определите следующие свойства полей таблицы (см. 1.7):
Поле «Ном» |
Подпись: |
Номер |
Поле «Фирма» |
Размер поля: |
10 |
Обязательное поле: |
Да |
|
Поле «Длит» |
Размер поля: |
Целое |
Подпись: |
Длительность |
|
Обязательное поле: |
Да |
Поле «Ном» сделайте ключевым (см. 1.4).
Сохраните созданную таблицу под именем Кассеты (см. 1.5) и закройте ее (см. 1.16).
5.1. Определение связей между таблицами:
«Сервис | Схема данных...» или
.
с помощью появившегося окна «Добавление таблицы»добавьте в схему данных таблицы «Кассеты» и «Фильмы» (щелкая на их именах мышью и нажимая [Добавить]), затем нажмите кнопку [Закрыть]. В результате в окне «Схема данных» будут отображаться окна таблиц, содержащие все их поля (как в верхней части окна конструктора запросов — см. 3.1);
увеличьте высоту окна таблицы «Фильмы» так, чтобы в нем отображались все поля (для этого надо зацепить мышью за нижнюю рамку окна «Фильмы» и перетащить рамку вниз);
по условию упражнения таблицы должны быть связаны с помощью полей «Ном» (таблица «Кассеты») и «НомКас» (таблица «Фильмы»). Для создания этой связи зацепите мышью одно из данных полей (например,поле «Ном» таблицы «Кассеты») и перетащите его надругое поле («НомКас» таблицы «Фильмы»);
в появившемся окне «Связи» («Изменение связей» вAccess 2000/XP) установите флажок «Обеспечение целостности данных» и нажмите кнопку [Создать].
Созданная связь будет изображаться в окне схемы данных в виде линии с метками на концах (рядом с полем «Ном» таблицы «Кассеты» указывается цифра «1», а рядом с полем «НомКас» таблицы «Фильмы» — знак бесконечности «∞»). Наличие этих двух меток означает, что данная связь имеет тип «Один ко многим»: с одной («1») записью из таблицы «Кассеты» можно связать много («∞») записей из таблицы «Фильмы» (иными словами, на одну кассету можно записать несколько фильмов).
Флажок «Обеспечение целостности данных» позволяет избежать ошибочных ситуаций при вводе данных в связанные таблицы. Так, при попытке ввести в поле «Ном-Кае» номер, отсутствующий в таблице «Кассеты» (то есть при попытке связать фильм с несуществующей кассетой), будет выдано сообщение об ошибке. Заметим, что установить связь с обеспечением целостности данных можно только между полями одного и того же типа и размера (в нашем случае оба поля связи имеют тип «Числовой» и размер «Длинное целое»).
Для удаления связи между таблицами следует щелкнуть мышью на линии, изображающей данную связь (при этом толщина линии увеличится), нажать клавишу [Del] и подтвердить удаление в диалоговом окне, выбрав в нем вариант [Да].
Для повторного отображения окна «Связи», в котором настраиваются свойства связи между таблицами, надо выполнить двойной щелчок мышью на линии, изображающей данную связь.
Сохраните схему данных одним из действий, описанных в 1.5, и закройте окно схемы данных.
Заполните таблицу «Кассеты», используя таблицу 4 приложения, после чего заполните поле «НомКас» в существующих записях таблицы «Фильмы».
Порядок заполнения таблиц является существенным: наличие контроля за целостностью данных (см. первое' примечание к 5.1) приводит к тому, что в поле «НомКас»;; таблицы «Фильмы» можно вводить только номера существующих кассет (то есть кассет, информация о которых хранится в таблице «Кассеты»).
А5-2. В существующей базе данных «Видео» разработать на основе связанных таблиц «Фильмы» и «Кассеты» (см. упражнение А5-1) составную форму «Кассеты и фильмы» и отформатировать ее по образцу.
Решение
Ввод данных в связанные таблицы удобно выполнять с помощью особой составной формы, состоящей из двух форм: основной и подчиненной.
Создайте новую простую форму на основе таблицы «Кассеты» (см. 2.20); эта форма будет играть роль основной формы. В созданной форме настройте подписи к полям и расположите поля в одну линию, как указано в образце; поле «Фирма» преобразуйте в поле со списком значений Sony;RAKS;TDK;Konica (см. 2.7-2.9); поле «Ном» отцентрируйте (см. 2.11) и отключите к нему доступ, не меняя его внешнего вида (см. прием 2.10 и примечание к нему). Измените заголовок формы на Кассеты и фильмы (см. 2.18) и сохраните форму под этим же именем (см. 1.5).
5.2. Включение в основную форму подчиненной формы с помощью перетаскивания: увеличьте высоту области данных основной формы (см. 2.17) и расположите на экране без наложений два окна: окно конструктора с основной формой «Кассеты и фильмы» и окно базы данных (проще всего это сделать командой «Окно | Слева направо»). В окне базы данных перейдите к группе объектов «Формы». Зацепите мышью значок формы «Фильмы (ленточная форма)» в окне базы данных и перетащите этот значок на свободное место в нижней части раздела «Область данных» макета формы «Кассеты и фильмы». В результате в область данных основной формы «Кассеты и фильмы» будет вставлен новый элемент — подчиненная форма. Измените заголовок подчиненной формы на Фильмы и настройте шрифт заголовка по образцу (см. 2.11).
Перейдите в стандартный режим формы и убедитесь, что в подчиненной форме отображаются те записи из таблицы «Фильмы», которые связаны с текущей записью из таблицы «Кассеты». Настройте размеры подчиненной и основной формы по образцу и сохраните откорректированную основную форму.
Связь между основной и подчиненной формой устанавливается с помощью свойств подчиненной формы «Объект-источник», «Подчиненные поля» и «Основные поля» на вкладке «Данные» (в свойстве «Основные поля» указывается поле связи из основной формы, в свойстве «Подчиненные поля» указывается поле связи из подчиненной формы). При описанном выше перетаскивании эти поля определяются автоматически на основе информации о связях между таблицами «Кассеты» и «Фильмы». 0 В качестве подчиненной была выбрана ранее созданная форма «Фильмы (ленточная форма)» (см. упражнение А2-1), которую можно использовать и как самостоятельную форму базы данных. Чаще подчиненную форму разрабатывают специально для включения в некоторую составную форму.
Составная форма содержит два набора кнопок: один — для перемещения по записям в основной форме (то есть по кассетам), другой — для перемещения по записям в подчиненной форме (то есть по фильмам, записанным на текущей кассете). Для того чтобы с помощью клавиатуры перейти из подчиненной формы в основную, надо использовать комбинации [Ctrl]+[Tab] (переход к следу- ющей записи в основной форме) и [Ctrl]+[Shift]+[Tab] (переход к текущей записи в основной форме). 0 Составную форму можно использовать для добавления записей как в таблицу «Кассеты», так и в таблицу «Фильмы», причем добавлять новые фильмы можно только в одну из имеющихся кассет, и при этом добавлении номер кассеты автоматически записывается в поле «НомКас» добавляемого фильма.
Добавьте в базу данных «Видео» с помощью формы «Кассеты и фильмы» новую кассету «Sony 180» (номер 9) и введите в нее данные о двух фильмах:
Меч в камне |
США |
Мультфильм |
75 |
25.04.00 |
Аладдин |
США |
Мультфильм |
75 |
17.05.00 |
Завершив ввод данных, вызовите таблицу «Фильмы» и убедитесь, что введенные записи содержат в поле «НомКас» значение «9» (то есть номер новой кассеты).
А5-3. В существующей базе данных «Видео» разработать на основе связанных таблиц «Фильмы» и «Кассеты» (см. упражнение А5-1) составной отчет «Кассеты и фильмы.
Решение
Создайте новый простой отчет на основе таблицы «Кассеты» (см. первое примечание к 4.1); этот отчет будет играть роль основного отчета. В созданном отчете отформатируйте подписи к полям и расположите поля в одну линию, как указано в образце; поля «Ном» и «Длит» отцентрируйте. Откорректируйте нижний колонтитул по образцу (см. 4.9), измените заголовок отчета на Кассеты и фильмы и сохраните отчет под этим же именем (см. 5.1).
В качестве заготовки для подчиненного отчета удобно использовать имеющийся отчет «Фильмы (названия)» (см. упражнение А4-1), сохранив его под новым именем. Для этого выполните следующие действия.
5.3. Сохранение отчета под новым именем: в окне базы данных перейдите к группе объектов «Отчеты», выделите отчет «Фильмы (названия)», «Файл | Сохранить как/экспорт...»(«Файл | Сохранить как...» в Access 2000/XP), в появившемся диалоговом окне введите новое имя Фильмы (подчиненный отчет) (в Access 97, кроме того, выберите вариант «В текущей базе данных») и нажмите [ОК.].
5.4. Удаление разделов заголовков, примечаний и колонтитулов в подчиненном отчете: перейдите в режим конструктора для отчета «Фильмы (подчиненный отчет)», снимите флажок рядом с командой меню «Вид | Заголовок/примечание отчета», в появившемся окне подтвердите удаление данных разделов, нажав кнопку [Да]; затем снимите флажок рядом с командой меню «Вид | Колонтитулы», в появившемся окне подтвердите удаление колонтитулов, нажав кнопку [Да].
В подчиненных отчетах колонтитулы не используются. Области заголовка и примечаний использовать допустимо, но не рекомендуется, так как это перегружает составной отчет повторяющимися надписями.
Сохраните откорректированный отчет «Фильмы (подчиненный отчет)» (см. 1.5) и закройте его (см. 4.10).
5.5. Включение в подчиненный отчет поля связи: откройте в режиме конструктора запрос «Фильмы (названия)», на котором основан отчет «Фильмы (подчиненный отчет)», и поместите на бланк запроса еще одно поле: «НомКас» (см. 3.2).После этого сохраните измененный запрос (см. 1.5) и закройте его (см. 1.16).
Поле «НомКас» не используется при отображении подчиненного отчета, но оно необходимо для установления связи между основным и подчиненным отчетом.
5.6. Включение в основной отчет
подчиненного отчета с помощью панели
элементов: откройте основной отчет
«Кассеты и фильмы» в режиме конструктора
(см. первое примечание к 1.15) и отобразите
на экране вспомогательное окно«Панель
элементов», выполнив команду «Вид [
Панель элементов» или нажав кнопку
.
Отожмите (то есть переведите в ненажатое
состояние) кнопку
на этой панели. Увеличьте высоту раздела
«Область данных» в макете отчета, нажмите
на панели элементов кнопку
и щелкните мышью в нижней части раздела
«Область данных». В результате в отчет
будет вставлен элемент типа «Подчиненный
отчет», однако пока этот элемент не
будет связан с каким-либо из имеющихся
в базе данных отчетов. Измените связанный
с подчиненным отчетом элемент-надпись
на Фильмы (элемент-надпись расположен
выше рамки подчиненного отчета).
Упростить вставку в форму или отчет сложных элементов может мастер вставки (если он был инсталлирован в процессе установки программы Access). Для активизации мастера при вставке элемента необходимо, чтобы кнопка на панели элементов была «вдавленной» (нажатой); в этом случае в момент вставки элемента в форму/отчет на экране появляется окно, позволяющее в диалоговом режиме установить основные свойства добавляемого элемента. Кроме того, существуют дополнительные приемы, упрощающие настройку добавляемого элемента; с одним из них — вставкой подчиненной формы/ отчета с помощью перетаскивания из окна базы данных — мы познакомились при разработке составной формы (см. 5.2).
5.7. Настройка свойств подчиненного отчета: вызовите окно свойств подчиненного отчета (см. 2.8), перейдите на вкладку «Данные» и определите свойство «Объект-источник», выбрав из выпадающего списка вариант «Отчет.Фильмы (подчиненный отчет)». В свойство «Подчиненные поля» введите НомКас, в свойство «Основные поля» введите Ном. Закройте окно свойств.
Перейдите в режим предварительного просмотра и убедитесь, что теперь в полученном отчете после данных о каждой кассете выводятся данные о записанных на ней фильмах.
Настройте ширину подчиненного отчета так, чтобы она оказалась достаточной для отображения всех его столбцов, и откорректируйте высоту области данных основного отчета.
Повторно сохраните откорректированный отчет «Кассеты и фильмы» и закройте базу данных (см. 1.17).
А5-4. Дополнить существующую базу данных «Магазин» (см. упражнение А1-3), создав новые таблицы «Товары» и «Продажи» (см. таблицы 5 и 6 в приложении). Связать таблицы «Клиенты» и «Продажи» с помощью полей «Ном» (таблица «Клиенты») и «НомКли» (таблица «Продажи»), а таблицы «Товары» и «Продажи» — с помощью полей «Ном» (таблица «Товары») и «НомТов» (таблица «Продажи»). Заполнить таблицы «Товары» и «Продажи» данными, указанными в таблицах 5 и 6 приложения. Для заполнения таблицы «Товары» разработать ленточную форму «Товары».
Указание
После установления связей между таблицами (см. 5.1) схема данных должна выглядеть следующим образом:
Необходимость во вспомогательной таблице «Продажи» возникает из-за того, что записи таблиц «Клиенты» и «Товары» находятся в отношении «Многие ко многим» (многие клиенты могут купить один и тот же товар, и многие товары могут быть куплены одним клиентом), — сравните с отношением типа «Один ко многим», для которого вводить вспомогательную таблицу не требуется: достаточно дополнить одну из таблиц полем, ссылающимся на запись из другой таблицы (см. упражнение А5-1). Заметим, что в таблице «Продажи» можно также хранить дополнительные сведения о каждой конкретной продаже (например, ее дату).
А5-5. В существующей базе данных «Магазин» разработать на основе связанных таблиц «Клиенты», «Товары» и «Продажи» (см. упражнение А5-4) составную форму «Клиенты и продажи», позволяющую вводить данные в таблицы «Клиенты» и «Продажи»
Указания
Создаваемая форма не предназначена для заполнения таблицы «Товары» (для этого имеется специальная форма «Товары» — см. упражнение А5-4). Тем не менее, в целях повышения наглядности, желательно, чтобы вместе с номером купленного товара в подчиненной форме отображались и его характеристики, взятые из таблицы «Товары» («Наименование», «Фирма», «Цена»), без возможности их корректировки. Для этого подчиненную форму необходимо создать не на основе обычной таблицы «Продажи», а на основе вспомогательного запроса, объединяющего данные из связанных таблиц «Продажи» и «Товары».
5.8. Формирование запроса на основе двух таблиц: создайте новый запрос, включив в него таблицы «Продажи» и «Товары» (см. 3.1); при этом в окне конструктора запросов будут отображены не только окна таблиц, но и связи между ними. Поместите на бланк запроса все поля таблицы «Продажи» и следующие поля таблицы «Товары»: «Наим», «Фирма», «Цена» (см. 3.2). Установите сортировку поля «Ном» из таблицы «Продажи» по возрастанию (см. 3.3) и сохраните запрос под именем Продажи и товары (см. 1.5).
Выполните созданный запрос и измените значение поля «НомТов» в первой строке результирующей таблицы на «4». Убедитесь, что это изменение автоматически приводит к изменению полей, связанных с описанием проданного товара.
Создайте на основе запроса «Продажи и товары» ленточную автоформу (см. 2.2); эта форма будет играть роль подчиненной формы. Откорректируйте форму следующим образом:
удалите поле «НомКли» (отображать это поле нет необходимости, поскольку данные о клиенте будут выводиться в основной форме, по отношению к которой создаваемая форма будет подчиненной);
не меняя внешнего вида, отключите возможность редактирования полей «Наим», «Фирма» и «Цена» (см.прием 2.10 и примечание к нему), так как эти поля будут использоваться только как информационные.
Созданную форму сохраните под именем Продажи (см. 1.5).
Для того чтобы сделать ввод данных в поле «НомТов» формы «Продажи» более удобным, выполните следующие действия.
5.9. Дополнительные возможности, связанные с выпадающими списками: преобразуйте поле «НомТов» в выпадающий список (см. 2.7) и определите его следующие свойства (ср. с 2.9):
Вкладка |
Свойство |
Значение |
Данные |
Тип источника строк |
Таблица/запрос |
Данные |
Источник строк |
Товары |
Данные |
Ограничиться списком |
Да |
Макет |
Число столбцов |
4 |
Макет |
Заглавия столбцов |
Да |
Макет |
Ширина столбцов |
0,5;2;2;1 |
Благодаря сделанным настройкам, в поле «НомТов» можно вводить только номера, имеющиеся в таблице «Товары» (так как свойство «Ограничиться списком» имеет значение «Да»). При разворачивании списка в нем отображаются не только номера товаров, но и их характеристики, взятые из таблицы «Товары» (выпадающий список состоит из 4 столбцов, причем столбцы списка снабжаются названиями полей:«Ном», «Наим», «Фирма» и «Цена»). Ширина каждого столбца в выпадающем списке определяется в свойстве «Ширина I столбцов» (соответственно 0,5 см, 2 см, 2 см, 1 см). Для отображения последнего столбца в выпадающем списке используйте полосу прокрутки в нижней части списка.
В качестве заготовки для основной формы можно использовать ранее созданную форму «Клиенты (комбинированная форма)» (см. упражнение А2-3). Создайте ее копию под именем Клиенты и продажи (копии форм создаются так же, как и копии отчетов — см. 5.3), измените ее режим отображения на «Простая форма» (см. 2.21) и включите в нее подчиненную форму «Продажи» (либо перетаскиванием — см. 5.2, либо с использованием панели элементов — см. 5.6). - 0 Форму «Клиенты и продажи» можно сделать еще более наглядной, если внести следующие изменения в подчиненную форму «Продажи»: удалите из нее столбец «Наименование», замените заголовок «Номер товара» на «Наименование» и в свойстве «Ширина столбцов» выпадающего списка «НомТов» замените первое число на 0: 0;2;2;1 (теперь первый столбец выпадающего списка имеет нулевую ширину, и, поскольку он не отображается, в поле выпадающего списка выводится значение из второго столбца, то есть наименование товара).
Подчеркнем, что это исправление никак не скажется на результирующих таблицах базы данных: в поле «НомТов» таблицы «Продажи» по-прежнему будет заноситься значение из (невидимого) первого столбца выпадающего списка.
А5-6. В существующей базе данных «Магазин» разработать на основе связанных таблиц «Клиенты», «Товары» и «Продажи» (см. упражнение А5-4) составной отчет «Клиенты и продажи».
Указания
В качестве источника данных для подчиненного отчета используйте запрос «Продажи и товары» (см. 5.8).
Для того чтобы в основном отчете данные из подчиненного отчета обрамлялись рамкой, вызовите окно свойств элемента «Подчиненный отчет» (см. 2.8) и на вкладке «Макет» в свойстве «Тип границы» выберите вариант «Сплошная».