Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД Исмагилова пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
658.43 Кб
Скачать

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) и на вкладке «Макет» в свойстве «Тип границы» выберите вариант «Сплошная».