Microsoft Access, шаг второй

По принципу своего действия все запросы Microsoft Access делятся на несколько видов. Наиболее часто применяются запросы, производящие простую выборку некоторой информации из одной или нескольких взаимосвязанных таблиц. Результатом работы такого запроса является набор фактических данных, удовлетворяющих определенным, заранее заданным, условиям. Полученные данные представляются в виде обычной таблицы, что позволяет создать на ее основе пользовательскую форму, представляющую результат на экране в удобном для восприятия виде. Кроме того, в отличие от обычной таблицы, в запросе, кроме условий выборки, можно задавать дополнительные поля, в которых указывать формулы, оперирующие содержимым других полей. Практически в точности как в Microsoft Excel. В этом случае вместе с отобранными данными во временной таблице появятся и результаты обсчета формул. Таким образом, механизм запросов компенсирует отсутствие в таблице возможности автоматически произвести какие бы то ни было расчеты. На самом деле в этом таится глубокий смысл. Как показывает практика, реально пользователю практически повсеместно все результаты базы данных не нужны, однако программа не умеет делить все формулы на первоочередные и второстепенные. Как только пользователь, как это имеет место в Microsoft Excel, обращается к файлу, содержащему формулу, компьютер производит все вычисления, чем в значительной степени расходует машинный ресурс. Решение, реализованное в СУБД вообще, и в Microsoft Access в частности, позволяет вычислять лишь те данные, которые необходимы в данный конкретный момент времени данному конкретному пользователю. Вся база данных может содержать множество самых разных запросов, в том числе и с формулами, но так как они разбиты между разными отдельными модулями, то это позволяет управлять процессом вычислений, чем в значительной степени экономит машинное время.

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


Для создания нового запроса следует сначала перейти на вкладку "ЗАПРОСЫ" и нажать на экранную кнопку " СОЗДАТЬ". Это приведет к появлению уточняющего вопроса: "какой конкретно запрос вы желаете" (см. рис. 2). Всего предложенное меню Microsoft Access 97 содержит пять возможных вариантов. Профессионалы, хорошо освоившие данную СУБД или пользующиеся непосредственным программированием на языке запросов (SQL), выбирают режим " Конструктор", в котором все операции производятся вручную. Это имеет как плюсы, так и минусы. Слишком много рутинных операций, зато можно сконструировать какой угодно запрос.
Вариант " Перекрестный запрос" применяется в тех случаях, когда требуется найти нечто общее в двух связанных таблицах. Например, отсортировать всех покупателей из Сор-бонны (первая таблица) и выбрать все их покупки (вторая таблица).

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

Мастер задаст еще один уточняющий вопрос - какого рода ответ вы желаете (см. рис. 4). Ответов предусмотрено два: подробный список, отсортированный согласно вашим пожеланиям, или итоговый подсчет в стиле - всего столько-то. Для наглядности воспользуемся первым вариантом и нажмем " ДАЛЕЕ".

Авторы СУБД Microsoft Access 97 предусмотрели также такой вариант, когда услуги мастера для построения запросов используются исключительно для выполнения большей части черновой работы. Если вы хотите добраться до внутренней механики полученного запроса - выберите вариант " изменение структуры запроса", иначе программа автоматически решит показать получившийся результат. Можно также "попросить" Microsoft Access вывести подсказку по работе с запросами. Это делается путем выставления галочки против записи " Вывести справку по работе с запросом".
Все, запрос готов. Можно смело нажимать экранную кнопку " ГОТОВО" и посмотреть на результат. Как видно из итога, запрос сработал не совсем так, как ожидалось. Программа выбрала все строки, не различая между кредитными карточками и наличными. Таким образом, не остается иного выбора, как подкорректировать исходный код запроса. Для этого нужно перейти в режим конструктора (экранная кнопка с угольником и карандашом на панели инструментов). Запрос примет иной вид (см. рис. 6). Наименования выбранных полей стали наименованиями столбцов, а над этим бланком появилось изображение таблицы, из которой указанные поля берутся. Как вы видите, все поля, которыми оперирует запрос, специально помечены галочками, проставленными в строке " Вывод на экран". Это означает, что далеко не все поля, которыми оперирует запрос, должны непременно выводиться на экран компьютера. Допускается сортировать данные по одному признаку, а на экран выводить лишь то, что связано с полученным результатом.
В данном случае, чтобы запрос не путался с выборкой, ему требуется дополнительно указать, что конкретно требуется извлечь из опрашиваемой таблицы. Условие задается в строке " Условие отбора". Это может быть простое условие, набранное с клавиатуры и представляющее собой одну из возможных величин. Это также может быть более сложное выражение, опять же как набранное с клавиатуры, так и сконструированное при помощи конструктора выражений. Выделите ячейку на пересечении строки " Условие отбора" и столбца " Вид платежа". Потом нажмите на правую клавишу мыши и выберите в контекстном меню режим "ПОСТРОИТЬ". Это "вызовет к жизни" еще один мастер.
Это очень интересный и "могучий" мастер. Он позволяет строить сколько угодно сложные выражения, многие из которых иным путем вообще созданы быть не могут. Вам надлежит отыскать в левом нижнем окне поле "Вид платежа" (принцип поиска аналогичен поиску папки в модуле Проводник операционной системы Microsoft Windows 95), кликнуть по нему (в верхнем окне появится запись, состоящая из наименования таблицы и имени поля). Потом - нажать мышью на экранную кнопку со знаком равно, а потом опять отыскать в левом нижнем окне, в папке " Константы", значение "ложь" и перенести его в верхнее окно посредством экранной кнопки " ВСТАВИТЬ". Получится выражение [Продажи]![Вид платежа] = Ложь. Это означает, что запрос должен выбрать из таблицы ПРОДАЖИ только те строки, ячейка ВИД ПЛАТЕЖА которых содержит значение "Ложь". Как вы, несомненно, помните, именно это означает, что данная продажа была сделана за наличные деньги. Теперь нажмите "ОК", и построитель выражений исчезнет, а само выражение попадет в ячейку " Условие отбора" столбца " Вид платежа" нашего запроса. Не беда, что вы увидите лишь небольшую часть сгенерированной текстовой строки. На самом деле она там присутствует полностью, лишь недостаточная ширина столбца не позволяет увидеть ее целиком. Если не верите - можете "взять" мышью правую границу столбца " Вид платежа" и перетащить ее вправо на достаточное расстояние.
Теперь самое время проверить, все ли в порядке. Переведите запрос в режим таблицы. Это делается кликом по инструменту " Режим таблицы", который сейчас находится там же, где ранее располагалась кнопка с треугольником и карандашом. В появившейся результирующей таблице теперь всего две строки, из которых данные содержит только одна, именно та, в которой поле "Вид платежа" содержало значение "Ложь", внешне выраженное в виде квадратика без галочки. На этот раз запрос "сработал" как надо. Его можно сохранить и использовать в дальнейшем.
Несомненно, это далеко не все возможности запросов. На самом деле с их помощью в СУБД выполняется львиная доля задач, но об этом мы поговорим позднее. А пока - главное уяснить, что такое есть запрос и для чего он существует.
Александр Запольскис
Компьютерная газета. Статья была опубликована в номере 03 за 1999 год в рубрике soft :: субд