- •Рязанский государственный радиотехнический университет
- •Учебно-методический комплекс по дисциплине сд.Р.06 «инфорационные сети, базы данных»
- •653700 «Приборостроение»
- •200106 – «Информационно-измерительная техника и технологии»
- •Работа № 1 работа с базами данных и таблицами.
- •2.1 Разработка таблицы "Персональные мероприятия"
- •2.2 Разбиение информации но полям.
- •2.3 Создание таблицы "Персональные мероприятия"
- •2.4 Определение значения по умолчанию для поля.
- •3.1. Отношения между таблицами.
- •4.1 Выбор ключа таблицы
- •4.2 Индексирование таблицы.
- •5.3 Изменение свойств полей и связей между таблицами.
- •5.4 Изменение связей между таблицами
- •Лабораторная работа №2. Добавление, изменение и проверка корректности данных в таблицах.
- •Цель работы
- •Домашнее задание.
- •Лабораторная работа № 3 Сортировка, поиск и фильтрация данных в таблицах
- •Сортировка таблицы по значению одного поля.
- •Сортировка таблицы по значению нескольких полей
- •Поиск записей по значению поля.
- •Отбор данных при помощи фильтров
- •Фильтр по выделенному фрагменту.
- •Обычный фильтр.
- •Расширенный фильтр и расширенная сортировка
- •Добавление сортировки по нескольким столбцам и составного критерия отбора
- •Сохранение и загрузка фильтра в качестве запроса
- •1. Создание простого запроса
- •2. Добавление полей в запрос.
- •3. Задание условия отбора и порядка сортировки результатов запроса
- •4. Создание более сложных запросов
- •5. Изменение полей таблицы при помощи запроса
- •6. Изменение заголовков полей в запросе
- •7. Сохранение запросов
- •Создание запросов других видов
- •8. Использование простых запросов на создание таблиц
- •9. Добавление параметра к запросу
- •10. Преобразование запросов по образцу в запросы на языке sql
- •Лабораторная работа № 5 запросы по нескольким таблицам и перекрёстные запросы
- •1. Соединение таблиц для создания многотабличного запроса
- •1.1 Создание внутреннего соединения по одному полю
- •1.2. Определение порядка сортировки результатов запроса
- •1.3. Создание запросов на выборку данных из таблиц с косвенными связями
- •1.4. Создание внутреннего соединения по нескольким полям
- •2. Использование полей подстановок
- •2.1 Добавление списка, задающего значение внешнего ключа, при помощи Мастера подстановок
- •2.2 Добавление списка постоянных значений к полю таблицы
- •Введите строку 03-94, чтобы вывести данные для марта 1995 года (рис. 10.51).
- •Нажмите кнопку ок для вывода результирующего множества запроса(рис.52).
2.2 Добавление списка постоянных значений к полю таблицы
Добавление списка фиксированных значений к полю таблицы очень похоже на создание списка значений внешнего ключа, описанное в предыдущем разделе. Чтобы связать поле "Тип Мероприятия" копии таблицы "Персональные мероприятия" со списком постоянных величин:
Выберите поле "ТипМероприятия". В ячейке столбца "Тип данных" (Data Type) выберите из списка элемент "Мастер подстановок" для запуска Мастера подстановок.
В появившемся диалоговом окне выберите переключатель "Фиксированный набор значений" (I Will Туре in the Values That I Want) и нажмите кнопку "Далее".
Во втором диалоговом окне Мастера подстановок введите значение 2 в поле "Число столбцов" (Number of Columns) и нажмите клавишу <Таb> для создания второго столбца.
Введите значения П, Принять; К, Квартальный отчет; Г, Годовой отчет; О, Изменить оклад в столбцы Столбец1 и Столбец2 первых четырех строк. Измените ширину столбцов, обеспечив достаточный интервал между ними (рис. 25). Нажмите кнопку "Далее" для вывода третьего окна Мастера подстановок.
В поле "ТипМероприятия" используется один символ для обозначения типа мероприятия, поэтому выберите "Столбец!" в качестве столбца, содержащего значения, которые необходимо добавить в таблицу (рис. 26). Нажмите кнопку "далее" для вывода четвёртого и последнего окна Мастера подстановок.
Не изменяя предлагаемой Мастером подстановок подписи для списка подстановки, нажмите кнопку "Готово" (Finish). Выведите новые свойства подстановки (см рис. 27).Свойству "Тип источника строк" (Record Source Type) присваивается значение "Список значений", свойству "Источник строк" – значение
"П"; "Принять"; "К"; "Квартальный отчёт"; "Г"; "Годовой отчёт"; "О"; "Изменить оклад".
Нажмите кнопку "Режим таблицы" и сохраните внесённые изменения. Увеличьте ширину столбца "Тип" до ширины списка, раскройте список и убедитесь в том, что в нём содержатся фиксированные значения (рис.28).
Если необходимо скрыть сокращённое название типа меропрятия, замените первую величину в поле свойства "Ширины столбцов" (Column Widths) на 0.
3. Внешнее, рекурсивное соединения и соединение по отношению
В предыдущих заданиях лабораторной работы были созданы внутренние соединения. Внутренние соединения чаще других используются в базах данных. Однако Access позволяет задать еще три типа соединений, которые применяются реже: внешнее соединение, рекурсивное соединение и соединение по отношению.
3.1 Создание внешнего соединения
Внешние соединения позволяют вывести данные всех записей таблицы, участвующей в соединении, в независимости от того, имеются ли соответствующие им записи в связанной таблице. Внешние соединения могут быть левыми или правыми.
Запрос, в котором участвуют таблицы с левым внешним соединением (left join или *= в SQL), выводит все записи таблицы "один" с уникальным значением первичного ключа в независимости от того, имеются ли соответствующие им записи в таблице "многие". И наоборот, запрос, в котором участвуют таблицы с правым внешним соединением (right join или =* в SQL), выводит все записи таблицы "многие" в независимости от того, имеются ли соответствующие им записи в таблице "один". Обычно, но не обязательно, записи таблицы "многие", которые не подчиняются ни одной записи в таблице "один", являются "висячими" и могут быть связаны отношением "многие-к-одному" с записями другой таблицы.
Чтобы с помощью левого внешнего соединения создать запрос, который обнаруживает отсутствие записей для некоторого сотрудника в таблице "Персональные мероприятия":
Создайте новый запрос и добавьте в него таблицы "Сотрудники" и "Персональные мероприятия".
Перетащите поле "КодСотрудника" таблицы "Сотрудники" на поле "КодСотрудника" таблицы "Персональные мероприятия" для создания внутреннего соединения между ними. Access автоматически создает соединение, если только была установлена связь между этими полями при создании таблицы "Персональные мероприятия".
Выделите и перетащите поля "Фамилия" и "Имя" таблицы "Сотрудники", а также поля "КодСотрудника" и "ДатаПлан" таблицы "Персональные мероприятия" соответственно в первые четыре столбца бланка запроса.
Выделите линию, соединяющую поля "КодСотрудника", щелкнув по ней (рис. 29). Увеличение толщины тонкого отрезка линии указывает на то, что линия выделена. На рис. 29 два списка полей стоят на расстоянии друг от друга, так что можно заметить тонкий отрезок соединения.
Выберите команду "Вид, Параметры объединения" (View, Join Properties). Команда активна только тогда, когда выделено соединение. Кроме того, можно вывести диалоговое окно "Параметры объединения" (Join Properties), дважды щелкнув по тонкому отрезку соединения. При двойном щелчке по любому из двух толстых отрезков линий по краям соединительной линии выводится бланк свойств запроса. В диалоговом окне "Параметры объединения" переключатель "1" задает обычное внутреннее соединение, переключатель "2" — левое внешнее соединение и переключатель "3" — правое внешнее соединение.
Задайте левое внешнее соединение, выбрав переключатель "2". Нажмите кнопку ОК для закрытия диалогового окна.
Нажмите на панели инструментов кнопку "Запуск" для вывода результирующего множества запроса с левым внешним соединением. Три сотрудника не имеют записей в таблице "Персональные мероприятия" (рис. 31). Результаты отличаются, если ввести дополнительные данные. Если для всех сотрудников имеется план мероприятий, то откроите таблицу "Персональные мероприятия" и удалите его для нескольких служащих, а затем повторно выполните запрос.
Если бы не было задано условия на значение, то можно было бы добавить план мероприятии для несуществующего сотрудника и в результирующем множестве запроса с правым внешним соединением выводились бы персональные мероприятия с отсутствующими именами служащих.
3.2 Создание рекурсивного соединения
Рекурсивные соединения связывают поля одной таблицы. При этом требуется добавить в запрос копию таблицы, а затем задать соединение. В качестве примера рассмотрим запрос, в котором выводятся сотрудники, утвердившие мероприятия, за которые они ответственны, что запрещено внутренним распорядком компании "Борей".
Для создания рекурсивного соединения в таблице "Персональные мероприятия":
Создайте новый запрос и добавьте в него таблицу "Персональные мероприятия".
Добавьте в запрос копию таблицы "Персональные мероприятия", повторно нажав кнопку "Добавить". Access присваивает копии имя "Персональные мероприятия". Закройте диалоговое окно "Добавление таблицы".
Перетащите поле "КодОтветствснного" исходной таблицы на поле копии "КодНачальника". Между таблицами возникает соединение (рис. 32).
Перетащите поля "КодСотрудника" и "КодОтветственного" исходной таблицы, а также поля "КодНачальника" и "ТипМероприятия" таблицы "Персональные мероприятия_1" соответственно в первые четыре столбца бланка запроса.
При использовании рекурсивных соединений требуется задать вывод только уникальных значений. Нажмите на панели инструментов кнопку "Свойства" либо дважды щелкните по свободной области верхней части окна запроса, а затем присвойте в бланке свойств запроса значение да свойству "Уникальные значения". Повторно нажмите кнопку "Свойства" для скрытия бланка свойств запроса
Нажмите кнопку "Запуск" для вывода записей, в которых сотрудник, ответственный и утвердивший план мероприятий, является одним и тем же лицом (рис. 33). В данном случае служащий, у которого поле "КодСотрудника" равно 2. является вице-президентом и может не подчиняться общим правилам. Результаты могут отличаться, если ввести дополнительные данные.
В рассматриваемом задании можно добавить в запрос таблицу "Сотрудники", чтобы вывести имя сотрудника. При этом необходимо создать дополнительное соединение между полем "КодСотрудника" исходной таблицы "Персональные мероприятия" и полем "КодСотрудника" таблицы "Сотрудники", а затем перетащить поле "Фамилия" в пятый столбец бланка запроса. Так как в соединении участвует поле первичного ключа, то в инструкцию SQL по умолчанию добавляется ключевое слово distinctrow
которое исключает отображение повторяющихся записей. На всякий случай присвойте значение Да свойству "Уникальные значения", нажав на панели инструментов кнопку "Свойства", либо дважды щелкнув по свободной области верхней части окна запроса, а затем выполните запрос.
Рекурсивные соединения используются весьма редко в полностью автоматических базах данных, т. к. заданные условия на значения и обеспечиваемая целостность данных сводят на нет необходимость применения таких связей.
3.3 Создание соединения по отношению
Большинство соединений основаны на полях с одинаковыми значениями. Однако в некоторых случаях требуется создать связь неравных полей. В режиме конструктора запросов отображаются только внутренние и внешние соединения. Связь, эквивалентную соединению по отношению, можно задать с помощью условия отбора, которое указывается для одного из двух полей, участвующих в соединении.
Как уже отмечалось выше, поиск клиентов, которые имеют разный официальный адрес и адрес доставки, является примером, в котором требуется использовать соединение по отношению. Для создания связи, эквивалентной данному соединению:
Создайте новый запрос и добавьте в него таблицы "Клиенты" и "Заказы".
Перетащите поля "Название" и "Адрес" таблицы "Клиенты", а также поле "Адрес Получателя" таблицы "Заказы" соответственно в первые три столбца бланка запроса.
Введите в строке "Условие отбора" (Criteria) столбца поля "Адрес Получателя" выражение о Клиенты. Адрес. Access автоматически заключает имена таблицы и поля в квадратные скобки в независимости от того, включают ли они пробелы или знаки препинания (рис. 34). В инструкцию select добавляется предложение where Заказы.АдресПолучателя о [Клиенты].[Адрес] (рис. 35).
Если ввести в столбце поля "Адрес" выражение <> Заказы. АдресПолучателя, то будет получен идентичный результат. В инструкцию select добавляется предложение where Клиенты. Адрес <>[Заказы].[АдресПолучателя].
Нажмите на панели инструментов кнопку "Свойства", либо дважды щелкните по свободной области верхней части окна запроса, а затем присвойте в бланке свойств запроса значение да свойству "Уникальные значения".
Выполните запрос. Результирующее множество содержит только те записи. в которых различаются адрес клиента и адрес доставки (рис. 36).
Нажмите кнопку "Закрыть" и, если требуется, сохраните запроc.
4. Использование запросов для обновления таблиц
Большинство запросов, свойство "Уникальные записи" которых имеет значение Да, могут использоваться для обновления данных, потому что в предложении SQL, связанном с ними, участвует ключевое слово distinctrow. Эти запросы создают объекты Recordset типа Dynaset, допускающими изменения. Результирующее множество можно обновить, только если в его конце имеется пустая запись (со звездочкой на кнопке выделения). Запросы, свойство "Уникальные значения" которых имеет значение Да, создают объекты Recordset типа Snapshot путем замены ключевого слова ANSI SQL distinct. Такие объекты не допускают ни обновления, ни редактирования имеющихся в них записей, ни добавления новых. Ниже описывается, как обновить запись таблицы, включенной в динамический набор запроса, а также как форматировать данные, используя бланк свойств поля запроса.
4.1 Требования к запросам на обновление
Добавление новых записей к таблицам или обновление данных таблиц, включенных в запрос, оказывается в некоторых случаях весьма удобным. Особенно полезной является возможность исправления ошибок с помощью запроса. К сожалению, большинство запросов не позволяют добавлять или изменять записи. Нельзя добавлять или изменять записи в запросах в следующих случаях:
Свойство запроса "Уникальные значения" имеет значение Да.
В запросе используются рекурсивные соединения.
В запросе применяются статистические функции SQL, например Sum (). Следует отметить, что статистические функции SQL используются во всех перекрестных запросах.
Если две таблицы связаны отношением "один-ко-многим", то в таблице "один" не задано полей первичного ключа, повторения значений которых не допускается.
При разработке запроса, используемого в качестве основы формы для ввода или редактирования данных, убедитесь, что ни одно из перечисленных условий нс выполняется.
Если ни одно из перечисленных условий нс выполняется для запроса или для всех таблиц, входящих в него, то можно добавить или обновить данные в следующих объектах:
В таблице, которая является единственной в запросе
В обеих таблицах, связанных отношением "один-к-одному"
В таблице "многие", связанной с другой таблицей отношением
"один-ко-многим"
В таблице "один", связанной с другой таблицей отношением "один-ко-многим", если ни одно поле таблицы "многие" не участвует в запросе
Обновление таблицы "один", связанной с другой таблицей отношением "один-ко-многим", требует особого рассмотрения. Для изменения данных в такой таблице:
Добавьте в запрос поле или поля первичного ключа таблицы "один", а также обновляемые поля.
Добавьте в таблицу "многие" поле или поля, которые соответствуют ключевому полю или полям таблицы "один". Это необходимо для выбора обновляемых записей.
Добавьте условие отбора записей для обновления полей, заданных на
шаге 2.
Сбросьте флажок "Вывод на экран" (Show) поля или полей таблицы "многие", так чтобы они не выводились в динамическом наборе записей запроса.
Выполнив эти действия, можно редактировать данные не ключевых полей таблицы "один". Однако нельзя изменять значения ключевых полей, которые связывают записи таблицы "один" с записями таблицы "многие". Это приведет к нарушению целостности данных. Кроме того, нельзя обновить значение вычисляемого поля запроса — таблицы не могут включать вычисляемые величины.
4.2 Определение формата вывода данных
Формат вывода данных запроса копируется из формата данных таблиц, на основе которых создается запрос. Чтобы изменить его, используется функция Format [Имя Поля, Формат}, которая создает вычисляемые поля .
5. Добавление в запрос всех полей таблицы
В большинстве запросов участвуют только отдельно выбранные поля. Чтобы добавить их в бланк запроса, можно либо ввести с клавиатуры их имя, либо выбрать из списка в ячейке строки "Поле", либо перетащить их из списка полей. Однако имеется возможность включить в запрос все поля таблицы. Для этого в Access имеются три способа.
5.1 Использование заголовка окна списка полей для добавления всех полей в запрос
Для включения всех полей таблицы в запрос используется заголовок окна списка полей или строка этого списка, помеченная звездочкой. Чтобы добавить в бланк запроса все поля вместе с их полными именами:
Создайте новый запрос и добавьте в него требуемые таблицы.
Дважды щелкните по заголовку окна списка полей таблицы, все поля которой включаются в запрос. Это приводит к выделению всего списка.
Перетащите поля на ячейку строки "Поле" бланка запроса, начиная с которой необходимо добавить имена (рис. 39).
При этом предложение SQL, связанное с запросом, имеет следующий вид:
SELECT DISTINCTROW ИмяТаблицы.ПервоеПоле, ИмяТаблицы. ВтороеПоле, ... ИмяТаблицы.ПоследнееПоле FROM ИмяТаблицы;
5.2 Использование строки, помеченной звездочкой, для добавления всех полей в запрос
Для включения всех полей таблицы в запрос без отображения их имен перетащите из списка полей звездочку на ячейку строки "Поле", начиная с которой необходимо вывести данные таблицы. Столбец со звездочкой эквивалентен инструкции SQL select DISTINCTROW * FROM ИмяТаблицы;.
Для столбца со звездочкой нельзя задать порядок сортировки и условие отбора. Однако, чтобы все-таки упорядочить записи и указать критерий отбора:
После добавления звездочки перетащите на бланк запроса поле, по значению которого требуется сортировать записи.
Задайте порядок сортировки в ячейке "Сортировка" или "Условие отбора" столбца выбранного поля.
Сбросьте флажок "Вывод на экран", чтобы не выводить поле дважды в результирующем множестве запроса (рис. 40).
В запросе может участвовать неограниченное число столбцов со звездочкой. Поле, по значению которого упорядочиваются записи, задается в инструкции SQL предложением order by Имя Таблицы. ИмяПоля, а условие отбора предложением where УсловиеОтбора
5.3 Использование окна свойств для добавления всех полей в запрос
Обычно для обновления в формах или отчетах доступны только те поля, чьи имена указаны в бланке запроса. Все другие поля исключены из результирующего множества. Однако, чтобы изменять в форме или отчете данные всех полей таблицы, используемой в запросе, и не включать их имена в запрос, требуется присвоить значение Да свойству запроса "Вывод всех полей" (Output All Fields). Для задания значения свойства "Вывод всех полей":
Создайте новый запрос и добавьте в него требуемые таблицы.
Нажмите на панели инструментов кнопку "Свойства" либо дважды щелкните по свободной области верхней части окна запроса.
Установите курсор в поле свойства "Вывод всех полей" и измените значение на Да.
Если свойство "Уникальные значения" имеет значение Да, то обновление полей не допускается.
Закройте бланк свойств запроса, нажав кнопку "Свойства".
Если в диалоговом окне "Параметры" сбросить флажок "Вывод всех полей" (Restrict Available Fields), то в инструкцию SQL после списка выбранных полей будет добавлена звездочка, которая определяет вывод всех полей заданных таблиц:
SELECT DISTINCTROW Клиенты.Название, Типы.Категория, * FROM-Клиенты, Типы;
Следует отметить, что при выводе всех полей таблицы выполнение запроса происходит медленнее, особенно если в результирующем множестве содержится большое количество записей.
6. Вычисления на подмножестве записей
Access позволяет практически мгновенно обобщить информацию, содержащуюся в записях таблиц. Эта информация является входными данными для большинства информационных систем. В этих системах можно получить ответы на типичные вопросы, такие, например, как "Какова сумма продаж на заданный день?" или "Как изменилась сумма продаж за текущий месяц по сравнению с суммой продаж за тот же месяц прошлого года?". Чтобы выполнить расчеты на основе информации таблиц, необходимо создать запрос, в котором для вычислений используются статистические функции Access SQL.
6.1 Использование статистических функций языка SQL
При обобщении данных, которые содержатся в полях таблиц, включенных в запрос, используются статистические функции SQL (табл. 1). Эти функции называются статистическими, потому что они выполняют сбор статистики об информации в записях. Имеющихся статистических функций SQL обычно достаточно для решения большинства задач. Однако можно самостоятельно написать функцию Access VBA, которая выполняла бы более сложные статистические, научные или инженерные расчеты над данными. Статистические функции SQL можно задать в ячейке строки "Групповая операция" (Total) бланка запроса. Эта строка выводится, если нажать на панели инструментов кнопку "Групповые операции" (Sum) либо выбрать команду "Вид, Групповые операции" (View, Totals). Если вы знакомы с принципами статистической обработки данных, то вам известны отличия одной функции от другой.
6.2 Вычисления на всем диапазоне записей таблицы
Менеджерам, особенно специализирующимся на продажах и маркетинге, обычно требуется информация о заказах и поставках, размещенных и исполненных за определенный промежуток времени, финансовым директорам — обобщенные величины, такие, например, как общая сумма неоплаченных счетов и среднее число дней, прошедших со времени выставления счета до момента оплаты. В некоторых случаях необходимо выполнить расчеты над всеми записями таблицы, например, вычислить за весь период работы фирмы среднюю сумму выставленных счетов. Для выбора данных, которые требуется обобщить, в запросе используется условие отбора. Статистические функции SQL указываются в строке "Групповая операция", вывести которую можно, используя кнопку "Групповые операции" (с греческой буквой сигма (), обозначающей суммирование), которая находится на панели инструментов.
Таблица "Заказы" базы данных "Борей" не содержит поля "Итог", которое содержало бы сумму заказа без стоимости перевозки. Для создания запроса, в котором используются статистические функции SQL для вывода данных о заказах, общего количества, общей, а также средней, наименьшей и наибольшей суммы, требуется добавить поле, которое бы содержало обобщенную информацию о каждом заказе. Чтобы создать новую таблицу, которая имеет дополнительное поле, содержащее рассчитанное значение поля "Итог":
Создайте новый запрос и добавьте в него таблицы "Заказы" и "Заказано".
Перетащите поле "КодЗаказа" таблицы "Заказы", а затем поле "ДатаРазмещения".
Введите в ячейке строки "Поле" третьего (пустого) столбца бланка запроса выражение Итог: Sum([Количество]*[Цена]*(1-[Скидка])), которое вычисляет чистую сумму товаров, включенных в поставку. Установив курсор в столбец "Итог", нажмите на панели инструментов кнопку "Свойства" и присвойте значение "Денежный" (Currency) свойству поля "Формат поля".
Нажмите на панели инструментов кнопку "Групповые операции". В бланк запроса добавляется строка "Групповая операция", содержащая по умолчанию в каждой ячейке операцию "Группировка" (Group By). Назначение операции "Группировка" обсуждается ниже.
Выберите из списка статистических функций SQL в третьей ячейке строки "Групповая операция" элемент "Выражение" (Expression) (рис. 41)..
Нажмите кнопку "Запуск" на панели инструментов, чтобы проверить запрос. Результирующее множество показано на рис. 42.
Закройте запрос, сохранив его под именем "Итоги по заказам".
Чтобы использовать статистические функции SQL для поля "Итог" запроса "Итоги по заказам":
Создайте новый запрос и добавьте в него запрос "Итоги по заказам". Перетащите поле "КодЗаказа" на первый столбец, а затем четыре раза поле "Итог".
Выберите команду "Вид, Групповые операции" либо щелкните правой кнопкой мыши по бланку запроса и выберите из контекстного меню команду "Групповые операции" для добавления на бланк запроса строки "Групповая операция".
Установите курсор в столбец "КодЗаказа" строки "Групповая операция" и выберите из списка функцию Count () (рис. 43).
Установите курсор в первый столбец "Итог" строки "Групповая операция" и выберите из списка функцию Sum() (рис. 43), для второго столбца "Итог" задайте функцию Avg(), для третьего — функцию Min (), для четвертого — функцию Мах ().
Установите курсор в столбец "КодЗаказа" и нажмите на панели инструментов кнопку "Свойства" либо щелкните по столбцу правой кнопкой мыши и выберите из контекстного меню команду "Свойства". Присвойте значение "Счетчик" свойству "Подпись".
Повторите шаг 5 для каждого из четырех столбцов "Итог", присвоив значение "Денежный" свойству "Формат поля", а свойству "Подпись" значения "Суммарная выручка", "В среднем за заказ", "Минимум", "Максимум" соответственно. Значение свойства "Формат поля" задавать не требуется, если в запросе "Итоги по заказам" использована функция ccur ().
Нажмите кнопку "Запуск" для вывода результирующего множества. Условие отбора не было указано, поэтому выведенные данные относятся ко всей таблице (рис. 44).
Сохраните запрос под именем "Статистика по заказам". Этот запрос будет использоваться в следующих разделах.
6.3 Вычисления на выделенных записях таблицы
Часто требуется выполнить вычисления над определенным набором данных и, основываясь на них, составить статистику. Чтобы произвести расчеты только над теми заказами, которые были размещены в марте 1995 года:
Нажмите на панели инструментов кнопку "Конструктор" для возврата в режим конструктора, чтобы задать условие отбора группы записей.
Перетащите поле "ДатаРазмешения" на столбец "КодЗаказа", чтобы столбец "ДатаРазмещения" стал первым в бланке запроса. Теперь необходимо определить условие отбора заказов на основе даты.
Замените элемент "Группировка" в столбце "ДатаРазмещения" на элемент "Условие" (Where). Access сбрасывает флажок "Вывод на экран" столбца "ДатаРазмещения". Если установить этот флажок, то при выполнении запроса будет выведено сообщение об ошибке: этого нельзя делать в столбце, который явно связан с предложением SQL where.
Введите выражение <=#31.03.95#And>=#01.03.95# в ячейку "Условие отбора" столбца "ДатаРазмещения" для отбора заказов, размещенных в марте 1995 года (рис. 45).
Выберите команду "Вид, Режим SQL" для вывода предложения SQL. В него добавлена операция where, в данном случае where ( ( ([.Итоги по заказам] .ДатаРазмещения) <=#31.03.95#And>=#01.03.95#) ), которая отбирает требуемые записи. Если не задать в ячейке "Групповая операция" элемент "Условие", то выводятся обобщенные данные для каждого дня марта 1995 года, а не для всего месяца.
Нажмите на панели инструментов кнопку "Запуск" для вывода результата: количество, общую и среднюю сумму заказов, размещенных в марте 1995 года (рис. 46).
Данные можно обобщить более удобным образом с помощью функции Format (), например, чтобы получить итоговые данные по месяцам (или по кварталам). Для вывода информации о продажах по каждому месяцу 1994 года, последнему году, для которого в базе "Борей" имеются данные по всем месяцам:
Нажмите на панели инструментов кнопку "Конструктор", а затем щелкните по области выделения столбца "ДатаРазмещения", чтобы выделить его. Нажмите клавишу <Insert> для добавления в запрос пустого столбца..
Введите выражение Месяц: Format ([ДатаРазмещения] ; "уу-mm") в первый (пустой) столбец строки "Поле". Формат "уу-mm" используется для упорядочивания записей по дате. Кроме того, можно применять формат "m" или "mm", но не "mmm", потому что в последнем случае столбцы упорядочиваются в алфавитном порядке, начиная с августа.
Введите выражение <=#31.12.94#And>=#01.01.94# в ячейку "Условие отбора" столбца "ДатаРазмещения" (рис. 47).
Нажмите на панели инструментов кнопку "Запуск" для вывода результирующего множества (рис. 48).
Выберите команду "Вид, Режим SQL" для вывода предложения SQL. Инструкция SQL, показанная на рис. 49, была для ясности отформатирована: добавление пробелов и концов строк не влияет на ее смысл.
Выберите команду "Файл, Сохранить как" (File, Save As) для сохранения запроса под другим именем, таким, например, как "Ежемесячная статистика по заказам".
7. Создание запросов с параметрами
Если запрос требуется выполнять многократно, постоянно изменяя условие отбора, то можно преобразовать его в запрос с параметрами. Запросы с параметрами, позволяют задать критерий отбора с помощью диалогового окна "Введите значение параметра". Например, в запросе "Ежемесячная статистика по заказам", создание которого рассмотрено в предыдущем разделе, может изменяться только один аргумент: период времени, за который требуется подвести итоги по продажам. Ниже описывается, как добавить в запрос параметр, а также как указать тип данных аргумента.
7.1 Добавление параметра в запрос "Ежемесячная статистика по заказам".
Чтобы преобразовать запрос "Ежемесячная статистика по заказам" в запрос с параметрами, сначала необходимо задать текст приглашения, которое выводится в диалоговом окне "Введите значение параметра". При создании запроса с параметрами требуется заменить фактические значения подсказкой, заключив ее текст в квадратные скобки. Для этого:
