Пусть необходимо получать информацию о начисленных суммах заказа по различным фирмам. Для решения этой задачи можно использовать два пути:
· сконструировать запрос отдельно для каждой фирмы. Это не очень эффективно, т.к. количество фирм меняется, что заставляет постоянно добавлять новые запросы.
· создать один запрос на выборку, задавая условия поиска в специально созданной форме (запрос с произвольной выборкой).
Создавая запрос с произвольной выборкой, необходимо заранее создать опорный запрос. В качестве опорного запроса в нашем случае можно выбрать запрос Сумма заказа. Скопируем его и назовем копию Сумма заказа 2
Запрос с произвольной выборкой будет состоять из двух частей: формы для задания критериев выборки и измененного запроса Сумма заказа 2.
1. Создадим пустую Форму в режиме конструктора. Разместим на новой форме необходимые компоненты:
· Перетащим на форму элемент Поле, изменим надпись перед Полем: удалим условное название «Поле» и введем комментарий «Введите название фирмы».
· Выберем элемент Кнопка и перетащим его на форму.
В открывшемся окне Создание кнопок выберем категорию выполнить запрос
Нажмем кнопку Далее и выберем запрос, который откроется при нажатии на эту кнопку – Сумма заказа 2
Далее выберем оформление для кнопки (Текст или рисунок).
В результате выполненных действий форма для запроса примет вид
Остается закрыть Конструктор и дать новой форме имя Форма запроса
2. В связи с тем, что условия для выборки будут задавать из формы, необходимо преобразовать Запрос Сумма заказа 2.
Для этого откроем запрос в режиме конструктора. В поле Наименование. Фирма (строку Условие отбора)ввести выражение: Like [Forms]![Форма запроса1]![Поле0]
Выражение рекомендуется вводить с помощью построителя выражений, выбирая операцию Like, потом нужную форму в списке, и требуемый элемент (Поле) из имеющихся и нажимая кнопку Вставить. Закроем запрос, сохранив изменения.
Откроем закладку Формы и откроем Форму запроса1. Введем условие для отбора записей
Результат выполнения запроса
Корректировка данных средствами запроса
1. Использование групповых операций в запросах
Групповые операции позволяют выделить группы записей с одинаковыми значениями в указанных полях и использовать для других полей этих групп определенную статистическую функцию.
Пусть требуется создать запрос для таблицы Заказ-Товар, где кол-во для одинаково наименования товара суммируется.
1. Создадим запрос на выборку для таблицы Заказ-Товар. Из списка таблицы Заказ-Товар перетащим в бланк запроса поля Код товара, по которому должна производиться группировка и Количество товара, будет вычисляться функция Sum для подсчета количества товара.
2. Правой кнопкой в области полей запроса добавим графу Итоги
3. Нажмем на кнопку Групповые операции. Заменим слово Группировка в столбце Кол-во товара на функцию Sum
Сохранить запрос с именем Кол-во товара.
2. Конструирование запроса на создание таблицы
Запрос на создание таблицы используется для сохранения результата запроса. Этот вид запроса основан на запросе на выборку, но в отличие от него сохраняет таблицу с результатами запроса.
Сформируем запрос на создание таблицы, используя запрос Кол-во товара. Для этого выбираем режим К онструктор. Преобразуем этот запрос в запрос на создание таблицы, выбирается пункт меню Запрос ~ Создание таблицы. В окне Создания таблицы введем имя создаваемой таблицы – Кол-во товара в заказе. Закроем запрос.
Нажмем на запрос «Количество товара», согласимся с изменениями, и получим новую таблицу
3. Конструирование запроса на обновление
При выполнении этого запроса изменения вносятся в группу записей, отбираемых с помощью указанных пользователем условий отбора. Значения для изменений в полях определяются в бланке запроса в строке Обновление.
1. Добавим в структуру таблиц еще одну – таблица Склад.
Наименование полей | Тип | Примечание |
Код товара | Числовой | Ключевое поле |
Получено | Числовой | |
Остаток | Числовой |
Настроим связи, сделаем подстановку нужных полей. Заполнить таблицу записями для всех товаров. При этом значение поля Получено должно быть больше значения поля Остаток и оба должны быть положительными.
2. Создадим запрос на обновление на примере обновления поля Остаток в таблице Склад. Остаток высчитывается по формуле:
Получено на складе – Кол-во товара в заказе.
Количество товара в заказе получено в запросе на выборку Кол-во товара с использованием функции Sum.
!Запрос на обновление непосредственно на основе запроса построить нельзя!
Поэтому используется для обновления не запрос, а таблица Кол-во товара в заказе, полученная по запросу на создание таблицы.
Для формирования запроса на обновление сначала создается запрос на выборку на основе трех таблиц – обновляемой таблицы Склад, таблицы Товар и таблицы Кол-во товара в заказе. Для преобразования запроса на выборку в запрос на обновление выбирается пункт меню Запрос ~ Обновление.
Перетащить поле Остаток из списка таблицы Склад. В строке Обновление ввести формулу (можно с помощью построителя выражений):
[Склад]![Получено]-[Кол-во товара в заказе]![Sum-Количество]
Сохранить запрос под именем Обновление Склада.
Выполненные нами запросы на создание и обновление должны работать по следующей схеме: сначала вносятся данные в таблицы Заказ_Фирма и Заказ_Товар, т.е. добавляются товары в заказ. Следовательно, их необходимо со склада списать. Откроем таблицу Склад, посмотрим на столбец Остаток, запомним значения. Для списания товара вызываем запрос на создание таблицы Количество товара, если запрос уже выполнялся и таблица уже существует, подтвердим её замену. После этого запускаем запрос Обновление склада, при этом СУБД, учитывая данные только что измененные данные в таблице Количество товара, изменит значения остатков в таблице Склад.