Базы данных Microsoft Access 2003

         

На этом этапе ввод информации



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

Однако таблицы и связи — это всего лишь кирпичики в стройном здании приложения базы данных Access. Они играют огромную роль и закладываются в фундамент в первую очередь, но строительство на этом не завершается. В настоящей главе мы приступим к созданию надстройки базы данных над фундаментом, что позволит сделать ее более эффективной и удобной в использовании. Итак, начнем трудовые будни с изучения запросов.

Создание простых запросов



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

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



Использование мастера простых запросов



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

1. Запустите Access и загрузите базу данных Растения.

2. Выберите ссылку Запросы в окне Растения: база данных.

3. Дважды щелкните на ссылке Создание запроса с помощью мастера. Откроется окно мастера, показанное на рис. 7.1.



Рис. 7.1. Окно Создание простых запросов


4. В раскрывающемся списке поддиаграммой обычно перечисляются все таблицы и запросы базы данных. Но пока что запросы не созданы, поэтому здесь представлены лишь таблицы. Выберите из списка таблицу Растения. Содержимое списка Доступные поля изменится, отображая все поля таблицы.

5. Выберите в списке Доступные поля поле Имя и щелкните на кнопке со стрелкой вправо для переноса этого поля в список Выбранные поля.

6. Дважды щелкните на названии поля ЛатинскоеИмя в списке Доступные поля. Поле будет перенесено в список Выбранные поля.

7. Щелкните на кнопке Далее для перехода во второе окно мастера.

8. Введите название запроса ИменаРастений и выберите переключатель Открыть запрос для просмотра данных (рис. 7.2).



Рис. 7.2. Последнее окно мастера создания запросов


9. Щелкните на кнопке Готово для создания запроса и откройте его в режиме таблицы, как показано на рис. 7.3.



Рис. 7.3. Новый запрос, открытый в режиме таблицы


Хотя таблица запроса напоминает обычную таблицу данных, между ними есть определенные различия.

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


Далее мы продолжим разговор о работе с данными в таблице запроса, но пока что вы должны закрыть его, щелкнув на кнопке Закрыть.

Создание запроса на основе другого запроса



Запрос ИменаРастений основан непосредственно на таблице Растения. Но существует возможность создания запроса, основанного на другом запросе. Посмотрим, как это делается.

1. Из вкладки Запросы окна Растения: база данных запустите мастер создания простых запросов.

2. В раскрывающемся списке Таблицы и запросы выберите запрос ИменаРастений. Как видите, в списке Доступные поля указаны только поля из этого запроса.

3. Дважды щелкните на поле Имя для его переноса в список Выбранные поля.

4. Щелкните на кнопке Далее.

5. Присвойте новому запросу имя ДругиеИменаРастений.

6. Щелкните на кнопке Готово, и Access создаст новый запрос, таблица которого будет выглядеть так, как показано на рис. 7.4.



Рис. 7.4. Запрос, основанный на другом запросе


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

Использование нескольких таблиц



В окне мастера создания простых запросов сказано: «Допускается выбор нескольких таблиц или запросов». Но мы не будем принимать слова Access на веру и выполним такие действия.

1. Запустите мастер запросов из вкладки Запросы окна Растения: база данных.

2. Из раскрывающегося списка Таблицы и запросы выберите таблицу Растения.

3. Перенесите поля Имя и ЛатинскоеИмя из списка Доступные поля в список Выбранные поля.

4. Из раскрывающегося списка Таблицы и запросы выберите элемент Таблица: Типы. Обратите внимание, что отмеченные ранее поля остаются в списке Выбранные поля, а в списке Доступные поля появились поля таблицы Типы (рис. 7.5).

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




Рис. 7.5. Создание запроса с полями из более чем одной таблицы


5. Перенесите поле Описание в список Выбранные поля.

6. Щелкните на кнопке Далее.

7. Введите Растения/Типы в качестве имени нового запроса и щелкните на кнопке Готово. Таблица полученного запроса показана на рис. 7.6.



Рис. 7.6. Запрос с полями из нескольких таблиц


Обратите внимание на повторяющиеся данные в столбце Описание. А как вы помните, в главе 6, «Использование взаимосвязей», подчеркивалось, в частности, что повторы недопустимы. Так что же здесь происходит?

В первую очередь следует четко уяснить, чем различаются между собой запросы и таблицы. Повторение данных в таблицах, конечно же, крайне нежелательно; вот почему повторяющиеся данные при разработке структуры базы данных были вынесены в отдельные таблицы. Хранение каждой единицы данных в отдельной области позволяет увеличить эффективность работы базы данных и помогает предотвратить возможные ошибки.

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

Совместное использование запросов таблиц предоставляет много новых возможностей. С помощью запроса данные можно хранить в удобной, наглядной для пользователя, реляционной форме, причем даже повторяющиеся данные, если в этом есть необходимость. Данные запроса вычисляются путем обработки таблиц, лежащих в его основе, и никогда не сохраняются, поэтому правило, предписывающее хранение не более чем одного блока данных в одном поле (правило 2 из главы 4), здесь не нарушается.

Работа с таблицей запроса



Таблицы запросов не только напоминают обычные таблицы, но и обладают схожими функциями. Все комбинации клавиш, указанные в главе 5, «Создание первых таблиц», также применимы для работы с запросами. Более того, таблицы запросов можно редактировать, как и таблицы базы данных. Вот как это делается.

1. Дважды щелкните на запросе ИменаРастений в окне Растения: база данных, и он будет открыт в режиме таблицы.

2. Щелкните на ячейке столбца Имя, где хранится значение Тысячелистник.

3. Измените это значение на Тысячелистник1 (рис. 7.7). Обратите внимание на небольшой значок в виде ручки, который появился слева от строки. Значок указывает на то, что произведенные изменения еще не были сохранены.



Рис. 7.7. Редактирование данных в таблице запроса


4. Щелкните на любой другой строке в таблице для сохранения изменений.

5. Закройте таблицу.

6. Выберите ссылку Таблицы в окне Растения: база данных.

7. Щелкните правой кнопкой мыши на ссылке Таблицы и выберите команду Открыть. Как видите, название растения поменялось, хотя использовалась таблица запроса.

8. Щелкните на имени Тысячелистник1 и измените его снова на имя Тысячелистник.

9. Закройте окно таблицы.

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



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

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

1. Щелкните на ссылке запроса Растения/Типы в окне Растения: база данных. Затем щелкните на кнопке Открыть, расположенной на панели инструментов.

2. Щелкните на ячейке, содержащей текст Тунбергия, и измените его на НеТунбергия.

3. Дважды нажмите клавишу <Таb> для перехода к последнему столбцу первой строки таблицы, в котором содержится значение Декоративное.

4. Введите значение Орнаментальное.

5. Еще раз нажмите клавишу <Таb>. Таблица теперь будет иметь вид, аналогичный показанному на рис. 7.8. Обратите внимание, что поле Декоративное везде заменено полем Орнаментальное.

6. Вернитесь в предыдущую строку, чтобы отменить произведенные изменения и вернуть бывшие значения полей.



Рис. 7.8. Редактирование данных в таблице запросов, основанной на двух таблицах


Результат, полученный при выполнении п. 5, наверняка вас удивил. Однако если задуматься о принципе работы запросов, загадка перестанет быть таковой. Запрос выбирает данные, как из таблицы Растения, так и из таблицы Типы, поэтому каждая строка запроса соответствует одной строке таблицы Растения. Названия полей Имя и ЛатинскоеИмя получены именно из таблицы Растения.

Но как насчет поля Описание, которое расположено в таблице Типы? Когда запрос выводит содержимое указанного поля, сначала используется значение Номер типа из таблицы Растения. С помощью этого значения запрос определяет строку таблицы Типы, которая должна соответствовать текущей строке таблицы Растения.

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

А что же происходит при изменении значения? Запрос «знает» о том, какая строка в таблице Типы используется для получения исходного значения, и обновляет эту строку в таблице. Однако затем обрабатываются все другие строки, и значение обновляется везде, где встречается в строках. В следствие этого изменение одной строки данных влияет на другие строки запроса, в котором отображаются данные различных таблиц. Эта функция Access, называемая строковой привязкой, предотвращает отображение в запросе данных, которые отсутствуют в таблицах.


Использование режима конструктора



Мастер простых запросов с успехом можно использовать для выполнения некоторых операций, однако при этом возможности запросов Access раскрываются не в полной мере. Для получения большего эффекта следует обратиться к режиму конструктора. Как вы знаете из главы 5, существует два формата отображения таблиц — режим таблицы и режим конструктора (в последнем отображается структура таблицы). Запросы также поддерживают этих два режима. Просмотр запроса в режиме конструктора позволяет изменить структуру запроса, применяемую при работе в режиме таблицы. Кроме того, режим конструктора больше подходит для изменения существующих или создания абсолютно новых запросов. Следующий раздел главы посвящен созданию новых запросов с нуля в режиме конструктора.

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



Добавление таблиц и запросов



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

1. Выберите ссылку Запросы в окне Растения: база данных.

2. Дважды щелкните на ссылке Создание запроса в режиме конструктора. Откроются новый запрос и диалоговое окно Добавление таблицы (рис. 7.9).



Рис. 7.9. Создание нового запроса в режиме конструктора


3. На вкладке Таблицы диалогового окна Добавление таблицы выберите значение Растения и щелкните на кнопке Добавить. Теперь таблица добавлена в запрос.

4. Щелкните на кнопке Закрыть и просмотрите запрос в режиме конструктора (рис. 7.10). В верхней панели отображается таблица, содержащая данные для запроса, а в нижней — поля запроса.

Итак, таблица в запрос добавлена, однако работа на этом не завершена. Выберите команду Вид>Режим таблицы, и появится сообщение с предупреждением о том, что для запроса необходимо выделить, по крайней мере, одно поле. Другими словами, поля для отображения запроса еще не определены. Процесс добавления полей описывается в следующем разделе.



Рис. 7.10. Таблица запроса в режиме конструктора


Добавление полей



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

1. Дважды щелкните на поле Имя в таблице Растения, расположенной в верхней панели окна запроса. В результате поле Имя будет добавлено в качестве первого поля для запроса (см. первый столбец нижней в панели окна запроса).

2. В верхней панели окна запроса щелкните на поле ЛатинскоеИмя таблицы Растения. Теперь перетащите это поле вниз и поместите его во второй столбец нижней панели окна запроса.

3. Щелкните на первой строке третьего столбца в нижней панели окна запроса и выберите из раскрывающегося списка доступных полей значение ИмяКаталога. Окно запроса в режиме конструктора с тремя выбранными полями показано на рис. 7.11.



Рис. 7.11. Определение полей для запроса в режиме конструктора


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

Сортировка результатов



Все описанные действия в режиме конструктора можно выполнить и с помощью мастера. Однако режим конструктора обладает и рядом оригинальных возможностей. Например, при его использовании результаты созданного запроса сортируются по имени в алфавитном порядке; не является проблемой и сортировка по латинскому имени. Режим конструктора дает возможность упорядочить получаемые результаты с учетом значений одного или нескольких полей.

1. Выберите команду Вид> Конструктор.

2. Щелкните на третьей строке второго столбца в нижней панели окна запроса. Эта строка, располагаемая под столбцом ЛатинскоеИмя, называется Сортировка. В результате щелчка на ячейке появится раскрывающийся список.

3. Щелкните на значке стрелки и выберите из списка значение По возрастанию.

4. Щелкните на кнопке Вид в левой области панели инструментов Access и выберите опцию Режим таблицы (рис. 7.12).



Рис. 7.12. Выбор метода сортировки для запроса


5. Запрос получает те же данные, что и раньше, но теперь они будут отсортированы по латинским именам. Еще раз щелкните на кнопке Вид для перехода в режим конструктора.

6. Отмените сортировку содержимого столбца ЛатинскоеИмя, щелкнув на ячейке и выбрав в раскрывающемся списке опцию (Отсутствует).

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

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

9. Установите для столбца ИмяКаталога тип сортировки По убыванию.

10. Для столбца Имя установите тип По возрастанию.

11. Перейдите в режим таблицы. Как видно из рис. 7.13, содержимое столбца ИмяКаталога отсортировано в обратном алфавитном порядке, а содержимое столбца Имя — в обычном.



Рис. 7.13. Сортировка двух столбцов запроса


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

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



Фильтрация результатов



Режим конструктора позволяет настроить фильтр для обработки результатов запроса. Использование фильтров — очень эффективный способ сортировки больших объемов данных. При настройке фильтра необходимо указать некоторые характеристики данных, обрабатываемых запросом, после чего Access отобразит только соответствующие правилам фильтрации строки. Фильтры настраиваются так, как описывается ниже.

1. Перейдите в режим конструктора.

2. В строке Условие отбора первого столбца запроса введите значение Огородник, как показано на рис. 7.14

3. Перейдите в режим таблицы. Как видите, на экране теперь отображаются только строки, в которых поле ИмяКаталога содержит значение Огородник (рис. 7.15).



Рис. 7.14. Добавление фильтра к запросу



Рис. 7.15. Результаты фильтрации запроса


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

5. Переключитесь в режим таблицы. Теперь в таблице отображаются строки с именами каталога Цветоводство и Огородник. Если вы введете более одного условия фильтрации в нескольких строках нижней панели таблицы запроса, в режиме таблицы будут отображаться только строки, соответствующие указанным критериям.

6. Перейдите в режим конструктора и удалите условие отбора «Цветоводство», выделив его и нажав клавишу <Delete>.

7. Введите значение Тысячелистник в строке Условие отбора столбца ИмяКаталога, расположенной справа от строки со значением Огородник.

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

9. Щелкните на кнопке Сохранить, расположенной на панели задач Access. Введите ФильтрРастений в качестве имени запроса, а затем щелкните на кнопке ОК.

10. Закройте таблицу запроса.

Иногда Access модифицирует введенные критерии фильтрации. Например, при переходе в режим конструктора значение «Тысячелистник» было заключено в кавычки. Не стоит беспокоиться, поскольку таким образом Access лишь проявляет свою заботу о разработчике базы данных.

В Access принято использовать специальные выражения, в которых описываются условия и критерии фильтрации (табл. 7.1). Более полную информацию о них можно получить, обратившись к справочной системе Access.

Таблица 7.1. Выражения, поддерживаемые фильтрами

Выражение
Описание
«Голубой»
Значение «Голубой»
«Голубой» or «Розовый»
Или «Голубой» или «Розовый»
Like «Б*»
Любое слово, начинающееся с буквы «Б». Знак звездочки (*) — это символ, означающий любое количество символов
Like «Б??»
«Бой», «Буй», «Бег» — любое слово из трех букв, начинающееся с буквы «Б». Знак вопроса соответствует одному символу
< «Н»
Перед буквой «Н» в алфавите
333
Числовое значение 333
>=333
Больше или равно 333
Between 5 and 100
По меньшей мере 5, но не больше чем 100
#3/5/2000#
Дата 5 марта 2000 г. (применяется только в поле Дата/время)
Not «Зеленый»
Любое другое значение, но не «Зеленый»
In («Зеленый», «Красный», «Голубой»)
Значения «Зеленый», «Красный» «Голубой»
Is Null
Поле не содержит значения
Is Not Null
Поле содержит любое значение (т.е. не пустое)


Добавление второй таблицы



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

1. В окне Растения: база данных щелкните на ссылке Запросы.

2. Щелкните на кнопке Создать на панели инструментов.

3. В диалоговом окне Новый запрос выберите опцию Конструктор и щелкните на кнопке ОК.

4. В диалоговом окне Добавление таблицы выберите таблицу Каталоги и щелкните на кнопке Добавить.

5. В этом же диалоговом окне выберите таблицу Растения и щелкните на кнопке Добавить.

6. Щелкните на кнопке Закрыть.

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

8. Выберите ссылку Таблицы в окне Растения: база данных.

9. Перетащите таблицу Типы из окна Растения: база данных в верхнюю панель окна запроса в режиме конструктора. Теперь к запросу будет добавлена таблица Типы, как показано на рис. 7.16. Обратите внимание, что Access автоматически отображает связи, существующие между таблицами.



Рис. 7.16. Несколько таблиц в окне создания запроса


10. Добавьте в нижнюю панель запроса поля Имя и Страна из таблицы Каталоги, Имя и ЛатинскоеИмя из таблицы Растения и Описание из таблицы Типы.

11. Снимите флажок Вывод на экран для поля Страна.

12. Укажите значение Россия в качестве условия отбора для поля Страна.

13. Укажите значение Лечебное в качестве условия отбора для поля Описание. Убедитесь, что оба значения фильтров находятся в одной строке.

14. Для сортировки поля Имя выберите опцию По возрастанию. Последнее окно разработки запроса показано на рис. 7.17.



Рис. 7.17. Окно для создания сложного запроса


15. Перейдите в режим таблицы для просмотра запроса.

16. Сохраните запрос под именем ЛекарстваРоссия.

17. Закройте окно запроса.

Подведем итоги...



Эта глава посвящена использованию запросов Access — удобному и эффективному способу получения разнообразнейших сведений из базы данных. Еще раз перечислим те преимущества, которые вы получаете в случае применения запросов:

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