Арифметические операторы
Арифметические операторы
Арифметические операторы, как следует из названия, выполняют сложение, вычитание, умножение и деление. Арифметические операторы оперируют только с числовыми значениями и должны, за исключением унарного минуса, иметь два числовых операнда.
В табл. 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). Обе они вычисляют стандартное отклонение для заданного множества значений.
Финансовые функции — идентичны своим двойникам в 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>. Чтобы выделить столбец, пользуйтесь областью выделения столбцов — узкой серой полоской над столбцами в бланке запроса. Когда вы подводите указатель мыши к этой области, он преобразуется в жирную стрелку, направленную вниз.
Поля в таблице, являющейся результатом запроса, отображаются в том порядке, в котором они следуют в бланке запроса. Если требуется изменить порядок их следования, переставьте соответствующим образом столбцы в бланке запроса. Делается это стандартным способом, т. е. сначала выделяется нужный столбец или несколько столбцов, а затем они перетаскиваются мышью на новое место. При этом отпускать кнопку мыши нужно тогда, когда указатель мыши окажется перед тем столбцом, который делжен быть справа от вставляемого столбца. После вставки все столбцы, расположенные справа от указателя, сдвигаются вправо. Если вы перемещаете столбцы в конец запроса, то отпускайте кнопку мыши, когда указатель окажется перед первым свободным столбцом.
В режиме Конструктора запросов можно изменять имена полей запроса. Чтобы переименовать поле, необходимо установить курсор в бланке запроса перед первой буквой его имени и ввести новое имя и символ двоеточия. Пример запроса с измененными именами полей приведен на рис. 4.12. Изменение имени поля в бланке запроса приводит к изменению заголовка столбца при просмотре запроса в режиме таблицы. Кроме того, если на основе запроса создать новый объект, например форму или отчет, в новом объекте будет использовано новое имя поля. Имя поля базовой таблицы при этом не изменяется. Это имя также не изменяется в тех формах и отчетах, которые были созданы на основе запроса до изменения имени поля. Имена полей в запросах должны соответствовать соглашениям об именах Microsoft Access.
Изменение названия поля в запросе
Иллюстрация 4.12. Изменение названия поля в запросе
Совет
Чтобы использовать новое имя поля только в заголовках столбцов в режиме таблицы или как подпись полей в формах и отчетах, следует задать для этого поля свойство
Подпись
(Caption), а не переименовывать поле в бланке. (Об установке свойств поля см. разд. "Настройка свойств полей в запросе и свойств самого запроса" гл. 8.)
Замечание
Изменение ширины столбцов в окне Конструктора запросов или в окне расширенного фильтра не влияет на ширину столбцов запроса в режиме Таблицы или объекта, для которого применен фильтр.
Задание критериев отбора записей в запросе
Иллюстрация 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.
Отображение левого внешнего объединения в окне Конструктора запросов
Иллюстрация 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. Диалоговое окно Применяемый фильтр
Замечание
Обратите внимание, что в списке фильтров не присутствуют другие запросы, а присутствует только фильтр, сохраненный как запрос.
Обратите внимание, что хотя в режиме Таблицы запрос отображал все столбцы исходной таблицы, в бланке запроса указан только один столбец "Должность" (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$(9) & "Отступ" & Chr${10)& Chr$(13)& "Новая строка"
Здесь Chr$ (9) — символ табуляции <Tab>; Chr$ (10), символ возврата каретки; Chr$(13), символ перевода строки. Все подстроки объединены с помощью оператора конкатенации.
Пример констант даты и времени: #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.