| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Статьи:: Базы данных :: Учебник по Access 2002 :: Глава 4. Отбор и сортировка записей с помощью запросов.
Глава 4. Отбор и сортировка записей с помощью запросов.
Глава 4. Отбор и сортировка записей с помощью запросов Одним из семи
стандартных объектов Microsoft Access является запрос. Запросы
используются для просмотра, анализа и изменения данных в одной или нескольких
таблицах. Например, можно использовать запрос для отображения данных из одной
или нескольких таблиц и отсортировать их в определенном порядке, выполнить
вычисления над группой записей, осуществить выборку из таблицы по определенным
условиям. Запросы могут служить источником данных для форм и отчетов Microsoft
Access. Сам запрос не содержит данных, но позволяет выбирать данные из таблиц и
выполнять над ними ряд операций. В Microsoft Access существует несколько видов
запросов: запросы к серверу, которые используются для выборки данных с сервера;
запросы на автоподстановку, автоматически заполняющие поля для новой записи;
запросы на выборку, выполняющие выборку данных из таблиц; запросы на изменение,
которые дают возможность модифицировать данные в таблицах (в том числе удалять,
обновлять и добавлять записи); запросы на создание таблицы, создающие новую
таблицу на основе данных одной или нескольких существующих таблиц, а также
другие типы запросов. В данной главе основное внимание уделяется запросам на
выборку, как одному из наиболее часто применяемых типов запросов. Ниже
рассматриваются следующие вопросы:
Описание других
типов запросов приводится в гл. 8. Запрос на
выборку содержит условия отбора данных и возвращает выборку, соответствующую
указанным условиям, без изменения возвращаемых данных. В Microsoft Access
существует также понятие фильтра, который в свою очередь является
набором условий,
позволяющих отбирать подмножество записей или сортировать их. Сходство между
запросами на выборку и фильтрами заключается в том, что и в тех и в других
производится извлечение подмножества записей из базовой таблицы или запроса.
Однако между ними существуют различия, которые нужно понимать, чтобы правильно
сделать выбор, в каком случае использовать запрос, а в каком —
фильтр. Основные отличия
запросов и фильтров заключаются в следующем.
Запросы могут
использоваться только с закрытой таблицей или запросом. Фильтры обычно
применяются при работе в режиме Формы или в режиме Таблицы для просмотра или
изменения подмножества записей. Запрос можно использовать:
Создание простого запроса с помощью Мастера
запросов Наиболее просто
создается запрос при помощи Мастера запросов. Чтобы создать простой запрос с
помощью Мастера запросов, необходимо:
Рис. 4.1.
Окно создания нового запроса
Рис. 4.2.
Первое диалоговое окно Мастера простых запросов
Рис. 4.3.
Окно Мастера простых запросов на втором шаге По окончании
работы Мастера простых запросов в зависимости от выбора способа дальнейшей
работы с запросом откроется или окно запроса в режиме просмотра (рис. 4.4), или
окно Конструктора запросов, в котором можно модифицировать запрос. В качестве
примера построения простого запроса с помощью Мастера простых запросов
рассматривается создание запроса, содержащего имена, фамилии, адреса и телефоны
сотрудников фирмы "Борей" (Northwind) (в качестве исходных данных взяты таблицы
демонстрационной базы данных "Борей"). Этот запрос строится на основе таблицы
"Сотрудники" (Employees). На первом шаге Мастера простых запросов была выбрана
исходная таблица "Сотрудники" (Employees) в поле со списком Таблицы и запросы
(Tables/Queries) и в список Выбранные поля (Selected Fields) были
перенесены следующие поля: "Имя" (First Name), "Фамилия" (Last Name), "Адрес"
(Address), "Домашний телефон" (Home Phone). На втором шаге Мастера простых
запросов в поле названия запроса было введено имя "Сотрудники Запрос" и выбран способ
дальнейшего отображения запроса: просмотр информации. Результатом работы Мастера
запросов стал запрос "Сотрудники Запрос", изображенный на рис.
4.4.
Рис. 4.4.
Окно запроса в режиме просмотра Создание и изменение запроса с помощью Конструктора
запросов Для изменения
уже существующих запросов и для создания новых запросов используется Конструктор
запросов. Для того чтобы открыть запрос в режиме Конструктора, выделите в списке
один из существующих запросов, например только что созданный запрос "Сотрудники
Запрос", и нажмите кнопку Конструктор (Design) на панели инструментов
окна База данных (Database). Появляется окно
Конструктора запросов (рис. 4.5). В верхней части окна отображается таблица (или
несколько таблиц, если запрос многотабличный) в том виде, в каком таблицы
отображаются в окне Схема данных (Relationship). Таблицы — источники
данных для запроса, мы будем называть базовыми таблицами запроса. В
нижней части окна находится бланк запроса — таблица, ячейки которой
используются для определения запроса. В бланке отображаются все столбцы,
включенные в результирующее множество запроса. Для того чтобы
просматривать полностью бланк запроса и все исходные таблицы, используют линейки
прокрутки. В области
панелей инструментов Access отображается панель инструментов Конструктор
запросов (Queries Design). Эта панель представлена на рис. 4.6, а в табл.
4.1 приведено описание кнопок этой панели инструментов и соответствующие им
команды меню.
Рис.
4.5. Запрос "Сотрудники Запрос" в режиме Конструктора
запросов
Рис. 4.6.
Панель инструментов Конструктор запросов Таблица
4.1. Описание кнопок на панели инструментов Конструктор запросов
С использованием
кнопок панели инструментов вы будете знакомиться по мере изучения работы с
запросами, как в данной главе, так и в гл. 8. А теперь
рассмотрим, как создать новый запрос с помощью Конструктора запросов. Для этого
необходимо:
Рис. 4.7.
Окно Добавление таблицы Конструктора
запросов
Рис. 4.8.
Запрос по нескольким связанным таблицам Внимание
Примеры разных
способов включения полей в результат запроса в режиме Конструктора запросов
приведены на рис. 4.9—4.11.
Рис. 4.9.
Пример отбора полей для нового запроса в режиме
Конструктора
Рис. 4.10.
Вид окна Конструктора при выборе всех полей из
таблицы Чтобы добавить в
запрос еще одну таблицу или другой запрос, необходимо:
Рис. 4.11.
Выбор полей запроса из раскрывающегося списка
Замечание
Замечание
Чтобы удалить
базовую таблицу из запроса, необходимо выделить ее, щелкнув на любом месте в
списке ее полей, и нажать клавишу <Delete>. Чтобы удалить
поле из запроса, выделите нужный столбец в бланке запроса, а затем нажмите
клавишу <Delete>. Чтобы выделить столбец, пользуйтесь областью выделения
столбцов — узкой серой полоской над столбцами в бланке запроса. Когда вы
подводите указатель мыши к этой области, он преобразуется в жирную стрелку,
направленную вниз. Поля в таблице,
являющейся результатом запроса, отображаются в том порядке, в котором они
следуют в бланке запроса. Если требуется изменить порядок их следования,
переставьте соответствующим образом столбцы в бланке запроса. Делается это
стандартным способом, т. е. сначала выделяется нужный столбец или несколько
столбцов, а затем они перетаскиваются мышью на новое место. При этом отпускать
кнопку мыши нужно тогда, когда указатель мыши окажется перед тем столбцом,
который делжен быть справа от вставляемого столбца. После вставки все столбцы,
расположенные справа от указателя, сдвигаются вправо. Если вы перемещаете
столбцы в конец
запроса, то отпускайте кнопку мыши, когда указатель окажется перед первым
свободным столбцом. В режиме
Конструктора запросов можно изменять имена полей запроса. Чтобы переименовать
поле, необходимо установить курсор в бланке запроса перед первой буквой его
имени и ввести новое имя и символ двоеточия. Пример запроса с измененными
именами полей приведен на рис. 4.12. Изменение имени поля в бланке запроса
приводит к изменению заголовка столбца при просмотре запроса в режиме таблицы.
Кроме того, если на основе запроса создать новый объект, например форму или
отчет, в новом объекте будет использовано новое имя поля. Имя поля базовой
таблицы при этом не изменяется. Это имя также не изменяется в тех формах и
отчетах, которые были созданы на основе запроса до изменения имени поля. Имена
полей в запросах должны соответствовать соглашениям об именах Microsoft
Access.
Рис. 4.12.
Изменение названия поля в запросе Совет
Ширина столбцов
в бланке запроса также может меняться. Осуществляется это простым
перетаскиванием мышью границы столбца или двойным щелчком мыши по линии границы,
как это делается в таблице Excel. Замечание
В строке Условие отбора (Criteria) и в строке или (Or) указываются условия отбора записей. Такими условиями могут быть логические выражения. Например, (>30), (='Иванов'), (=10) и т. п. (0 создании выражений в условиях запроса см. разд. "Использование выражений" ниже в этой главе.) Условия,
находящиеся в одной строке, но в разных столбцах бланка, объединяются по
логическому оператору And (И). Если нужно объединить условия отбора по
логическому оператору Or (ИЛИ), разместите эти условия в разных строках бланка
запроса. Пример использования нескольких условий отбора приведен на рис.
4.13.
Рис. 4.13.
Задание критериев отбора записей в запросе Если критерий
отбора очень сложный, можно вставлять дополнительные строки условий. Для этого
необходимо:
Для удаления
строки условий отбора:
Чтобы установить
порядок сортировки записей в запросе, используйте строку Сортировка
(Sort). Для каждого поля, по которому должны сортироваться записи, выберите
из списка соответствующий порядок сортировки: по возрастанию (Ascending)
или по убыванию (Descending). По умолчанию во всех полях запроса
устанавливается значение (отсутствует) (Not sorted). Пример использования
поля со списком Сортировка (Sort) приведен на рис. 4.14. Если нужно
отсортировать записи в запросе по нескольким полям, разместите их в бланке
запроса таким образом, чтобы они были упорядочены слева направо — именно в таком
порядке будет выполняться сортировка. Можно легко
удалить поле из результирующей таблицы запроса, если просто сбросить флажок
Вывод на экран (Show) в этом столбце бланка запроса. По умолчанию этот
флажок установлен для всех полей запроса. Ситуация, когда поле не должно
отображаться в результате запроса, возникает обычно, когда оно включается в бланк
запроса только для того, чтобы указать условие отбора или сортировки записей.
Пример такого запроса приведен на рис. 4.15. В запрос включены все поля таблицы
"Товары" (Products) (это задано в первом столбце бланка запроса), а поля
"КодТипа" и "Марка" включены только для того, чтобы указать порядок сортировки.
Поэтому флажок Вывод на экран (Show) у этих полей сброшен. В противном
случае эти поля вывелись бы дважды.
Рис. 4.14.
Установка порядка сортировки записей в запросе
Рис. 4.15.
Запрос в режиме Конструктора Если вы хотите
очистить бланк запроса для того, чтобы создать новый, нужно выполнить команду
Правка, Очистить бланк (Edit, Clear Grid). После
формирования бланка запроса его можно сохранить, нажав на кнопку Сохранить
(Save) на панели инструментов или выполнив команду меню Файл, Сохранить
(File, Save). При этом появляется диалоговое окно, в котором нужно ввести
имя сохраняемого запроса (рис. 4.16). Запрос можно сохранить и закрыв
его. Результаты
выполнения запроса можно увидеть, переключившись в режим Таблицы (Datasheet
View) с помощью кнопки Вид (View) или нажав кнопку Запуск (Run) на панели
инструментов.
Рис. 4.16.
Диалоговое окно Сохранение Результат
выполнения запроса, созданного в режиме Конструктора, приведен на рис.
4.17.
Рис. 4.17.
Результат выполнения запроса, созданного в режиме
Конструктора Создание вычисляемых полей в
запросах Создание
запросов интересно не только тем, что вы можете в виде одной таблицы представить
данные из нескольких связанных таблиц и отобрать нужные записи из этих таблиц.
Вы можете создавать столбцы в запросе, которые являются результатом вычислений
над значениями других столбцов. Такие столбцы называются вычисляемыми.
Это существенно расширяет возможности запросов. Простейшим примером
вычисляемого поля в запросе может быть поле, которое объединяет имя и фамилию
человека. На рис. 4.18 показан пример такого поля в запросе, созданном на базе
таблиц "Сотрудники" (Employees) и "Заказы" (Orders). Чтобы создать
вычисляемое поле, нужно ввести выражение, которое вычисляет требуемое значение,
в строку Поле (Field) свободного столбца бланка запроса. В данном примере
это выражение представляет собой конкатенацию полей, содержащих имя и фамилию
сотрудника, с пробелом между ними. В этом выражении мы используем ссылки на поля
таблицы, которые в выражении заключаются в квадратные скобки. Перед выражением
нужно написать имя поля: ФИО и отделить его двоеточием от
выражения.
Рис. 4.18.
Вычисляемое поле в запросе Совет
Рис. 4.19.
Диалоговое окно Область ввода Вы можете
создать сколько угодно вычисляемых столбцов в запросе, используя при этом сколь
угодно сложные выражения. С другими примерами создания таких столбцов вы
познакомитесь в следующих главах книги. В зависимости от
решаемых задач соединение между таблицами в запросах может быть нескольких
видов. Наиболее
распространенным является внутреннее соединение (эквисоедшение). Если
таблицы связаны отношением "один-ко-многим", соединения основываются на
уникальном значении
поля первичного ключа в одной таблице и значениях поля внешнего ключа в другой
таблице. В результирующее множество запроса попадают все записи из главной
таблицы (таблицы на стороне "один"), для которых имеются соответствующие записи
в подчиненной таблице (таблице на стороне "многие"). Если в подчиненной таблице
записи с заданной величиной отсутствуют, то соответствующие записи в главной
таблице в результирующее множество не включаются. Подобного рода соединения
между таблицами Access создает автоматически, если:
Замечание
Результатом
такого запроса являются все записи, значения связанных полей которых в обеих
таблицах совпадают. Другими словами, эквисоединение связывает записи в таблицах
отношением равенства значений связывающих полей. Для создания
запроса, объединяющего все записи из одной таблицы, и только те записи из
второй, в которых связанные поля совпадают, используют внешнее соединение.
В этом случае независимо от того, имеются ли соответствующие записи во
второй таблице, все записи первой попадают в результирующее множество
запроса. Если необходимо
связать данные любым отношением, кроме отношения равенства, используют
соединение по отношению или тэта-соединение). Соединение по
отношению не отображается в окне Схема данных (Relationships) и не
выводится в окне Конструктора запросов. Для обозначения
внутренних соединений в Access используются зарезервированные слова ANSI SQL
INNER JOIN, а для указания внешних соединений — слова LEFT JOIN или RIGHT JOIN.
Выражение WHERE <поле1>=<поле2> соответствует внутреннему
соединению, a WHERE поле1>поле2 — соединению по отношению (одному из таких
соединений). Для связывания
данных в одной таблице применяют рекурсивное соединение. Оно создается
путем добавления в запрос копии таблицы (в результате чего Access назначает
псевдоним для копии) и связывания полей идентичных таблиц. Внутреннее
соединение двух таблиц по одному полю в реляционной базе данных строится на
основе отношения "один-ко-многим". Примером может служить демонстрационная база
данных "Борей" (Northwind), в которой все соединения являются внутренними
соединениями по одному полю на основе указанного отношения. В ходе разработки
баз данных, в которых предполагается использование запросов на основе внутренних
соединений, придерживайтесь следующих правил.
В качестве
примера использования запроса на основе внутреннего соединения по одному полю в
базе данных "Борей" (Northwind) построим отчет с указанием марки товара, его
поставщика, единицы измерения товара и его цены:
Рис. 4.20.
Окно Конструктора запроса с изображением соединения полей
таблиц
Рис.
4.21. Бланк запроса с заполненными полями в режиме
Конструктора Нажмите кнопку
Запуск (Run) либо выберите Режим таблицы (Query View) в списке
кнопки Вид (View) на панели инструментов для отображения результата запроса
(рис. 4.22). Обратите внимание на то, что заголовками полей в созданном наборе
записей являются подписи полей таблицы (включающие пробелы), а не их имена, в
которых пробелы обычно не используются.
Рис. 4.22.
Результирующее множество запроса После выполнения
запроса Microsoft Access выводит на экран результирующее множество, записи
которого упорядочены по значению первичного ключа (так же, как и при просмотре
таблицы). Чтобы изменить порядок сортировки, например, упорядочить записи по
убывающей цене товара:
Рис. 4.23.
Результат запроса с сортировкой по убывающей цене
товара Аналогично
создаются запросы, в которых участвует несколько связанных таблиц, образующих
цепочку. При этом в результат запроса могут быть включены поля из всех таблиц,
участвующих в запросе, или только поля из таблиц, находящихся на концах такой
цепочки (рис. 4.24). Во втором случае таблицы на концах цепочки оказываются
связанными косвенно, и чтобы правильно построить запрос, соединяющий поля этих
таблиц, необходимо включить в запрос каждую таблицу, участвующую в соединении.
Например, можно вывести названия стран, товары из которых покупаются клиентами.
В данном случае косвенно оказываются связанными таблицы "Клиенты" (Customers) и
"Поставщики" (Suppliers), а промежуточными таблицами оказываются таблицы
"Заказы" (Orders), "Заказано" (Order Details), "Товары" (Products). Microsoft
Access автоматически показывает связи, в том числе и промежуточные, между
таблицами. После добавления
в бланк запроса полей "Название" (CompanyName) из таблицы "Клиенты" (Customers)
и "Страна" (Country) из таблицы "Поставщики" (Suppliers) выберите команду Вид, Режим SQL
(View, SQL View) для того, чтобы просмотреть инструкцию SQL, соответствующую
данному запросу (рис. 4.25). Соединения таблиц задаются операцией INNER JOIN. .
.ON. . . При таком положении косвенные соединения основываются на выражении
INNER JOIN ... ON... ON... (Подробнее об инструкциях языка SQL см. разд.
"Создание запросов SQL" гл. 8.)
Рис. 4.24.
Соединение косвенно связанных записей
Рис. 4.25.
Эквивалентная запросу инструкция SQL Запросы,
соединяющие косвенно связанные записи, часто используются при анализе данных с
помощью статистических функций SQL или перекрестных запросов
Access. Внешние
соединения бывают левыми или правыми. Запрос, в котором участвуют таблицы с
левым внешним соединением (LEFT JOIN или *= в SQL), выводит все записи таблицы
"один", в независимости от того, имеются ли соответствующие им записи в таблице
"многие". И наоборот, запрос, в котором участвуют таблицы с правым внешним
соединением (RIGHT JOIN или =* в SQL), выводит все записи таблицы "многие", в
независимости от того, имеются ли соответствующие им записи в таблице
"один". Рассмотрим в
качестве примера, как с помощью левого внешнего соединения создать запрос в базе
данных "Борей" (Northwind), который обнаруживает клиентов, не сделавших ни
одного заказа:
Рис.
4.26. Диалоговое окно Параметры объединения Замечание
Рис. 4.27.
Отображение левого внешнего объединения в окне Конструктора
запросов
Рис. 4.28.
Результат выполнения запроса с левым внешним
соединением
В качестве
примера рекурсивного соединения рассмотрим запрос к базе данных "Борей"
(Northwind), в котором выводятся заказы клиентов, принятые и выполненные в один
день. Для создания
такого запроса мы будем использовать таблицу "Заказы" (Orders):
Рис. 4.29.
Запрос с рекурсивным соединением
Рис. 4.30.
Диалоговое окно Свойства запроса Рекурсивные
соединения крайне редко используются в приложениях Access благодаря возможности
задания ограничений значений и обеспечению целостности данных. Запрос в Access
является объектом, который сохраняется в файле базы данных и может многократно
повторяться. Все запросы, которые мы демонстрировали до сих пор, содержали
конкретные значения дат, названий, имен и т. д. Если требуется повторить такой
запрос с другими значениями в условиях отбора, его нужно открыть в режиме
Конструктора, изменить условие и выполнить. Чтобы не делать многократно этих
операций, можно создать запрос с параметрами. При выполнении такого запроса
выдается диалоговое окно Введите значение параметра (Enter Parameter
Value), в котором пользователь может ввести конкретное значение и затем получить
нужный результат. Покажем, как
создавать запросы с параметрами на примере запроса "Отсортированный список
товаров", который мы создавали ранее. Теперь мы с помощью этого запроса
попробуем отобрать товары, поставляемые определенным поставщиком. Для
этого:
Рис. 4.31.
Диалоговое окно Параметры запроса
В одном запросе
можно ввести несколько параметров. При выполнении такого запроса для каждого из
параметров будут поочередно выводиться диалоговые окна Введите значение
параметра в том порядке, в котором параметры перечислены в бланке
запроса.
Рис. 4.32.
Диалоговое окно Введите значение параметра
Рис. 4.33.
Результат выполнения запроса с параметром Совет
Еще одним
способом создания запроса является сохранение фильтра в виде запроса. Выше мы
говорили, что фильтр используется при просмотре таблицы для отбора нужных
записей. Если вы создали достаточно сложный фильтр в- окне Фильтр (Filter
by Form) и знаете, что его придется использовать и в дальнейшем, можно сохранить
его в базе данных в виде запроса. Для этого достаточно нажать кнопку
Сохранить как запрос (Save as query) на панели инструментов при открытом
окне Фильтр (Filter by Form).
Рис. 4.34.
Сохранение фильтра в виде запроса Сохраненный
фильтр может быть легко использован в дальнейшем, приием двумя
способами.
Рис. 4.35.
Диалоговое окно Применяемый фильтр Замечание
Обратите
внимание, что хотя в режиме Таблицы запрос отображал все столбцы исходной
таблицы, в бланке запроса указан только один столбец "Должность" (ContactTitle),
который содержит условие отбора, и тот не включен в результат запроса. Чтобы
понять, почему так происходит, откройте запрос в режиме SQL. Для этого нужно
нажать кнопку Вид, Режим SQL (View, SQL View). Появится диалоговое окно,
содержащее инструкцию языка SQL, которая и обрабатывается при выполнении запроса
(рис. 4.37). Эта инструкция имеет вид: SELECT
* FROM
Клиенты WHERE
(((Клиенты.Должность)= "Менеджер по продажам")); Значок *
означает, что выбираются все поля из таблицы "Клиенты".
Рис. 4.36.
Запрос "Менеджеры по продажам" в режиме
Конструктора
Рис. 4.37.
Запрос "Менеджеры по продажам" в режиме SQL В виде запроса
можно также сохранить так называемый расширенный фильтр. Расширенный
фильтр используется в том случае, если требуется задать сложные критерии отбора
и сортировки записей. Чтобы создать расширенный фильтр для открытой таблицы,
необходимо выполнить команду Записи, Фильтр, Расширенный фильтр (Records,
Filter, Advanced Filter/Sort). При этом появляется окно расширенного фильтра,
которое очень напоминает окно Конструктора запроса. На рис. 4.38 представлено
окно расширенного фильтра для таблицы "Заказы" (Orders). Чтобы создать такой
фильтр, мы выполнили следующие действия:
Рис. 4.38.
Окно расширенного фильтра Окно расширенного фильтра действительно очень похоже на окно Конструктора запросов, однако панель инструментов очень сильно отличается от панели инструментов Конструктора запросов. Например, нельзя добавить еще одну таблицу (расширенный фильтр строится только для одной таблицы — в данном примере вторая таблица отображает поле подстановки) или выполнить группировку записей. На панели инструментов есть только две важные кнопки: Применение фильтра (Apply filter) и Сохранить как запрос (Save as query). В бланке фильтра отсутствует строка, содержащая флажки включения поля в запрос. Это означает, что фильтр не влияет на состав столбцов в результирующей таблице — всегда отображаются все столбцы, фильтруются только записи. Однако критерии отбора записей могут быть установлены сколь угодно сложные. Задаются они по тем же правилам, что и в запросах. Чтобы посмотреть
результаты запроса, достаточно открыть его в режиме Таблицы. Для этого
необходимо:
После этого на
экране появляется таблица, которая содержит только те записи, которые
удовлетворяют критериям отбора, указанным в запросе, и те поля, которые указаны
в бланке запроса. Если в запросе указан порядок сортировки записей, они
выводятся на экран в соответствующем порядке. Внешне
отображение результатов запроса не отличается от отображения таблицы. Все режимы
работы с таблицей, описанные в гл. 2, применимы и к результирующей
таблице запроса. С ней можно работать так же, как и с обычной таблицей, в
частности не только просматривать, но и изменять данные. Изменения сохраняются в
записях базовой таблицы, на основе которой построен запрос. Если запрос создан
на основе двух и более связанных таблиц, то не всегда столбцы в запросе можно
редактировать. (Подробнее об этом см. следующий раздел.) Для выполнения
запроса из режима Конструктора достаточно просто переключиться в Режим
таблицы (Datasheet View) с помощью кнопки Вид (View) на панели
инструментов, как мы это уже не раз делали, или с помощью команды Режим
таблицы (Datasheet View) из меню Вид (View). В Access 2002
запрос можно открыть не только в режиме Таблицы. Вы можете выполнить обработку
результатов запроса и получить на их основе сводную таблицу или диаграмму,
аналогичные тем, которые можно создать на базе таблицы Excel. Это новое удобное
средство обработки данных запроса мы рассмотрим подробно в гл.
8. Изменение данных в результирующем множестве
запроса Когда результат
запроса отображается в виде таблицы, возникает желание не только просматривать,
но и изменять данные в этой таблице. Поскольку эта таблица является виртуальной,
на самом деле редактирование полей запроса означает редактирование полей в
таблицах, на основе которых строился запрос. Однако такое редактирование не
всегда возможно, и при попытке изменить значение некоторого поля вы можете
получить сообщение, что данные в запросе не являются обновляемыми, или просто
звуковой сигнал. В настоящем разделе мы рассмотрим условия, при которых данные в
запросе могут обновляться. Является ли
запрос обновляемым, можно достаточно легко обнаружить визуально: при отображении
результатов запроса в конце записей должна быть пустая строка, которая помечена
значком звездочки (*) в области выделения записи слева. Тогда в эту строку можно
вводить данные, которые создадут новую запись. Если такая строка отсутствует,
добавлять записи в запрос и изменять поля запроса нельзя. Любой запрос
имеет два свойства: Уникальные значения (Unique Values) и Уникальные
записи (Unique Rows). Свойство Уникальные записи (Unique Row)
исключает из результирующего набора дублированные записи, т. е. в результат
запроса будут включены записи, которые имеют уникальные значения хотя бы в одном
из полей. Свойство Уникальные значения (Unique Values) требует включения
в результирующий набор только тех записей, которые имеют уникальные значения во
всех полях. Значения этих свойств не могут одновременно быть равными Да (Yes),
хотя оба могут иметь значения Нет (No). Значения этих свойств могут
устанавливаться в окне свойств запроса. Большинство запросов, свойство
Уникальные записи (Unique Row) которых имеет значение Да (Yes), могут
использоваться для обновления данных. Запросы, свойство Уникальные значения
(Unique Values) которых имеет значение Да (Yes), не допускают ни обновления
имеющихся в них записей, ни добавления новых. Вы не сможете
добавлять и изменять записи в запросах, если:
Условия, при
которых можно добавить или обновить записи в запросе:
Замечание
Результаты
запроса можно не только посмотреть на экране, но и напечатать. Сделать это можно
несколькими способами:
Рис. 4.39.
Диалоговое окно Печать Настройка
параметров печати при печати запроса выполняется так же, как и при печати
обычной таблицы (см. разд. "Работа с таблицами"гл. 2). Совет
Можно напечатать
результат запроса и прямо из окна базы данных, не открывая его. Для этого
необходимо:
Передача результатов запроса в другие
приложения В Microsoft
Access имеются возможности быстрой передачи результатов запросов в другие
приложения Microsoft Office. Рассмотрим эти возможности. Существуют
четыре способа использования данных Microsoft Access в Microsoft
Word.
|