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

Лучшая стартовая точка для создания запроса — режим Конструктора.Далее перечислены необходимые действия. (Для того чтобы самостоятельно попробовать создать запрос, можно использовать базу данных BoutiqueFudge.accdb, включенную в примеры к данной главе, загружаемые из Интернета.) Окончательный результат — запрос, получающий данные за 2007 г. — показан на рис. 6.6.

 

 
 

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


Далее описано, что следует сделать.

1. Выберите СозданиеДругиеКонструктор запросов(Create → Other → Query Design).

 
 

Па экране появится новое окно Конструктора,в котором вы сможете создать вага за­прос. Но сначала программа Access распахивает диалоговое окно Добавление таблицы(Show Table), в котором можно выбрать таблицы для обработки (рис. 6.1).

2. Выберите таблицу, содержащую нужные вам данные, и щелкните мышью кнопку Добавить(Add) (или дважды щелкните таблицу кнопкой мыши).

В примере с БД Boutique Fudge вам нужна таблица Orders.

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

3. Щелкните мышью кнопку Закрыть(Close).

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

 

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

 

4. Выберите поля, которые хотите включить в ваш запрос.

Для выбора поля в прямоугольнике таблицы щелкните поле дважды кнопкой мыши (рис. 6.2). Не включайте одно и то же поле дважды, иначе столбец будет отображаться


два раза. Если вы пользуетесь примером Boutique Fudge, обязательно выберите, по край­ней мере, поля ID, DatePlacedи CustomerID.

Для того чтобы выбрать все поля из таблицы, можно щелкнуть дважды кнопкой мыши звездочку (*). Но в большинстве случаев лучше добавлять каждое поле отдельно. Такой способ не только помогает видеть, каков ваш запрос, но и позволяет выбрать порядок столбцов о запросе и использовать поле для сортировки и фильтрации.

 

 

Примечание

Хороший запрос содержит только самые нужные поля. Чем меньше полей в запросе, тем легче сконцентрироваться на важной информации (и легче разместить распечатку на странице).

 

 

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

 
 

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

 

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


6. Если вы хотите скрыть один или несколько столбцов, сбросьте у них флажок Вывод на экран(Show).

 
 

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

7. Выберите порядок сортировки.

Если вы не зададите порядок сортировки, то получите записи прямо из БД в том поряд­ке, в каком они там хранятся. Это правило обычно (но не всегда) означает, что самые ранние записи появятся первыми, в верхней части таблицы. Для явной сортировки таб­лицы выберите поле, которое вы хотите использовать для сортировки результатов, и за­тем в соответствующем поле Сортировка(Sort) задайте вариант упорядочивания. В данном примере таблица сортируется по дате в порядке убывания, поэтому самые по­следние заказы оказываются первыми в списке (рис. 6.4).

 

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

 

 

Подсказка

Вы можете сортировать по нескольким полям. Единственная хитрость заключается в том, что столбцы должны быть упорядочены таким образом, что первый сортируемый столбец выво­дится первым (слева) в списке столбцов. Для получения корректных результатов воспользуй­тесь методом переупорядочивания столбцов, описанным в пункте 5.

 

 

8 Задайте условие фильтрации или отбора.

Фильтрация (см. разд. "Фильтрация" главы 3) — это средство, позволяющее акцентиро­вать внимание только на интересующих вас записях и игнорировать все остальные.


Фильтрация или отбор урезает большой пласт данных до нужной вам информации и яв­ляется сутью множества запросов. (Вы узнаете больше о создании условий фильтрации в следующем разделе.)

Если вы сформировали нужное условие фильтрации, поместите его в поле Условие от­бора(Criteria) соответствующего поля (рис. 6.5). В данном примере можно поместить это условие в Условие отбораполя DatePlacedтаблицы для того, чтобы выбрать заказы, сделанные в течение первых трех месяцев года: >=#1/1/2007# And <=#3/31/2007#

 
 

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

 

Рис. 6.5. Здесь показан фильтр, определяющий заказы, сделанные в заданном диапазоне дат (с 1 января по 1 марта в 2007 году). Учтите, что когда вы используете реальную жестко закодированную дату как часть условия (например, 1 января 2007 г. в данном примере), ее следует обрамлять символами #

 

9, Выберите Работа с запросами | КонструкторРезультатыВыполнить(Query Tools | Design → Results → Run).

Теперь создание запроса закончено и он готов к выполнению. Когда вы запустите запрос, то увидите результаты, представленные на листе данных (дополненные подстановками в связанных полях) и напоминающие таблицу в режиме редактирования. (На рис. 6.6 по­казан результат запроса к таблице Orders.)

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


 
 

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

 

 

Примечание

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

 

 

10. Сохраните запрос.

Вы можете сохранить ваш запрос в любое время с помощью сочетания клавиш <Ctrl>+<S>. Если вы этого не сделаете, программа Access автоматически сохранит его, когда вы закроете вкладку запроса (или всю вашу БД). Конечно, вы не обязаны сохра­нять ваш запрос. Иногда запрос создается для конкретной решаемой один раз задачи. Если вы не планируете повторно использовать запрос, нет смысла загромождать вашу БД лишними объектами.

При первом сохранении запроса программа Access запрашивает его имя. Применяйте те же правила именования, которым вы следуете при задании имен таблиц — воздержи­тесь от использования пробелов и специальных символов и делайте заглавной первую букву каждого слова. Удачное имя запроса описывает представление данных, которое он формирует. Хороший выбор FirstQuarterOrders_2007(заказы первого квартала 2007) показан на рис. 6.6.

 

 

Примечание

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

 

 

После создания запроса вы увидите его в области переходов вашей БД (рис. 6.7). Если использовать стандартный режим отображения Все таблицы (AllTables), запрос появится под таблицей, которую он использует. Если запрос использует несколько таблиц, он по­явится в нескольких группах области переходов.

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


 
 

продукты из таблицы Products(с помощью условия фильтра >50 в поле Price).Если нужно просмотреть, отредактировать или напечатать информацию о дорогих товарах, вы выполняете запрос TopProducts.Для тонкой настройки параметров запроса щелкните его правой кнопкой мыши в области переходов и затем выберите режим Конструктор.

 

Рис. 6.7. По умолчанию в области переходов ваши запросы выводятся сразу под таблицами, которые они используют. Например, запрос TopProducts(показанный здесь) появляется под таблицей Products

 

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

Если вы добавляете в таблицу записи, когда открыт запрос, новые записи не будут авто­матически появляться в запросе. Вам придется повторно выполнить ваш запрос. Самый бы­стрый способ — выбрать последовательность ГлавнаяЗаписиОбновитьОбновитьвсе (Home → Records → Refresh → Refresh All). Можно также закрывать запрос и снова от­крывать его, поскольку Access каждый раз выполняет запрос, когда вы открываете его в Ре­жиме таблицы.

 

Примечание

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

 

 

Построение условий отбора

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


Условие отбора определяет интересующие вас записи. Если нужно найти осе заказы, сделанные клиентом с номером 1032, можно применить следующее условие отбора:

=1032

Для того чтобы заставить это условие действовать, необходимо поместить его в поле Ус­ловие отбора (Criteria) под полем CustomerID.

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

 

 

Примечание

Если вы используете многозначное поле (см. разд. "Многозначные поля" главы 5), программа Access включает в результаты запроса запись, хотя бы одно значение которой соответствует условию отбора. Представьте себе, что таблица Classesсодержит многозначное поле InstructorID(указывающее на то, что несколько преподавателей могут объединиться для веде­ния одного и того же учебного курса). Если написать условие =1032 в поле InstructorID,Access включает в результат любую запись, в которой преподаватель 1032 ведет класс независимо от того, назначены ли для ведения этого класса другие преподаватели.

 

 

Для тех, кто понимает.

Не бойтесь подстановок

 

Как вы знаете, подстановки изменяют способ отображения значений на листе данных. Если добавить подстановку к полю CustomerIDв таблице Orders,вы не увидите за­шифрованные числа, такие как 1032. Вместо этого на экран выводятся информативные данные, например фамилия и имя Hancock, John (Хэнкок Джои).

Но при создании условия отбора или фильтрации следует помнить, какие данные на са­мом деле хранятся в поле. Условие отбора -1032 для поля CustomerIDдействует кор­ректно, а условие =Hancock, John — нет, потому что имя и фамилия хранятся отдель­но. (Они содержатся в таблице Customers,а не в таблице Orders.)

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

• найти нужное значение кода (ID) в таблице Customersзаранее. После этого вы можете его использовать при построении запроса для таблицы Orders;

• применить запрос на объединение для получения имени и фамилии из таблицы Customersи вывести их рядом с остальными подробностями заказа. Как воспользоваться этим приемом, вы узнаете в разд. "Запросы и связанные таблицы" далее в этой главе.

 

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

="Harrington Red"


Вместо поиска точного совпадения можно использовать диапазон. Добавьте следующее условие отбора в поле OrderTotalдля поиска всех заказов, стоящих больше 10 и меньше 50 долларов:

<50 And >10

В этом выражении на самом деле два условия (меньше 50 и больше 10), которые объеди­нены могущественным ключевым словом And (см. разд. "Комбинирование условий на значе­ния" главы 4). Как альтернативу можно применять ключевое слово Or, если нужны резуль­таты, которые удовлетворяют одному из заданных вами условий. В главе 7 вы рассмотрите более мощные инструменты для построения выражений.

Особенно полезны условия для дат. Но не забывайте обрамлять жестко фиксированные даты знаками # (см. разд. "Проверка допустимости дат" главы 4). Если поместить следую­щее условие отбора в поле DatePlaced,будут найдены асе заказы, сделанные в 2007 г.:

<#1/1/2008# And >#12/31/2006#

Это выражение отбирает все даты до 1 января 2008 г., но после 31 декабря 2006 г.

 

 

Подсказка

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