Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Access_2007.doc
Скачиваний:
257
Добавлен:
17.03.2015
Размер:
20.6 Mб
Скачать

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

Программа Access проявляет удивительную смекалку при отслеживании связей запросов с конкретными таблицами. Это особенность становится актуальной, когда вы распа­хиваете таблицу в Конструкторе для изменения ее структуры.

Предположим, что вы переименовываете таблицу Orders (заказы) в таблицу Sales (продажи) и поле DatePlaced (дата размещения) в поле OrderDate (дата заказа). В сле­дующий раз, когда вы запустите запрос FirstQuarterOrders_2007 (см. рис. 6.6), то с удивлением обнаружите, что он все еще действует. Программа Access знает о том, что запрос FirstQuarterOrders_2007 зависит от таблицы Orders. Когда вы изменяете имена в таблице, программа соответствующим образом корректирует запрос.

Access содержит отличное средство, способное проверить любой выбранный вами объ­ект БД и сообщить обо всех других объектах, которые от него зависят. Это средство можно применить для определения запросов, форм и отчетов, использующих таблицу Orders, прежде чем изменять ее. Для применения этого средства выполните следующие действия:

  1. Выберите Работа с базами данных → Показать или скрыть → Зависимости объектов (Database Tools Show/Hide Object Dependencies). В правой части окна программы Access появляется область Зависимости объектов. (Для того чтобы скрыть ее, выберите ту же последовательность еще раз.)

  2. В области переходов выберите объект БД, который вы хотите исследовать.

  3. В области Зависимости объектов выберите переключатель Объекты, зависящие от данного (Objects that depend on me), чтобы увидеть объекты, использующие данный, или переключатель Объекты, от которых зависит данный (Objects that I depend on), чтобы увидеть все объекты, которые использует данный объект.

  4. В верхней части области Зависимости объектов щелкните кнопкой мыши ссылку Обновить (Refresh). В области Зависимости объектов выводятся все соответствующие объекты, разделенные на категории в зависимости от их типа (рис. 6.15).

Программа Access не может отследить все зависимости, например, если вам нужно про­никнуть в Режим SQL для формирования запроса, который нельзя создать в режиме Конструктора. Если создается запрос на объединение (как в предыдущем примере), у Access не хватает сообразительности для того, чтобы выяснить, от каких таблиц зависит ваш запрос. Если вы изменили структуру этих таблиц, то при следующем выполнении запроса получите сообщение об ошибке, говорящее о том, что программа не может най­ти нужное поле или таблицу. (Для исправления ошибки необходимо снова открыть за­прос в Режиме SQL и заменить имена полей или таблиц их новыми значениями.)

Рис. 6.15. На рисунке в области Зависимости объектов анализируется таблица Products. Отображены три таблицы, связанные с Products, и четыре запроса, использующие таблицу Products. В любой объект можно углубиться, щелкнув кнопкой мыши квадратик со знаком "плюс" (+), расположенный рядом с именем объекта. (Щелкните кнопкой мыши + рядом с именем TopProducts, чтобы выяснить, используют ли другие объекты БД данный запрос.) В конце списка находится раздел Пропущенные объекты. В нем отображен запрос на объединение CustomersAndEmployees, и это свидетельствует о том, что у программы Access нет данных о его зависимостях

Запросы и связанные таблицы

В главе 5 вы узнали, как делить данные на базовые фрагменты и сохранять их в отдельных хорошо организованных таблицах. У такого проекта есть лишь одна проблема — гораздо труднее представить общую картину, если связанные данные хранятся в разных местах. К счастью, Access обладает чудесным средством — вы можете снова соединить таблицы при выводе на экран с помощью операции объединения (join).

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

Далее приведено несколько примеров.

В БД кукол-болванчиков можно отобразить список кукол (извлеченный из таблицы Dolls) совместно с данными об изготовителе каждой куклы-болванчика (из таблицы-родителя Manufacturers).

В БД школы Cacophone music можно получить список учебных классов, снабженный информацией о преподавателях.

Из БД Boutique Fudge можно извлечь список заказов, дополнив его сведениями о клиен­те, сделавшем заказ.

Примечание

Вы уже научились создавать таблицы подстановок для отображений части информации из свя­занной таблицы. Подстановка может вывести название категории изделия из поля ProductID вместо кода изделия. Но запрос с использованием операции объединения гораздо мощнее. Он может выбрать массу сведений из связанной таблицы — гораздо больше, чем может вместить одно поле.

На рис. 6.16 показано объединение таблиц.

Рис. 6.16. Сама по себе таблица Classes содержит данные о каждом классе, но она предоставляет только идентификационный номер назначенного преподавателя. Соедините эту таблицу с таблицей Teachers, и вы получите любую интересующую вас информацию из связанной записи о преподавателе — включая его имя и фамилию

Объединение таблиц в запросе

Access делает удивительно легким объединение двух таблиц. Первый шаг — добавление обеих таблиц в ваш запрос, с помощью диалогового окна Добавление таблицы (Show Table).

Если в Конструкторе создается новый запрос, это окно появляется немедленно. Если вы работаете над уже созданным запросом, убедитесь, что вы в режиме Конструктора, щелкни­те правой кнопкой мыши окно и выберите в меню строку Добавление таблицы.

Если связь между таблицами уже определена (с помощью схемы данных, как описано вразд. "Определение отношения" главы 5, или созданием подстановки, как описано в разд. "Поиск в связанных таблицах" главы 5), программа Access использует эту связь для автома­тического выполнения операции объединения. Вы увидите на схеме линию, соединяющую соответствующие поля, как показано на рис. 6.17.

Рис. 6.17. Access автоматически соединяет поле CustomerlD в таблице Orders с полем ID в таблице Customers, основываясь на связи, определенной в БД

Если связь между двумя связанными таблицами еще не определена, возможно, это следует сделать до того, как создавать запрос (см. подробные инструкции в главе 5). Но если вы по каким-то непонятным причинам решили не создавать связь (может быть, про­ект БД был введен в эксплуатацию другим, менее сообразительным специалистом Access), вы можете задать объединение вручную в окне запроса. Для этого просто перета­щите мышью связанное поле одной таблицы на совпадающее поле в другой. Можно также удалить объединение, щелкнув правой кнопкой мыши линию объединения и выбрав команду Удалить (Delete).

Примечание

Если вы добавляете две несвязанные таблицы, программа Access пытается угадать связь, чтобы помочь вам. Если она находит поле с одинаковыми типами данных и именем в обеих табли­цах, она добавляет связь для этих полей. Подобное действие зачастую совсем не то, что вам нужно — например, у многих таблиц есть общее поле Код (ID). Однако если вы строго соблю­даете правила проектирования БД, приведенные в разд. "Шесть правил проектирования БД" главы 2, у связанных полей имена в разных таблицах слегка отличаются, например ID и CustomerID. Если программа все же предлагает несуществующую связь, просто удалите ее, преж­де чем выполнять нужное объединение.

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