Отбор и сортировка записей с помощью запросов

         

Арифметические операторы



Арифметические операторы

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

В табл. 4.2 приведен список арифметических операторов для выражений Access.



Функции



Функции

Функция так же, как и идентификатор, используется для возвращения значения в точку вызова. Значение, возвращаемое функцией, определяется ее типом, например функция NOW () возвращает дату и время часов компьютера. Синтаксически функция выделяется круглыми скобками, следующими сразу же за ее идентификатором. Многие функции требуют наличия аргументов, которые записываются в этих скобках через запятую при обращении к функции. Функции можно использовать для создания нового выражения или функции. (Об использовании функций рассказывается в гл. 13.)



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

Функции работы с массивами — используются для определения границ размерностей массивов при программировании на VBA.
Функции преобразования типов данных — применяются для преобразования одного типа данных в другой. Например, для преобразования числа в строку служит функция str (), а обратно — функция val ().
С помощью функций работы с объектами баз данных осуществляется обращение к объектам баз данных: таблицам, запросам, формам, отчетам, макросам и модулям. Например, функция CurrentDB () возвращает ссылку на объект Database, с которым работает Access в данный момент. (Для более подробной информации о работе с этими функциями обратитесь к справочной системе Access или к гл. 13.)
Функции даты и времени — служат для проведения операций со значениями даты и времени. Например, функция DateDiff О вычисляет промежуток между двумя датами, а функция Date () возвращает значение текущей даты.
Функции динамического обмена данными (DDE) между приложениями Windows и функции работы с использованием технологии связывания и внедрения (OLE) (например, DDE() и DDESendO) — используются для перемещения данных из одного приложения в другое и обратно. Для приложений, поддерживающих технологию OLE, в частности Microsoft Office, особенно важными являются функции GetObject () и CreateObject (), с помощью которых начинается основная работа с любыми объектами (см. разд. "Интеграция Access 2000 с другими компонентами Office 2002" гл. 15).
Статистические функции SQL — используются чаще всего для многотабличных запросов как источника данных для форм. Статистические функции SQL возвращают статистические данные из записей, выбранных по запросу. Эти функции нельзя использовать в макросах или вызывать их из программ VBA иначе, как внутри выражений в кавычках, используемых в инструкциях SQL для создания объектов Recordset.

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

Примером статистической функции SQL является stDev(), а соответствующей ей статистической функцией по подмножеству записей— DStDevf). Обе они вычисляют стандартное отклонение для заданного множества значений.

Функции обработки ошибок — используются, как следует из названия, для отслеживания ошибок. Например, функция Error () выводит сообщение об ошибке по ее номеру. Наличие таких функций в выражении можно считать признаком хорошего тона, поскольку используемое выражение, хоть и приводит к ошибочному результату, но продолжает вести себя корректно, не забыв предупредить пользователя.
Финансовые функции — идентичны своим двойникам в Microsoft Excel и используют те же аргументы. Например, функция Rate () возвращает процентную ставку, необходимую для получения путем регулярных взносов указанной суммы на базе имеющейся за определенный срок.
Функции общего назначения — используются в основном при программировании на VBA для извлечения вспомогательной информации и управления ходом выполнения программы. Например, функция Commando служит для извлечения аргументов командной строки при выполнении программы, написанной на VBA.
Функции сообщений и ввода/вывода — позволяют выводить сообщения или вводить новые данные, а также устанавливать различные параметры ввода/вывода. Иллюстрацией могут служить функция ввода данных inputBox () или функция проверки существования каталога или файла Dir ().
Функции проверки — особая группа функций, отвечающих на вопрос "является ли аргумент... ?". Например, IsNumericf) — возвращает True, если аргумент имеет один из числовых типов данных, и False — в противном случае; IsObject() — возвращает True, если аргумент— объект OLE Automation, и False — в противном случае.
Функции ветвления — используются для выбора из нескольких альтернатив. На них стоит остановиться подробнее.
IIf (Expr, Truepart, Falsepart) — возвращает значение выражения Truepart, если значение выражения Ехрг равно True, или значение выражения Falsepart, если значение Ехрг есть False. Особо важно то, что вне зависимости от значения выражения Ехрг, будут вычислены как выражение Truepart, так и Falsepart. Следует быть очень внимательным к возможным побочным эффектам, связанным с этой особенностью функции Ilf {). Отметим, что здесь, как и в большинстве функций, в качестве каждого из аргументов стоит выражение, которое, в свою очередь, тоже может быть сложным выражением.
Функция Choose () возвращает значение, соответствующее заданному положению в списке значений. Switch () возвращает значение, связанное с первым из последовательности выражением, имеющим значение True.
Функции Choose () и Switch() похожи на команду Select Case из VBA и других диалектов Basic, которая не раз встретится вам в гл. 13.
Математические и тригонометрические функции — используются для выполнения простых (и неслишком) математических операций, например вычисления логарифма Log () или синуса числа Sin ().
Текстовые функции — позволяют проводить различные операции над строками. Например, функция Trim() возвращает строку, заданную в качестве аргумента, без начальных и заключительных пробелов.
Замечание

Еще раз обратим внимание, что описание всех функций (а их более 100) с подробными примерами выходит за рамки этой книги, тем более что справочная система Access и VBA предлагает развернутое изложение использования каждой функции, сопровождаемое примерами. При необходимости применения в дальнейшем изложении какой-либо незнакомой функции мы будем стараться кратко описать ее назначение и применение.



Идентификаторы объектов



Идентификаторы объектов

Любой объект Access имеет имя, по которому его можно однозначно идентифицировать в некоторой системе объектов. Кроме обозначения коротким именем объекта, идентификатор можно обозначить квалифицированным (или полным} именем, когда объект идентифицируется как один из объектов в семействе объектов. В этом случае имя идентификатора состоит из имени семейства (класс объекта), отделенного от присвоенного имени (имени объекта) восклицательным знаком или точкой (символами операции идентификации "!" и "."). Поэтому имена объектов не должны содержать символов "!" и "." В SQL разделитель имен объектов — точка, в Access для разделения имен таблиц и имен полей используется "!", а точка разделяет объекты и их свойства. Используя идентификаторы, можно возвращать значения полей в объекты форм и отчетов, а также строить новые выражения.

Пример идентификаторов объектов в базе данных "Борей" (Northwind):

[Заказы]![ДатаНазначения]

идентификатор поля "ДатаНазначения", находящегося в таблице "Заказы" (Orders).



Окно создания нового запроса



Иллюстрация 4.1. Окно создания нового запроса



Первое диалоговое окно Мастера простых запросов



Иллюстрация 4.2. Первое диалоговое окно Мастера простых запросов

Нажать кнопку Далее (Next).
Следующее диалоговое окно будет последним. В нем нужно ввести имя создаваемого запроса (рис. 4.3) в поле Задайте имя запроса (What title do you want to your query?) и выбрать дальнейшие действия: Открыть запрос для просмотра данных (Open the query to view information) или Изменить макет запроса (Modify the query design).
При необходимости можно установить флажок Вывести справку по работе с запросом? (Display Help on working with the query) для вывода справочной информации по работе с запросами.
Нажать на кнопку Готово (Finish).


Окно Мастера простых запросов на втором шаге



Иллюстрация 4.3. Окно Мастера простых запросов на втором шаге

По окончании работы Мастера простых запросов в зависимости от выбора способа дальнейшей работы с запросом откроется или окно запроса в режиме просмотра (рис. 4.4), или окно Конструктора запросов, в котором можно модифицировать запрос. В качестве примера построения простого запроса с помощью Мастера простых запросов рассматривается создание запроса, содержащего имена, фамилии, адреса и телефоны сотрудников фирмы "Борей" (Northwind) (в качестве исходных данных взяты таблицы демонстрационной базы данных "Борей"). Этот запрос строится на основе таблицы "Сотрудники" (Employees). На первом шаге Мастера простых запросов была выбрана исходная таблица "Сотрудники" (Employees) в поле со списком Таблицы и запросы (Tables/Queries) и в список Выбранные поля (Selected Fields) были перенесены следующие поля: "Имя" (First Name), "Фамилия" (Last Name), "Адрес" (Address), "Домашний телефон" (Home Phone). На втором шаге Мастера простых запросов в поле названия запроса было введено имя "Сотрудники Запрос" и выбран способ дальнейшего отображения запроса: просмотр информации. Результатом работы Мастера запросов стал запрос "Сотрудники Запрос", изображенный на рис. 4.4.

Иллюстрация 4.4. Окно запроса в режиме просмотра



Запрос "Сотрудники Запрос" в режиме Конструктора запросов



Иллюстрация 4.5. Запрос "Сотрудники Запрос" в режиме Конструктора запросов



Окно Добавление таблицы Конструктора запросов



Иллюстрация 4.7. Окно Добавление таблицы Конструктора запросов

После добавления всех необходимых таблиц нажать кнопку Закрыть (Close) в окне Добавление таблицы (Show Table). Все выбранные таблицы оказываются помещенными на верхней панели окна Конструктора запросов. Если таблицы связаны между собой, т. е. связи присутствуют явно на схеме данных, то эти связи также отображаются (рис. 4.8). Если связи на схеме данных не установлены, то Конструктор запросов автоматически устанавливает связи между таблицами, если они содержат поля, которые имеют одинаковые имена и согласованные типы (см. разд. "Связывание таблиц на схеме данных"гл. 2).


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



Иллюстрация 4.8. Запрос по нескольким связанным таблицам

Внимание

Иногда Конструктор устанавливает лишние связи, основываясь только на именах и типах полей. Это может привести к некорректным результатам запроса, поэтому нужно обязательно проверять, как отображаются связи между таблицами в окне Конструктора запросов, и удалить вручную лишние связи. Для этого выделите лишнюю связь, щелкнув по ней левой кнопкой мыши, и нажмите клавишу <Delete>. Работа со связями в окне Конструктора запросов выполняется точно так же, как в окне Схема данных (Relationship) (см. разд. "Связывание таблиц на схеме данных" гл. 2).

Затем нужно указать, какие поля из базовых таблиц будут отображаться в запросе. Включать в запрос можно поля из любой таблицы. Способов включения полей в запрос существует несколько:
Выделите нужное поле в таблице-источнике (можно выделить несколько полей, пользуясь клавишами <Shift> и <Ctrl>). Если требуется включить в запрос все поля базовой таблицы, выделите поле, обозначенное звездочкой (*). Дважды щелкните левой кнопкой мыши на выделенном поле. При этом в бланке запроса появится столбец, соответствующий выбранному полю. Затем аналогично добавьте другие поля. Столбцы в бланке запроса при этом заполняются слева направо.
Можно подвести указатель мыши к выделенному полю (одному из выделенных полей), нажать на левую кнопку мыши и перетащить поле (поля) в нужное место бланка запроса (указатель мыши при этом должен принять вид трех прямоугольников). Последний способ позволяет помещать поля в любое место бланка запроса.
И наконец, вместо перетаскивания полей в бланк запроса из таблицы можно просто использовать раскрывающийся список полей в строке Поле (Field) бланка запроса
Примеры разных способов включения полей в результат запроса в режиме Конструктора запросов приведены на рис. 4.9—4.11.



Пример отбора полей для нового запроса в режиме Конструктора



Иллюстрация 4.9. Пример отбора полей для нового запроса в режиме Конструктора



Вид окна Конструктора при выборе всех полей из таблицы



Иллюстрация 4.10. Вид окна Конструктора при выборе всех полей из таблицы

Чтобы добавить в запрос еще одну таблицу или другой запрос, необходимо:

Нажать кнопку Добавить таблицу (Show Table) на панели инструментов или выполнить команду меню Запрос, Добавить таблицу (Query, Show Table).


Выбор полей запроса из раскрывающегося списка



Иллюстрация 4.11. Выбор полей запроса из раскрывающегося списка

В окне Добавление таблицы (Show Table) выбрать вкладку, содержащую требуемые объекты.
Замечание

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

Выбрать имя объекта, добавляемого в запрос.
Нажать кнопку Добавить (Add), а затем кнопку Закрыть (Close).
Замечание

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

Чтобы удалить базовую таблицу из запроса, необходимо выделить ее, щелкнув на любом месте в списке ее полей, и нажать клавишу <Delete>.

Чтобы удалить поле из запроса, выделите нужный столбец в бланке запроса, а затем нажмите клавишу <Delete>. Чтобы выделить столбец, пользуйтесь областью выделения столбцов — узкой серой полоской над столбцами в бланке запроса. Когда вы подводите указатель мыши к этой области, он преобразуется в жирную стрелку, направленную вниз.

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

В режиме Конструктора запросов можно изменять имена полей запроса. Чтобы переименовать поле, необходимо установить курсор в бланке запроса перед первой буквой его имени и ввести новое имя и символ двоеточия. Пример запроса с измененными именами полей приведен на рис. 4.12. Изменение имени поля в бланке запроса приводит к изменению заголовка столбца при просмотре запроса в режиме таблицы. Кроме того, если на основе запроса создать новый объект, например форму или отчет, в новом объекте будет использовано новое имя поля. Имя поля базовой таблицы при этом не изменяется. Это имя также не изменяется в тех формах и отчетах, которые были созданы на основе запроса до изменения имени поля. Имена полей в запросах должны соответствовать соглашениям об именах Microsoft Access.



Изменение названия поля в запросе



Иллюстрация 4.12. Изменение названия поля в запросе

Совет

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

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

Замечание

Изменение ширины столбцов в окне Конструктора запросов или в окне расширенного фильтра не влияет на ширину столбцов запроса в режиме Таблицы или объекта, для которого применен фильтр.

В строке Условие отбора (Criteria) и в строке или (Or) указываются условия отбора записей. Такими условиями могут быть логические выражения. Например, (>30), (='Иванов'), (=10) и т. п. (0 создании выражений в условиях запроса см. разд. "Использование выражений" ниже в этой главе.)

Условия, находящиеся в одной строке, но в разных столбцах бланка, объединяются по логическому оператору And (И). Если нужно объединить условия отбора по логическому оператору Or (ИЛИ), разместите эти условия в разных строках бланка запроса. Пример использования нескольких условий отбора приведен на рис. 4.13.



Задание критериев отбора записей в запросе



Иллюстрация 4.13. Задание критериев отбора записей в запросе

Если критерий отбора очень сложный, можно вставлять дополнительные строки условий. Для этого необходимо:

Выделить строку, которая должна оказаться под вставляемой строкой. Для этого нужно подвести указатель мыши к левой границе строки (он должен превратиться в жирную стрелку, указывающую вправо) и щелкнуть левой кнопкой мыши.
Выполнить команду Вставка, Строки (Insert, Rows) или нажать клавишу <Ins>. Новая пустая строка вставляется над выбранной. В нее можно вносить условия отбора.
Для удаления строки условий отбора:

Щелкните левой кнопкой мыши в любом месте строки.
Выполните команду Правка, Удалить строки (Edit, Delete Rows).
Чтобы установить порядок сортировки записей в запросе, используйте строку Сортировка (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. Вычисляемое поле в запросе

Совет

Если выражение длинное, его неудобно писать в строке Поле (Field). Нажмите комбинацию клавиш <Shift>+<F2>. Появится диалоговое окно Область ввода (Zoom) (рис. 4.19), в котором вводить выражение удобнее. Можно также использовать Построитель выражений, вызвав его щелчком по кнопке Построить (Build) на панели инструментов. (Подробнее об использовании Построителя выражений и о правилах составления выражений в Access см. последний раздел данной главы.)



Диалоговое окно Область ввода



Иллюстрация 4.19. Диалоговое окно Область ввода

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



Окно Конструктора запроса с изображением соединения полей таблиц



Иллюстрация 4.20. Окно Конструктора запроса с изображением соединения полей таблиц

Выберите поле "Марка" (ProductName) в таблице "Товары" (Products) и перетащите его в строку Поле (Field) первого столбца бланка запроса.
Выберите поле "Название" (CompanyName) в таблице "Поставщики" (Suppliers) и перетащите в строку Поле (Field) второго столбца. Также перетащите поля "ЕдиницаИзмерения" (QuantityPerUnit) и "Цена" (UnitPrice) таблицы "Товары" (Products) в строку Поле (Field) третьего и четвертого столбца бланка запроса, соответственно (рис. 4.21).


Бланк запроса с заполненными полями в режиме Конструктора



Иллюстрация 4.21. Бланк запроса с заполненными полями в режиме Конструктора

Нажмите кнопку Запуск (Run) либо выберите Режим таблицы (Query View) в списке кнопки Вид (View) на панели инструментов для отображения результата запроса (рис. 4.22). Обратите внимание на то, что заголовками полей в созданном наборе записей являются подписи полей таблицы (включающие пробелы), а не их имена, в которых пробелы обычно не используются.



Результирующее множество запроса



Иллюстрация 4.22. Результирующее множество запроса

После выполнения запроса Microsoft Access выводит на экран результирующее множество, записи которого упорядочены по значению первичного ключа (так же, как и при просмотре таблицы). Чтобы изменить порядок сортировки, например, упорядочить записи по убывающей цене товара:

Переключитесь в режим Конструктора запроса.
Установите курсор в поле Сортировка (Sort) столбца "Цена", а затем нажмите клавишу <F4> или стрелку справа для вывода содержимого списка.
Выберите элемент по убыванию (Descending).
Нажмите кнопку Запуск (Run) для вывода нового результирующего множества запроса (рис. 4.23).
Сохраните запрос, дав ему название: "Отсортированный список товаров".


Результат запроса с сортировкой по убывающей цене товара



Иллюстрация 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. Соединение косвенно связанных записей



Эквивалентная запросу инструкция SQL



Иллюстрация 4.25. Эквивалентная запросу инструкция SQL

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



Диалоговое окно Параметры объединения



Иллюстрация 4.26 . Диалоговое окно Параметры объединения

Замечание

Традиционно термин JOIN, который применяется к операции соединения таблиц, переводился как "объединение", хотя на самом деле операция объединения таблиц — это UNION, которая позволяет объединить все записи из одной таблицы и все записи из другой, а потом удалить дублирующиеся записи. Тем не менее, при локализации диалоговых окон Access по-прежнему, как мы видим, используется термин "объединение" по отношению к операции JOIN.

Задайте левое внешнее соединение, выбрав значение "2". Нажмите кнопку ОК для закрытия диалогового окна. При этом на конце линии соединения появится стрелка в сторону таблицы "многие", что указывает на левое внешнее соединение (рис. 4.27).


Отображение левого внешнего объединения в окне Конструктора запросов



Иллюстрация 4.27. Отображение левого внешнего объединения в окне Конструктора запросов

Установите сортировку по возрастанию для поля "КодЗаказа" (Orderld) во втором столбце бланка запроса.
Нажмите на панели инструментов кнопку Запуск (Run) для вывода результирующего множества запроса с левым внешним -соединением (рис. 4.28). Количество записей стало равно 832, и первые две записи содержат пустое поле "КодЗаказа".


Результат выполнения запроса с левым внешним соединением



Иллюстрация 4.28. Результат выполнения запроса с левым внешним соединением

Сохраните запрос под именем "Холодные клиенты". Он нам потребуется в дальнейшем. Запросы с правым внешним соединением используются гораздо реже, т. к., если при составлении схемы данных для связи между таблицами установлена ссылочная целостность (см. раздел "Обеспечение целостности данных" гл. 2), записей в таблице "многие" (подчиненной), не связанных с записями в таблице "один" (главной), просто не может не быть.

Запрос с рекурсивным соединением



Иллюстрация 4.29. Запрос с рекурсивным соединением

При использовании рекурсивных соединений требуется задать вывод только уникальных значений. Дважды щелкните по свободной области верхней части окна запроса, а затем в диалоговом окне Свойства запроса (Query Properties) установите значение Да (Yes) для свойства Уникальные значения (Unique Values) (рис. 4.30). Закройте окно Свойства запроса (Query Properties).
Установите сортировку по убыванию для поля "ДатаИсполнения" (ShippedDate), чтобы последние обслуженные заказы были отображены первыми.
Нажмите кнопку Запуск (Run) и вы должны получить таблицу заказов, в которых дата размещения и выполнения заказа является одинаковой.


Диалоговое окно Свойства запроса



Иллюстрация 4.30. Диалоговое окно Свойства запроса

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



Диалоговое окно Параметры запроса



Иллюстрация 4.31. Диалоговое окно Параметры запроса

В столбец Параметр (Parameter) нужно ввести название параметра точно так, как он определен в бланке запроса (легче всего это сделать путем копирования через буфер обмена), только можно не вводить квадратные скобки. В столбце Тип данных (Data Type) выберите из раскрывающегося списка необходимый тип данных. Нажмите кнопку ОК.
Нажмите кнопку Запуск (Run) на панели инструментов, чтобы выполнить запрос. При выполнении запроса появляется диалоговое окно Введите значение параметра (Input Parameter Value) (рис. 4.32), в которое нужно ввести значение, например Tokyo Traders. Результат выполнения запроса представлен на рис. 4.33. В него попадают только те товары, которые поставляются данным поставщиком.
В одном запросе можно ввести несколько параметров. При выполнении такого запроса для каждого из параметров будут поочередно выводиться диалоговые окна Введите значение параметра в том порядке, в котором параметры перечислены в бланке запроса.



Диалоговое окно Введите значение параметра



Иллюстрация 4.32. Диалоговое окно Введите значение параметра



Результат выполнения запроса с параметром



Иллюстрация 4.33. Результат выполнения запроса с параметром

Совет

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



Сохранение фильтра в виде запроса



Иллюстрация 4.34. Сохранение фильтра в виде запроса

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

Можно, снова открыв таблицу "Клиенты" (Customers), установить сохраненный фильтр. Для этого нужно сначала открыть окно определения фильтра, нажав кнопку Изменить фильтр (Filter by form). Затем нажать кнопку Загрузить из запроса (Load from Query) на панели инструментов или выполнить команду Файл, Загрузить из запроса (File, Load from Query). При этом появится диалоговое окно Применяемый фильтр (Applicable Filter) (рис. 4.35), в котором требуется выделить в списке необходимый фильтр и нажать кнопку ОК или просто дважды щелкнуть левой кнопкой мыши по названию фильтра. Чтобы применить фильтр, нужно нажать кнопку Применение фильтра (Apply filter) на панели инструментов.


Диалоговое окно Применяемый фильтр



Иллюстрация 4.35. Диалоговое окно Применяемый фильтр

Замечание

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

Выполнить запрос "Менеджеры по продажам". Для этого нужно раскрыть список запросов в окне базы данных, найти запрос "Менеджеры по продажам" и открыть его в режиме Таблицы, нажав кнопку Открыть (Open). Вы получите тот же результат, что и в первом случае, когда применяется фильтр к открытой таблице. Когда запрос открыт в режиме Таблицы или применен фильтр к таблице, нажмите кнопку Вид, Конструктор (View, Design view) на панели инструментов. Появится окно Конструктора запроса, в котором отображается запрос, соответствующий фильтру (рис. 4.36).
Обратите внимание, что хотя в режиме Таблицы запрос отображал все столбцы исходной таблицы, в бланке запроса указан только один столбец "Должность" (ContactTitle), который содержит условие отбора, и тот не включен в результат запроса. Чтобы понять, почему так происходит, откройте запрос в режиме SQL. Для этого нужно нажать кнопку Вид, Режим SQL (View, SQL View). Появится диалоговое окно, содержащее инструкцию языка SQL, которая и обрабатывается при выполнении запроса (рис. 4.37). Эта инструкция имеет вид:

SELECT *

FROM Клиенты

WHERE (((Клиенты.Должность)= "Менеджер по продажам"));

Значок * означает, что выбираются все поля из таблицы "Клиенты".



Запрос "Менеджеры по продажам" в режиме Конструктора



Иллюстрация 4.36. Запрос "Менеджеры по продажам" в режиме Конструктора



Запрос "Менеджеры по продажам" в режиме SQL



Иллюстрация 4.37. Запрос "Менеджеры по продажам" в режиме SQL

В виде запроса можно также сохранить так называемый расширенный фильтр. Расширенный фильтр используется в том случае, если требуется задать сложные критерии отбора и сортировки записей. Чтобы создать расширенный фильтр для открытой таблицы, необходимо выполнить команду Записи, Фильтр, Расширенный фильтр (Records, Filter, Advanced Filter/Sort). При этом появляется окно расширенного фильтра, которое очень напоминает окно Конструктора запроса. На рис. 4.38 представлено окно расширенного фильтра для таблицы "Заказы" (Orders). Чтобы создать такой фильтр, мы выполнили следующие действия:

Открыли в режиме Таблицы таблицу "Заказы" (Orders).
Выделили в поле Сотрудник значение "Воронова, Дарья" и нажали кнопку Фильтр по выделенному (Filter by Selection) на панели инструментов, отфильтровав таким образом заказы, обработанные конкретным сотрудником.
Выполнили команду Записи, Фильтр, Расширенный фильтр (Records, Filter, Advanced Filter/Sort).
Перенесли в бланк фильтра два поля: ДатаРазмещения (OrderedDate) и НазваниеПолучателя (ShipName).
Для поля ДатаРазмещения (OrderedDate) указали критерий выборки Between #01.03.98# And 131.06. 981, означающий, что отбираться будут только заказы, поступившие во втором квартале 1998 года.
Определили порядок сортировки записей таким образом, что сначала будут сортироваться заказы по дате размещения, а в пределах одной даты — по наименованиям клиентов (в алфавитном порядке).


Окно расширенного фильтра



Иллюстрация 4.38. Окно расширенного фильтра

Окно расширенного фильтра действительно очень похоже на окно Конструктора запросов, однако панель инструментов очень сильно отличается от панели инструментов Конструктора запросов. Например, нельзя добавить еще одну таблицу (расширенный фильтр строится только для одной таблицы — в данном примере вторая таблица отображает поле подстановки) или выполнить группировку записей. На панели инструментов есть только две важные кнопки: Применение фильтра (Apply filter) и Сохранить как запрос (Save as query). В бланке фильтра отсутствует строка, содержащая флажки включения поля в запрос. Это означает, что фильтр не влияет на состав столбцов в результирующей таблице — всегда отображаются все столбцы, фильтруются только записи. Однако критерии отбора записей могут быть установлены сколь угодно сложные. Задаются они по тем же правилам, что и в запросах.



Диалоговое окно Печать



Иллюстрация 4.39. Диалоговое окно Печать

Настройка параметров печати при печати запроса выполняется так же, как и при печати обычной таблицы (см. разд. "Работа с таблицами"гл. 2).

Совет

Перед выводом запроса на печать полезно посмотреть его в режиме Предварительного просмотра. Для этого нужно нажать кнопку Предварительный просмотр (Print Preview) на панели инструментов. Назначение кнопок панели инструментов и возможные действия с запросом в режиме Предварительного просмотра аналогичны описанным е разд. "Печать таблицы" гл. 2.

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

Выделить требуемый запрос в списке запросов окна базы данных
Щелкнуть правой кнопкой мыши по названию запроса.
Выбрать из контекстного меню команду Печать (Print).

Окно слияния с документами Word



Иллюстрация 4.40. Окно слияния с документами Word

Для того чтобы осуществить экспорт запроса в файл данных составного документа Microsoft Word, необходимо:

В окне базы данных выбрать имя экспортируемого запроса, а затем выполнить команду Экспорт (Export) из меню Файл (File).
В окне Экспорт объекта (Export Object) выбрать тип файла Слияние с MS Word (Microsoft Word Merge) в поле Тип файла (File Type), а в поле Имя файла (File name) ввести имя файла и нажать кнопку Экпорт (Export).
Microsoft Access автоматически создает файл данных, содержащий имена полей и все данные из таблицы. Пример такого файла, полученного путем экспорта запроса "Список имеющихся товаров", приведен на рис. 4.41.

Чтобы сохранить запрос в файле формата RTF, необходимо:

В окне базы данных выбрать имя сохраняемого запроса. Для того чтобы сохранить выделенный фрагмент объекта в режиме таблицы, открыть запрос и выделить требуемую часть.
Выполнить команду Экспорт (Export) из меню Файл (File).
В поле Тип файла окна Экспорт объекта (Export Object) выбрать тип файла Формат RTF (Rich Text Format), а в поле Имя файла (File name) ввести имя файла и нажать кнопку Экспорт (Export).
Файл в формате RTF, открытый в редакторе Word для запроса "Список имеющихся товаров", приведен на рис. 4.42.



Текстовый файл, полученный путем экспорта запроса



Иллюстрация 4.41. Текстовый файл, полученный путем экспорта запроса



Файл формата RTF, полученный путем экспорта запроса



Иллюстрация 4.42. Файл формата RTF, полученный путем экспорта запроса

Если вы хотите экспортировать запрос в документ Word и сразу увидеть результат операции экспорта, используйте команду меню Сервис, Связи с Office, Публикация в MS Word (Tools, Office Links, Publish It With MS Word). При этом результирующие записи запроса сохраняются в файле формата RTF в папке, в которую установлен Microsoft Access. Word загружается автоматически, и в нем открывается сохраненный файл.

Чтобы проанализировать данные запроса в Microsoft Excel, используйте команду меню Сервис, Связи с Office, Анализ в MS Excel (Tools, Office Links, Analize It With MS Excel). Результаты выбранного запроса при этом будут сохранены в файле Microsoft Excel в папке, в которую установлен Microsoft Access. Microsoft Excel запускается автоматически и открывает этот файл. Пример пересылки данных из запроса MS Access в MS Excel приведен на рис. 4.43.



Экспорт запроса в MS Excel



Иллюстрация 4.43. Экспорт запроса в MS Excel

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

В окне базы данных выбрать требуемый запрос или, открыв его в режиме Таблицы, выделить нужную часть данных.
Выбрать в меню Файл (File) команду Отправить (Send To).
В диалоговом окне Отправка по почте (Send) (рис. 4.44) выбрать формат присоединяемого файла и нажать кнопку ОК.


Диалоговое окно Отправка по почте



Иллюстрация 4.44. Диалоговое окно Отправка по почте

Microsoft Access открывает новое почтовое сообщение и присоединяет к нему объект в указанном формате (рис. 4.45).

Иллюстрация 4.45. Сообщение Outlook с присоединенным файлом в формате RTF



Диалоговое окно Построитель выражений



Иллюстрация 4.46. Диалоговое окно Построитель выражений

Нажмите кнопку ОК для возврата в бланк запроса. В поле, где расположен курсор, Построитель выражений помещает построенное выражение (рис. 4.47).


Бланк запроса с выражением, созданным Построителем выражений



Иллюстрация 4.47. Бланк запроса с выражением, созданным Построителем выражений

Для отображения результатов выполненного запроса нажмите кнопку Запуск (Open) на панели инструментов (рис. 4.48).
При желании изменить условие отбора возвратитесь к режиму Конструктора, выделите ненужное выражение и сотрите его нажатием клавиши <Delete>.


Запрос, созданный в результате добавления условия отбора



Иллюстрация 4.48. Запрос, созданный в результате добавления условия отбора

Повторите шаги со 2 по 7 для заполнения всех условий отбора, которые хотите попробовать. Если вы совершите ошибку в синтаксисе выражений, Access известит о ней сообщением об ошибке. Смелее экспериментируйте!
По завершении экспериментов сохраните ваш запрос с описательным именем.
Как видите, создание выражений является не таким уж сложным делом, особенно с таким помощником, как Построитель выражений.



Использование выражений в запросах


При работе с объектами Access очень широко -используются выражения. Примеры простых выражений приводились ранее, например при вводе условий на значение поля в таблице (см. "Работа с таблицами" гл. 2).

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



Изменение данных в результирующем множестве запроса


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

Является ли запрос обновляемым, можно достаточно легко обнаружить визуально: при отображении результатов запроса в конце записей должна быть пустая строка, которая помечена значком звездочки (*) в области выделения записи слева. Тогда в эту строку можно вводить данные, которые создадут новую запись. Если такая строка отсутствует, добавлять записи в запрос и изменять поля запроса нельзя.

Любой запрос имеет два свойства: Уникальные значения (Unique Values) и Уникальные записи (Unique Rows). Свойство Уникальные записи (Unique Row) исключает из результирующего набора дублированные записи, т. е. в результат запроса будут включены записи, которые имеют уникальные значения хотя бы в одном из полей. Свойство Уникальные значения (Unique Values) требует включения в результирующий набор только тех записей, которые имеют уникальные значения во всех полях. Значения этих свойств не могут одновременно быть равными Да (Yes), хотя оба могут иметь значения Нет (No). Значения этих свойств могут устанавливаться в окне свойств запроса. Большинство запросов, свойство Уникальные записи (Unique Row) которых имеет значение Да (Yes), могут использоваться для обновления данных. Запросы, свойство Уникальные значения (Unique Values) которых имеет значение Да (Yes), не допускают ни обновления имеющихся в них записей, ни добавления новых.

Вы не сможете добавлять и изменять записи в запросах, если:

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

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

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



Константы



Константы

В этом разделе описываются константы в их явном представлении. Кроме явного представления константы могут быть именованными. Именованные константы создаются пользователем и используются в программах на Visual Basic для приложений (VBA). Кроме того, Access имеет много встроенных констант, имена которых рассматриваются как зарезервированные слова и не могут использоваться для других целей.

Access различает три вида констант: числовые, строковые и константы даты и времени.

Числовыми константами называются последовательности цифр, и, при необходимости, символы знака числа (+) и (-), символ десятичной точки (.) и, для записи числа в экспоненциальной нотации, символы порядка (Е) или (е). Для положительного числа знак (+) необязателен.

Пример записи числовых констант: 12345; -12.345; -6.76Е-23.

Строковыми или текстовыми константами называются любые символы, возвращаемые функцией Chr$ (), и их комбинации. Функция Chr$ (} возвращает символ в кодировке таблицей кодов ANSI, которой пользуется Windows. Кроме печатаемых символов, в которые входят буквы, цифры, знаки пунктуации и другие специальные символы клавиатуры, например "@", "~" и т. п., результатом функции могут быть и управляющие символы, такие как символ табуляции <ТаЬ>, возврат каретки и перевод строки, аналогичный по результату нажатию клавиши <Enter> и др. Печатаемые символы должны быть заключены в двойные прямые кавычки. Часто, например при вводе строковых констант в ячейки таблиц или бланки запросов, Access сам добавляет кавычки, в иных случаях это придется сделать вручную.

Примером сложной строковой константы может служить выражение:

Chr$(9) & "Отступ" & Chr${10)& Chr$(13)& "Новая строка"

Здесь Chr$ (9) — символ табуляции <Tab>; Chr$ (10), символ возврата каретки; Chr$(13), символ перевода строки. Все подстроки объединены с помощью оператора конкатенации.

Константы даты/времени в Access выделяются символами #. Как и в случае остальных констант, если программа распознает ввод в бланк запроса даты или времени в стандартном формате Access, эти символы будут добавлены автоматически.

Пример констант даты и времени: #26/04/75#, #22-Маг-74#, #10:35:30#.



Логические операторы Логические...



Логические операторы

Логические (булевы) операторы используются для объединения результатов двух или более выражений сравнения в единое целое:

And — конъюнкции (логического И);
Or — дизъюнкции (логического ИЛИ);
Not — логического отрицания;
Хог — исключающего ИЛИ;
Eqv — логической эквивалентности;
Imp — логической импликации.
Они могут состоять только из выражений, возвращающих логические значения True, False или Null. В противном случае выполняется побитовое сравнение. Логические операторы всегда требуют двух операндов, за исключением Not — логического эквивалента унарного минуса.

В табл. 4.4—4.6 приведены результаты логических операторов Access в зависимости от значения операндов.



Операторы идентификации



Операторы идентификации

Операторы идентификации применяются в качестве разделителей в ссылках на объекты (оператор "!"), их методы или свойства (оператор "."):

КлассОбъекта!ИмяОбъекта

КлассОбъекта!ИмяОбъекта.Свойство

КлассОбъекта!ИмяОбъекта.Метод()

ИмяОбъекта.Свойство

ИмяОбъекта.Метод().

Эти операторы позволяют объединять имена объектов и классов объектов для отбора специфических объектов или их свойств, различать имена объектов и их свойств, идентифицировать определенные поля в таблицах.

Например:

Forms!Категории, Tables ! Категории — идентификация формы и таблицы с одинаковыми именами;
MyTextbox.Caption = "Будьте внимательны!" — здесь MyTextbox — объект управления, a Caption — свойство;
Заказы! [Код клиента] — определяет поле "Код клиента" (CustomerlD) в таблице "Заказы" (Customers).
Благодаря наличию операторов идентификации можно присваивать полям разных объектов одни и те же имена (поэтому, например, свойство Caption есть у большинства объектов).



Операторы присваивания и сравнения



Операторы присваивания и сравнения

Обычно в качестве оператора присваивания значения объекту, переменной или константе используется знак равенства (=). Например, выражение =Now() может присваивать полю таблицы значение по умолчанию, и тогда знак равенства действует как оператор присваивания. С другой сторону, знак = представляет собой оператор сравнения, определяющий, равны ли два операнда.

Оператор сравнения соотносит значения двух операндов и возвращает логические значения (True или False), соответствующие результату сравнения. Основное назначение операторов сравнения — создание условий на значение, установление критериев выборки записей в запросах, определение действий макросов и контроль выполнения программ в VBA. В табл. 4.3 приведен список операторов сравнения Access.



Операторы слияния строковых значений (конкатенации)



Операторы слияния строковых значений (конкатенации)

Стандартный значок оператора конкатенации SQL, амперсант (&), является более предпочтительным, чем значок плюса (+), хотя оба они приводят к одинаковому результату: объединению двух текстовых значений в единую строку символов. Применение значка плюс (+) двусмысленно, его основное назначение — сложение двух числовых операндов.

Пример: слияние "Visual" & "Basic" дает "Visual Basic". Обратите внимание на дополнительный пробел в первом слове, без него результат выглядел бы несколько иначе: "VisualBasic".



Операторы сравнения с образцом



Операторы сравнения с образцом

Остальные операторы Access (табл. 4.7) упрощают создание выражений для выборки записей в запросах и относятся к операторам сравнения с образцом. Эти операторы возвращают True или False, в зависимости от соответствия значения в поле выбранной спецификации оператора. Наличие этих операторов в условиях на значение позволяет либо включать запись в запрос, если логическое значение, возвращаемое выражением, равно True, либо отвергать, если это значение — False.



Отбор и сортировка записей с помощью запросов


Одним из семи стандартных объектов Microsoft Access является запрос. Запросы используются для просмотра, анализа и изменения данных в одной или нескольких таблицах. Например, можно использовать запрос для отображения данных из одной или нескольких таблиц и отсортировать их в определенном порядке, выполнить вычисления над группой записей, осуществить выборку из таблицы по определенным условиям. Запросы могут служить источником данных для форм и отчетов Microsoft Access. Сам запрос не содержит данных, но позволяет выбирать данные из таблиц и выполнять над ними ряд операций. В Microsoft Access существует несколько видов запросов: запросы к серверу, которые используются для выборки данных с сервера; запросы на автоподстановку, автоматически заполняющие поля для новой записи; запросы на выборку, выполняющие выборку данных из таблиц; запросы на изменение, которые дают возможность модифицировать данные в таблицах (в том числе удалять, обновлять и добавлять записи); запросы на создание таблицы, создающие новую таблицу на основе данных одной или нескольких существующих таблиц, а также другие типы запросов. В данной главе основное внимание уделяется запросам на выборку, как одному из наиболее часто применяемых типов запросов. Ниже рассматриваются следующие вопросы:

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



Печать результатов запроса


Печать результатов запроса

Результаты запроса можно не только посмотреть на экране, но и напечатать. Сделать это можно несколькими способами:

Открыть запрос в режиме Таблицы и нажать кнопку Печать (Print) на панели инструментов. При этом таблица выводится на принтер, установленный по умолчанию, и используются параметры печати, заданные по умолчанию.
Открыть запрос в режиме Таблицы и выполнить команду Файл, Печать (File, Print). В этом случае перед печатью таблицы на экран выводится стандартное окно Печать (Print) (рис. 4.39), в котором можно изменить параметры печати, заданные по умолчанию. Например, можно выделить в результирующей таблице только некоторые записи, а затем в диалоговом окне Печать (Print) установить переключатель выделенные записи (Selected Record(s)). Тогда будут напечатаны только выделенные записи.


Передача результатов запроса в другие приложения


В Microsoft Access имеются возможности быстрой передачи результатов запросов в другие приложения Microsoft Office. Рассмотрим эти возможности.

Существуют четыре способа использования данных Microsoft Access в Microsoft Word.

При работе с Microsoft Word версии 7.0/95 или более поздней можно с помощью Мастера по созданию составных документов Microsoft Word создавать документы Word, связанные с данными Microsoft Access. После установления связи документ может быть в любое время открыт в Microsoft Word и использован для печати стандартных писем или почтовых наклеек, в которых используются текущие данные из Microsoft Access.
При работе с любой версией Microsoft Word допускается экспорт данных из Microsoft Access в файл данных составного документа, который применяется при создании составных документов Word.
Допускается сохранение данных в файле формата RTF. При этом сохраняются такие атрибуты форматирования, как шрифты и стили. Файл RTF может быть открыт в Microsoft Word, в других текстовых процессорах на платформе Windows или в издательских программах.
Допускается сохранение объекта в режиме Таблицы, формы или отчета в файле формата RTF с автоматической загрузкой его в Microsoft Word. При этом Microsoft Word открывается и отображается окно с экспортированным документом.
Чтобы создать составной документ Microsoft Word с помощью мастера, необходимо:

В окне базы данных выделить имя экспортируемого запроса, выбрать в меню Сервис (Tools) команду Связи с Office (Office Links) и подкоманду Слияние с MS Word (Merge It with MS Word).
В окне Слияние с документами Microsoft Word (Microsoft Word Mail Merge Wizard) установить один из двух переключателей: Установить связь с готовым документом Microsoft Word (Link your data with existing MS Word document) или Создать новый документ и установить связь с ним (Create new document and then link data to it), а затем нажать кнопку OK (рис. 4.40).
В первом случае необходимо выбрать требуемый файл в окне открытия файла и нажать кнопку Открыть (Open).
Откроется пустой документ Word, и отобразится панель инструментов Слияние (Mail Merge). Чтобы вставить в документ нужные поля, используйте кнопку Добавить поле слияния (Insert Merge Field) на этой панели.



Рекурсивное соединение



Рекурсивное соединение

В качестве примера рекурсивного соединения рассмотрим запрос к базе данных "Борей" (Northwind), в котором выводятся заказы клиентов, принятые и выполненные в один день.

Для создания такого запроса мы будем использовать таблицу "Заказы" (Orders):

Создайте новый запрос и добавьте в него таблицу "Заказы".
Добавьте в запрос копию таблицы, повторно нажав кнопку Добавить (Show Table). Access присваивает копии имя "Заказы_1". Закройте диалоговое окно Добавление таблицы (Show Table).
Перетащите поле "ДатаРазмещения" (OrderedDate) исходной таблицы "Заказы" на поле "ДатаИсполнения" (ShippedDate) таблицы "Заказы_1". Между таблицами возникает соединение (рис. 4.29).
Перетащите поля "КодЗаказа" (Orderld), "КодКлиента" (Customerld) и "ДатаРазмещения" (OrderedDate) таблицы "Заказы" в первые три столбца бланка запроса соответственно.


Создание и изменение запроса с помощью Конструктора запросов


Для изменения уже существующих запросов и для создания новых запросов используется Конструктор запросов. Для того чтобы открыть запрос в режиме Конструктора, выделите в списке один из существующих запросов, например только что созданный запрос "Сотрудники Запрос", и нажмите кнопку Конструктор (Design) на панели инструментов окна База данных (Database).

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

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

В области панелей инструментов Access отображается панель инструментов Конструктор запросов (Queries Design). Эта панель представлена на рис. 4.6, а в табл. 4.1 приведено описание кнопок этой панели инструментов и соответствующие им команды меню.



Создание простого запроса с помощью Мастера запросов



Создание простого запроса с помощью Мастера запросов

Наиболее просто создается запрос при помощи Мастера запросов. Чтобы создать простой запрос с помощью Мастера запросов, необходимо:

В окне базы данных на панели объектов выбрать ярлык Запросы (Queries).
В списке запросов дважды щелкнуть левой кнопкой мыши на ярлыке Создание запроса с помощью мастера (Create query by using wizard) или нажать на кнопку Создать (New) в окне базы данных и в появившемся диалоговом окне Новый запрос (New Query) выбрать Простой запрос (Simple Query Wizard) и нажать на кнопку ОК (рис. 4.1).
В появившемся окне Создание простых запросов (Simple Query Wizard) (рис. 4.2) в поле со списком Таблицы и запросы (Tables/Queries) выбрать таблицу или запрос, которые будут служить источником данных для создаваемого запроса.
С помощью стрелок вправо и влево переместить из списка Доступные поля (Available Fields) в список Выбранные поля (Selected Fields) те поля, которые необходимы в конструируемом запросе. При этом порядок полей в запросе будет соответствовать порядку полей в списке Выбранные поля (Selected Fields). Если нужно включить в запрос все поля, можно воспользоваться кнопкой с двумя стрелками вправо.


Создание вычисляемых полей в запросах


Создание запросов интересно не только тем, что вы можете в виде одной таблицы представить данные из нескольких связанных таблиц и отобрать нужные записи из этих таблиц. Вы можете создавать столбцы в запросе, которые являются результатом вычислений над значениями других столбцов. Такие столбцы называются вычисляемыми. Это существенно расширяет возможности запросов. Простейшим примером вычисляемого поля в запросе может быть поле, которое объединяет имя и фамилию человека. На рис. 4.18 показан пример такого поля в запросе, созданном на базе таблиц "Сотрудники" (Employees) и "Заказы" (Orders).

Чтобы создать вычисляемое поле, нужно ввести выражение, которое вычисляет требуемое значение, в строку Поле (Field) свободного столбца бланка запроса. В данном примере это выражение представляет собой конкатенацию полей, содержащих имя и фамилию сотрудника, с пробелом между ними. В этом выражении мы используем ссылки на поля таблицы, которые в выражении заключаются в квадратные скобки. Перед выражением нужно написать имя поля: ФИО и отделить его двоеточием от выражения.



Создание выражений с помощью Построителя выражений



Создание выражений с помощью Построителя выражений

Ввод выражений возможен в. среде Access не только вручную, но и с помощью удобного инструмента, называемого Построитель выражений (Expression Builder).

Построитель выражений (Expression Builder) вызывается всякий раз, когда в поле свойства объекта Access, например в ячейке бланка Конструктора запросов, вы щелкаете кнопку Построителя (кнопка с тремя точками) или нажимаете кнопку Построить (Build) на панели инструментов.

Для демонстрации работы Построителя выражений воспользуемся демонстрационной базой "Борей" (Northwind). После создания и проверки запроса можно применить критерий отбора, чтобы ограничить количество записей в результирующем множестве запроса:

Выберите запрос "Счета" (Invoices) и, нажав кнопку Конструктор панели инструментов в окне базы данных, перейдите в режим Конструктора запроса.
Поместите курсор на строку Условие отбора (Criteria) поля, для которого вы хотите установить критерий выборки, скажем, поля "СтранаПолучателя" (Ship Country).
Нажмите кнопку Построителя выражений Построить (Build) на панели инструментов Access для вывода окна Построитель выражений (Expression Builder). Другой способ — нажмите правую кнопку мыши в строке Условие отбора (Criteria) и выберите из меню команду Построить (Build).
В поле выражений вверху окна Построителя выражений введите требуемое выражение. На рис. 4.46 показан пример выражения Like "Ф*", которое работает в строке Условие отбора (Criteria) поля "СтранаПолучателя" (Ship Country). Для ускорения ввода Like можно воспользоваться кнопкой Like под окном ввода выражений.


Создание запроса из фильтра


Еще одним способом создания запроса является сохранение фильтра в виде запроса. Выше мы говорили, что фильтр используется при просмотре таблицы для отбора нужных записей. Если вы создали достаточно сложный фильтр в- окне Фильтр (Filter by Form) и знаете, что его придется использовать и в дальнейшем, можно сохранить его в базе данных в виде запроса. Для этого достаточно нажать кнопку Сохранить как запрос (Save as query) на панели инструментов при открытом окне Фильтр (Filter by Form).

Откройте в режиме Таблицы таблицу "Клиенты" (Customers).
Нажмите кнопку Изменить фильтр (Filter by form) на панели инструментов. Появится окно, в котором можно задать фильтр.
Выберите из списка в поле Должность (ContactTitle) значение Менеджер по продажам (Sales Manager).
Проверьте, как работает фильтр, нажав кнопку Применение фильтра (Apply filter) на панели инструментов. Убедившись, что фильтр работает правильно, вы можете сохранить его для дальнейшего использования.
Нажмите кнопку Изменить фильтр (Filter by form) на панели инструментов еще раз, чтобы вернуться в окно определения фильтра.
Нажмите кнопку Сохранить как запрос (File, Save As Query) на панели инструментов или выполните команду Файл, Сохранить как запрос (File, Save As Query). Появится диалоговое окно (рис. 4.34), в котором необходимо указать имя запроса: Менеджеры по продажам и нажать кнопку ОК.
Снимите фильтр, нажав кнопку Удалить фильтр (Remove Filter).


Описание кнопок на панели инструментов Конструктор запросов



Таблица 4.1. Описание кнопок на панели инструментов Конструктор запросов

Кнопка

Описание

Команда меню

Вид (View)

Отображение запроса в различных режимах. Чтобы изменить режим отображения запроса, нажмите стрелку справа от кнопки и в появившемся списке выделите нужный элемент. Если просто нажать эту кнопку, запрос будет отображен в режиме Таблицы

Вид, Режим таблицы

(View, Datasheet View)

Сохранить (Save)

Сохранение активного запроса

Файл, Сохранить

(File, Save)

Печать (Print)

Печать результатов запроса без открытия диалогового окна Печать

Нет вЬ

Предварительный просмотр

(Print Preview)

Предварительный просмотр запроса перед печатью

Файл, Предварительный просмотр

(File, Print Preview)

Орфография

(Spelling)

Проверка орфографии в текстовых полях запроса

Сервис, Орфография

(Tools, Spelling)

Кнопка

Описание

Команда меню

Вырезать (Cut)

Удаление выделенных объектов из запроса в буфер обмена Windows

Правка, Вырезать

(Edit, Cut)

Копировать (Сору)

Копирование выделенных объектов запроса в буфер обмена

Правка, Копировать

(Edit, Copy)

Вставить (Paste)

Вставка содержимого буфера обмена в запрос

Правка, Вставить

(Edit, Paste)

Формат по образцу

(Format Painter)

Копирование параметров форматирования из одного выделенного объекта в другой такого же типа

Нет

Отменить (Undo)

Отмена последнего изменения запроса

Правка, Отменить

(Edit, Undo)

Тип запроса (Query Туре)

Изменение типа запроса. Для изменения типа запроса щелкните по стрелке справа от кнопки и выберите из списка нужный тип запроса

Запрос, Выборка

(Query, Select Query)

Запуск (Run)

Выполнение запроса

Запрос, Запуск

(Query, Run)

Отобразить таблицу (Show Table)

Выводится диалоговое окно Добавление таблицы (Show Table)

Запрос, Добавить таблицу (Query, Show Table)

Групповые операции (Totals)

Группировка записей в запросе и расчет итоговых значений

Вид, Групповые операции (View, Totals)

Набор значений

(Top Values)

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

Нет

Свойства

(Properties)

Открытие окон свойств выделенных объектов: запроса или поля запроса

Вид, Свойства

(View, Properties)

Построитель (Build)

Вызов построителя для создания выражения. Кнопка доступна только тогда, когда активизировано свойство запроса или поля запроса, которое допускает ввод выражения, например Условие отбора (Criteria)

Нет

Окно базы данных

(Database Window)

Отображение окна базы данных

Окно, 1 (Window, 1)

Новый объект

(New Object)

Создание нового объекта базы данных. Чтобы выбрать тип создаваемого объекта, нажмите стрелку справа от кнопки

Нет

Справка по Microsoft Access

(Microsoft Access Help)

Вызов помощника и получение справки по Access 2002

Справка, Справка по Microsoft Access

(Help, Microsoft Access Help)

С использованием кнопок панели инструментов вы будете знакомиться по мере изучения работы с запросами, как в данной главе, так и в гл. 8.

А теперь рассмотрим, как создать новый запрос с помощью Конструктора запросов. Для этого необходимо:

В окне базы данных на панели объектов выбрать ярлык Запросы (Queries).
В списке запросов выбрать ярлык Создание запроса в режиме конструктора (Create query in Design view) или нажать кнопку Создать (New), в появившемся окне Новый запрос (New Query) выбрать Конструктор (Design view) и нажать на кнопку ОК.
В окне Добавление таблицы (Show Table) (см. рис. 4.5) выбрать одну или несколько таблиц или запросов для построения нового запроса и нажать кнопку Добавить (Add). Для удобства выбора таблиц и запросов в окне существуют следующие вкладки: Таблицы (Tables), на которой отображается список таблиц; Запросы (Queries), на которой отображается список запросов; Таблицы и запросы (Both), на которой отображается список таблиц и запросов вместе.


Арифметические операторы



Таблица 4.2. Арифметические операторы

Оператор

Пример

Описание

+

[Итог] + [Надбавка]

Складывает два операнда

-

Date () - 7

Считает разность двух операндов

- (унарный)

-12345

Меняет знак операнда

*

[Коробок] * [Цена коробки]

Перемножает два операнда

/

[Количество] / 12.55

Делит один операнд на другой

Оператор

Описание

Пример
\

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

[Коробок] \ 2
Mod [Коробок] Mod 12 Возвращает остаток от деления нацело. Например, 15 Mod 12 равно 3
^ Возводит операнд Основание в степень Показатель ^ [Показатель]
В таблице отсутствует знак равенства (=), поскольку он отнесен к группе операторов присваивания и сравнения.



Операторы сравнения



Таблица 4.3. Операторы сравнения

Оператор

Пример

Результат

Описание

<

1 < 100

True

Меньше

<=

1 <= 1

True

Меньше либо равно

=

1 = 100

False

Равно

>=

100 >= 1

True

Больше либо равно

>

100 > 100

False

Больше

<>

1 <> 100

True

Неравно

Замечание

Если один из операндов имеет значение Null (пустое значение), то любое" сравнение возвращает значение Null (тоже пустое значение).



Зависимость значения логических операторов от значения операндов



Таблица 4.4. Зависимость значения логических операторов от значения операндов


A=True B=False

A=True B=True

A=False B=False

A=False B=True

A And В

False

True

False

False

A Or В

True

True

False

True

Not A

False

False

True

True

А Хог В

True

False

False

True

A Eqv В

False

True

True

False

A Imp В

False

True

True

True

Для всех логических операторов, кроме Imp, значение одного из операндов Null приводит к значению результата Null.



Значения оператора Imp с Null-операндами



Таблица 4.5. Значения оператора Imp с Null-операндами

A=Null B=False

A=Null B=True

A=False B=Null

A=True B=Null

A=Null B=Null

A Imp В

Null

True

True

Null

Null

В случае если сравниваются два выражения и, по крайней мере, одно из них не является константой из множества (True, False, Null), логические операторы приводят к побитовому сравнению выражений-операндов (табл. 4.6).



Значения логических операторов для однобитовых операндов



Таблица 4.6. Значения логических операторов для однобитовых операндов

Значения соответствующего бита результата

битА=1

бит В=0

6итА=1

битВ=1

битА=0

бит В=0

бит А=0

бит В=1

A And В

0

1

0

0

A Or В

1

1

0

1

Not A

0

0

1

1

А Хог В

1

0

0

1

A Eqv В

0

1

1

0

A Imp В

0

1

1

1



Другие операторы, используемые в выражениях Access



Таблица 4.7. Другие операторы, используемые в выражениях Access

Оператор

Пример

Описание

Between

Between (-100) And (100)

Определяет, находится ли числовое значение в определенном диапазоне значений

Is

Is Null Is Not Null

При использовании вместе с Null определяет, является ли значение Null или Not Null

In

In ("Москва", "Киев", "Санкт-Петербург")

Определяет, является ли строковое значение элементом списка значений

Like

Like "Ив*" Like "db??"

Определяет, начинается ли строковое значение с указанных символов (для правильной работы Like нужно добавить символ шаблона "*" или один или несколько символов "?")

Для пользователей, знакомых с шаблонами командной строки DOS, применение знаков (символов шаблона) "*" и "?" в операторах Like не вызовет затруднений. Точно так же, как в DOS, символ "*" замещает любое число знаков, а символ шаблона "?" замещает только один знак, поэтому Like "Ив*" вернет True для значений "Иванов", "Иващенко", "Иволгин". Для "dbl" или "dbl00" значение оператора Like "db??" будет False, но тот же оператор вернет для "dbl0" и "dbXX" значение True. Символы шаблона "*" и "?" могут стоять в любом месте шаблонной строки, . например:

Like "*ms* . ?*" — возвращает True только для значений, содержащих в своем теле подстроку "ms", после которой (может быть сразу, а может быть через несколько символов) следует не менее двух символов, первый из которых точка (.);
Like "?1???*" — возвращает True только для значений, состоящих не менее чем из пяти символов, вторым из которых является "1".

Виды соединений В зависимости...


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

в таблицах имеются поля с одинаковыми именами и согласованными типами, причем одно из полей является ключевым;
соединение было явно задано в окне Схема данных (Relationships).
Замечание

"Согласованные типы" в большинстве случаев означают одинаковые типы. Исключением является поле типа Счетчик, которое может иметь размер Длинное целое или Код репликации и может связываться с числовыми полями соответствующего размера.

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

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

Если необходимо связать данные любым отношением, кроме отношения равенства, используют соединение по отношению или тэта-соединение). Соединение по отношению не отображается в окне Схема данных (Relationships) и не выводится в окне Конструктора запросов.

Для обозначения внутренних соединений в Access используются зарезервированные слова ANSI SQL INNER JOIN, а для указания внешних соединений — слова LEFT JOIN или RIGHT JOIN. Выражение WHERE <поле1>=<поле2> соответствует внутреннему соединению, a WHERE поле1>поле2 — соединению по отношению (одному из таких соединений).

Для связывания данных в одной таблице применяют рекурсивное соединение. Оно создается путем добавления в запрос копии таблицы (в результате чего Access назначает псевдоним для копии) и связывания полей идентичных таблиц.



Внешнее соединение



Внешнее соединение

Внешние соединения бывают левыми или правыми. Запрос, в котором участвуют таблицы с левым внешним соединением (LEFT JOIN или *= в SQL), выводит все записи таблицы "один", в независимости от того, имеются ли соответствующие им записи в таблице "многие". И наоборот, запрос, в котором участвуют таблицы с правым внешним соединением (RIGHT JOIN или =* в SQL), выводит все записи таблицы "многие", в независимости от того, имеются ли соответствующие им записи в таблице "один".

Рассмотрим в качестве примера, как с помощью левого внешнего соединения создать запрос в базе данных "Борей" (Northwind), который обнаруживает клиентов, не сделавших ни одного заказа:

Создайте новый запрос и добавьте в него таблицы "Клиенты" (Customers) и "Заказы" (Orders). Поскольку эти таблицы связаны отношением "один-ко-многим", между ними сразу появляется соединяющая линия.
Выделите и перетащите в бланк запроса поле "Название" (CompanyName) таблицы "Клиенты" и поле "КодЗаказа" (Orderld) таблицы "Заказы".
Выполните запрос и посмотрите, сколько записей будет возвращать запрос: 830.
Вернитесь в режим Конструктора. Щелкните правой кнопкой мыши на линии, соединяющей таблицы, и выберите из контекстного меню команду Параметры объединения (Join Properties). Появится диалоговое окно, представленное на рис. 4.26. В данном окне показаны имена связанных полей в таблицах. При этом таблица на стороне "один" считается левой (независимо от того, как она расположена в окне Конструктора), а таблица на стороне "многие" — правой. Ниже расположены три переключателя:
"1" задает внутреннее соединение;
"2" — левое внешнее соединение;
"3" — правое внешнее соединение.


Внутреннее соединение



Внутреннее соединение

Внутреннее соединение двух таблиц по одному полю в реляционной базе данных строится на основе отношения "один-ко-многим". Примером может служить демонстрационная база данных "Борей" (Northwind), в которой все соединения являются внутренними соединениями по одному полю на основе указанного отношения. В ходе разработки баз данных, в которых предполагается использование запросов на основе внутренних соединений, придерживайтесь следующих правил.

Каждая таблица "один" должна иметь первичный ключ с уникальными.значениями. Отсутствие повторений значений поля или полей первичного ключа в таблице Access устанавливает автоматически.
Отношение "многие-ко-многим" реализуйте на основе промежуточной таблицы, которая связана с каждой из двух таблиц отношением "многие-к-одному". Для обеих связей промежуточная таблица будет находиться со стороны "многие".
Необходимо извлечь повторяющиеся данные в новую таблицу и связать ее с таблицей, из которой эти данные были получены, отношением "многие-к-одному". Основная цель — однозначно определить извлеченные данные. Часто для этого приходится использовать первичный ключ, состоящий из нескольких полей. Для автоматизации работы по нахождению и извлечению повторяющейся информации можно использовать Мастер по анализу таблиц Microsoft Access. Этот мастер запускается при выборе команды меню Сервис, Анализ, Таблица (Tools, Analysis, Table).
В качестве примера использования запроса на основе внутреннего соединения по одному полю в базе данных "Борей" (Northwind) построим отчет с указанием марки товара, его поставщика, единицы измерения товара и его цены:

Если база данных "Борей" открыта, закройте все окна, кроме окна База данных (Database). Если база данных "Борей" не загружена, загрузите ее.
Щелкните по ярлыку Запросы (Queries) на панели объектов окна База данных (Database), чтобы открыть список запросов, а затем нажмите кнопку Создать (New) для создания нового запроса. В появившемся диалоговом окне Новый запрос (New Query) выделите элемент Конструктор (Design View) и нажмите кнопку ОК. Access отображает диалоговое окно Добавление таблицы (Show Table) поверх пустого окна запроса.
Выберите таблицу "Поставщики" (Suppliers) и добавьте ее в запрос. Access покажет список полей таблицы в верхней панели окна запроса.
Добавьте также таблицу "Товары" (Products) и закройте диалоговое окно Добавление таблицы (Show Table). Access добавляет список полей таблицы "Товары" (Products) в окно запроса и изображает соединение полей "КодПоставщика" (SupplierlD) двух таблиц (рис. 4.20). Соединение создается автоматически, т. к. поле "КодПоставщика" является ключевым в таблице "Поставщики" и в таблице "Товары" найдено поле с тем же именем (внешний ключ). Отображаемое отношение является отношением "один-ко-многим".


Выполнение запроса Чтобы посмотреть...


В окне базы данных на панели объектов выбрать ярлык Запросы (Queries).
Выделить нужный запрос в списке запросов и нажать на кнопку Открыть (Open) или дважды щелкнуть левой кнопкой мыши на нужном запросе.
После этого на экране появляется таблица, которая содержит только те записи, которые удовлетворяют критериям отбора, указанным в запросе, и те поля, которые указаны в бланке запроса. Если в запросе указан порядок сортировки записей, они выводятся на экран в соответствующем порядке.

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

Для выполнения запроса из режима Конструктора достаточно просто переключиться в Режим таблицы (Datasheet View) с помощью кнопки Вид (View) на панели инструментов, как мы это уже не раз делали, или с помощью команды Режим таблицы (Datasheet View) из меню Вид (View).

В Access 2002 запрос можно открыть не только в режиме Таблицы. Вы можете выполнить обработку результатов запроса и получить на их основе сводную таблицу или диаграмму, аналогичные тем, которые можно создать на базе таблицы Excel. Это новое удобное средство обработки данных запроса мы рассмотрим подробно в гл. 8.



Выражения в Access



Выражения в Access

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

Константы — характеризуют неизменные значения. Их часто используют для создания значений по умолчанию и для сравнения значений в полях таблиц. Значения констант определяются пользователем при вводе выражения. (Например, 09, страна фирмы изготовителя Швеция.)
Идентификаторы — это имена объектов в Access (например, полей таблиц или запросов), которые при вычислении выражений заменяются их текущими значениями (для определения этой операции обычно используется термин возвращают). Например, идентификатор имени поля [Household Inventory] в выражении возвращает значение поля Household Inventory из текущей выделенной записи. Именованные константы и переменные, применяемые в программах Visual Basic для приложений (VBA), тоже являются идентификаторами. Существует несколько встроенных именованных констант, служащих идентификаторами: True, False, Yes, No И Null.
Замечание

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

Функции возвращают в выражение значение вместо имени функции. В отличие от идентификаторов, большинство функций требуют заключать в скобки свои-аргументы — идентификаторы или значения подвыражений. Например, функция Date (), имеющая пустой список аргументов, возвращает текущую дату.
Операторы — обычные значки арифметических операций (+, -, *, /) и другие символы и аббревиатуры. Большинство из них эквивалентны операторам традиционных языков программирования типа Basic. Некоторые — специфичны для Access или SQL, например Between или Like. Используемые в операции константы, идентификаторы и функции называются операндами.
Для создания выражений в Access существует шесть категорий операторов: арифметические, операторы присваивания, логические операторы, операторы конкатенации, идентификации и сравнения с образцом.

Ниже рассмотрены:

типы операторов;
идентификаторы объектов и функций.

В данной главе мы рассмотрели,



Выводы

В данной главе мы рассмотрели, как можно создавать запросы, которые обеспечивают выборку данных из баз данных Access. Познакомились с применением Мастера запросов и Конструктора запросов при создании и изменении запросов. Научились выполнять запросы, выводить их на печать и передавать результаты запросов в другие приложения, узнали о правилах создания выражений в Access. Для ввода выражений в запросах мы использовалИ'Построитель выражений.
В гл. 8 мы вновь остановимся на применении выражений, в частности на формировании запросов, и научимся создавать запросы, изменяющие данные в таблицах Access и помогающие анализировать эти данные.


Запросы и фильтры


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

Основные отличия запросов и фильтров заключаются в следующем.

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

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

Запросы с параметрами


Запросы с параметрами

Запрос в Access является объектом, который сохраняется в файле базы данных и может многократно повторяться. Все запросы, которые мы демонстрировали до сих пор, содержали конкретные значения дат, названий, имен и т. д. Если требуется повторить такой запрос с другими значениями в условиях отбора, его нужно открыть в режиме Конструктора, изменить условие и выполнить. Чтобы не делать многократно этих операций, можно создать запрос с параметрами. При выполнении такого запроса выдается диалоговое окно Введите значение параметра (Enter Parameter Value), в котором пользователь может ввести конкретное значение и затем получить нужный результат.

Покажем, как создавать запросы с параметрами на примере запроса "Отсортированный список товаров", который мы создавали ранее. Теперь мы с помощью этого запроса попробуем отобрать товары, поставляемые определенным поставщиком. Для этого:

Откройте данный запрос в режиме Конструктора.
Чтобы определить параметр запроса, введите в строку Условие отбора (Criteria) для столбца "Название" (CompanyName) вместо конкретного значения слово или фразу и заключите их в квадратные скобки, например [Поставщик:]. Эта фраза будет выдаваться в виде приглашения в диалоговом окне при выполнении запроса.
Если вы хотите, чтобы Access проверяла данные, вводимые в качестве параметра запроса, нужно указать тип данных для этого параметра. Обычно в этом нет необходимости при работе с текстовыми полями, т.к. по умолчанию параметру присваивается тип данных Текстовый (Text). Если же данные в поле запроса представляют собой даты или числа, рекомендуется тип данных для параметра определять. Для этого щелкните правой кнопкой мыши на свободном поле в верхней части запроса и выберите из контекстного меню команду Параметры (Parameters) или выполните команду меню Запрос, Параметры (Query, Parameters). Появляется диалоговое окно Параметры запроса (Query Parameters), представленное на рис. 4.31.