Александр Днепров - Microsoft Access 2007
5. В бланке запроса в строке Поле в третьей колонке введите значение 1. Это будет заказанное количество товаров.
6. В бланке запроса в строке Поле в четвертой колонке введите значение 3. Это номер покупателя из таблицы Клиенты .
7. В бланке запроса в строке Поле в пятой колонке введите date(). Эта функция вернет текущую дату для поля Дата таблицы Заказы .
Результирующий бланк запроса на выборку показан на рис. 6.6.
Рис. 6.6. Результирующий бланк запроса на выборку
Текст запроса на выборку приведен в листинге 6.3.
...Листинг 6.3.
Запрос на выборку
SELECT Товары. Код, Товары. Цена, 1 AS Выражение1, 3 AS Выражение2,
Date() AS Выражение3
FROM Товары;
8. Перейдите на вкладку Конструктор и выберите команду Выполнить (рис. 6.7).
Рис. 6.7. Результат выполнения запроса на выборку...Примечание
На данном этапе особенно важно проверить результаты выборки, так как запрос на добавление данных отменить нельзя. Неправильно добавленные записи придется удалять вручную. Это легко сделать в учебной базе, но в реальной практически невозможно.
Теперь преобразуйте запрос на выборку в запрос на добавление данных.
1. Щелкните правой кнопкой мыши на заголовке вкладки запроса. Нажмите кнопку Конструктор .
2. На вкладке Конструктор в группе Тип запроса выберите команду Добавление . Откроется окно Добавление (рис. 6.8).
Рис. 6.8. Окно Добавление
3. В списке имя таблицы выберите название результирующей таблицы – Заказы . Установите переключатель в положение в текущей базе данных . Нажмите кнопку ОК .
4. В бланке запроса появилась новая строка Добавление . Для каждого поля выборки укажите поле назначения результирующей таблицы Заказы , выбирая названия полей из раскрывающегося списка.
Результирующий бланк запроса на добавление показан на рис. 6.9.
Рис. 6.9. Результирующий бланк запроса на добавлениеТекст запроса на добавление приведен в листинге 6.4.
...Листинг 6.4.
Запрос на добавление данных
INSERT INTO Заказы (Товар, Сумма, Количество, Клиент, Дата)
SELECT Товары. Код, Товары. Цена, 1 AS Выражение1, 3 AS Выражение2,
Date() AS Выражение3
FROM Товары;
5. Нажмите кнопку Выполнить . Откроется окно подтверждения операции добавления.
6. Нажмите кнопку Да .
7. Откройте таблицу Заказы .
Вы можете видеть, что в таблице Заказы появились шесть новых записей по количеству товаров в таблице Товары (рис. 6.10).
Рис. 6.10. Таблица Заказы после выполнения запроса на добавление записей
...Примечание
Следует помнить, что типы данных, заданные для полей в исходной таблице, должны быть совместимыми с типами данных для полей конечной таблицы. Например, можно добавить числа в текстовое поле, но нельзя добавить текст в числовое поле, если только не используется выражение вида (Val(ТекстовоеПоле)), чтобы сначала преобразовать данные в числовой тип данных.
Создание запросов на обновление таблиц
Запрос на обновление данных используется для изменения существующих записей в таблицах. Основное отличие таких запросов от запросов на добавление и удаление – это то, что изменяются значения отдельных полей записей. Можно удалять значения полей, оставляя те пустыми, при этом операция будет равносильна удалению части записи. Кроме того, можно заполнять пустые значения отдельных полей данными, что равносильно добавлению данных. Но если необходимо добавить или удалить строки целиком, необходимо использовать запросы на добавление или удаление записей соответственно.
Обновлять данные можно не во всех полях. Ниже приводится список полей, значения которых нельзя изменить запросом на обновление:
• поля, содержащие результаты вычислений, потому что их значения не хранятся в базе данных постоянно;
• поля, источником записей для которых служат итоговые запросы или перекрестные запросы, которые будут рассмотрены далее в этой главе;
• поля-счетчики, потому что их значение изменяется только при добавлении записей в таблицу;
• поля в запросах на объединение, так как эти данные не хранятся в базе, а выбираются из указанных таблиц;
• поля в запросах на уникальные значения и запросах на уникальные записи – запросах, возвращающих неповторяющиеся значения или записи;
• первичные ключи, участвующие в отношениях между таблицами, кроме тех случаев, когда эти отношения были настроены на автоматическое выполнение каскадного обновления через поля ключа и любые связанные поля.
...Внимание!
Перед выполнением запроса на обновление следует создать резервную копию базы данных. Результаты запроса на обновление невозможно отменить, однако создание резервной копии позволяет отменить все изменения.
Для надежности сначала следует создать запрос на выборку, просмотреть, какие записи будут изменены, а потом преобразовать запрос в запрос на обновление.
Создайте запрос на обновление данных в учебной базе Отдел продаж . Итак, имеется таблица с заказами, в которой указывается полная стоимость заказа. Пусть при заказе на сумму более 5000 руб. клиент получает скидку в 10 %. Сначала создайте запрос на выборку нужных записей из таблицы Заказы .
1. Откройте базу данных Отдел продаж .
2. На вкладке Создание в группе Другие нажмите кнопку Конструктор запросов .
3. В окне Добавление таблицы дважды щелкните кнопкой мыши на названии таблицы Заказы . Нажмите кнопку Закрыть .
4. Дважды щелкните кнопкой мыши на полях, которые необходимо добавить в выборку. Выберите поля Номер и Сумма .
5. В бланке запроса в строке Условие отбора для поля Сумма введите условие выборки [Заказы]![Сумма] > 5000.
Результирующий бланк запроса на выборку показан на рис. 6.11.
Рис. 6.11. Результирующий бланк запроса на выборку
Текст запроса на выборку приведен в листинге 6.5.
...Листинг 6.5.
Запрос на выборку
SELECT Заказы. [Номер (ID)], Заказы. Сумма
FROM Заказы
WHERE (((Заказы. Сумма)>5000));
6. Перейдите на вкладку Конструктор и выберите команду Выполнить (рис. 6.12). Если результат выборки содержит только записи с суммой более 5000 руб., то запрос составлен верно.
Рис. 6.12. Результат выполнения запроса на выборку
7. Щелкните правой кнопкой мыши на заголовке вкладки запроса. Выберите команду Конструктор .
8. На вкладке Конструктор в группе Тип запроса выберите команду Обновление .
9. В бланке запроса в строке Обновление для поля Сумма введите формулу [Заказы]![Сумма]-[Заказы]![Сумма]*0.1. Теперь значение в поле Сумма для каждой записи, соответствующей условию выборки, будет уменьшено на 10 %.
Результирующий бланк запроса на обновление показан на рис. 6.13.
Рис. 6.13. Результирующий бланк запроса на обновлениеТекст запроса на обновление приведен в листинге 6.6.
...Листинг 6.6.
Запрос на обновление данных
UPDATE Заказы SET Заказы. Сумма = [Заказы]![Сумма]-[Заказы]![Сумма]*0.1
WHERE (((Заказы. Сумма)>5000));
10. Нажмите кнопку Выполнить . Откроется окно подтверждения операции обновления.
11. Нажмите кнопку Да .
12. Откройте таблицу Заказы и посмотрите на изменения, внесенные в данные (рис. 6.14).
Рис. 6.14. Таблица Заказы после выполнения запроса на обновление
Создание запросов на удаление записей
Запрос на удаление записей используется, если требуется удалить запись целиком. Такой запрос удаляет все данные каждого поля записи вместе со значением ключа, который делает эту запись уникальной.
...Примечание
Если запись, которую нужно удалить, является стороной «один» отношения «один ко многим», то необходимо перед выполнением запроса изменить свойство этого отношения. По умолчанию запрещено удаление данных на стороне «один» в отношении «один ко многим».
Как и для запросов на обновление, для надежности сначала необходимо создать запрос на выборку и проверить, что выбираются именно те записи, которые требуется удалить.