- •Часть 2
- •Часть 2
- •Содержание
- •1. Конструктор запросов 4
- •2. Запрос на выборку. 13
- •1. Конструктор запросов
- •Создание выражений с помощью Построителя выражений
- •2. Запрос на выборку.
- •2.1. Запрос, основанный на одной таблице и использующий простое условие
- •2.2. Простая выборка из двух связанных таблиц.
- •2.3. Запрос, использующий вычисляемые поля
- •2.4. Запрос с группировкой
- •2.5. Запрос, использующий связь таблицы с самой собой (рекурсивное соединение)
- •2.6. Запрос, использующий две ссылки на одну таблицу
- •2.7. Выборка повторяющихся записей
- •2.8. Поиск несовпадающих записей
- •2.9. Другие сведения, полезные при разработке запросов
- •3. Запрос на удаление записей.
- •3.1. Запрос на удаление всех записей из таблицы (очистка таблицы)
- •3.2. Запрос на удаление с ограничением числа удаляемых записей
- •3.3. Запрос на удаление с применением внешнего объединения таблиц
- •4. Запрос на добавление записей в существующую таблицу
- •4.1. Запрос на добавление записей во временную таблицу текущей базы данных
- •4.2. Запрос на добавление записей во временную таблицу внешней базы данных
- •5. Запрос на обновление записей в таблице.
- •5.1. Простой запрос на обновление записей
- •5.2. Запрос на обновление полей нескольких связанных таблиц.
- •6. Запросы на объединение.
- •6.1. Запрос на объединение, связывающий воедино однотипные таблицы из различных баз данных.
- •7. Перекрестные запросы
- •7.1. Создание перекрестного запроса при помощи мастера
- •7.2. Сознание перекрестного запроса при помощи конструктора запросов
- •8. Запросы с параметрами
- •9. Подчиненные запросы
- •9.1. Использование подчиненных запросов в выражениях для условий отбора записей
- •9.2. Использование подчиненных запросов в определении полей основного запроса.
- •10. Свойства полей запросов
- •11. Свойства запросов
5.1. Простой запрос на обновление записей
Допустим, необходимо увеличить на 50% цену товаров категории Напитки. Для этого откройте новый запрос в режиме конструктора и добавьте в макет таблицы Товары и Типы. Измените тип запроса на запрос на обновление. В бланк запроса добавьте поле Цена из таблицы Товары и в строке Обновление укажите - [Цена]*0.5. После этого добавьте в бланк поле Категория из таблицы Типы и в строке Условие отбора укажите — Напитки. Перейдя в режим просмотра, можно проверить, какие записи будут обновляться при выполнении запроса. Для большей информативности в режиме просмотра, можно в бланк запроса добавить несколько полей, указав для них некое фиктивное обновление. Только не забудьте все это потом удалить, иначе можно полностью запороть информацию в таблице, восстановить которую уже не удастся. Сконструированный запрос изображен на рис. 5.1.
|
|
Рис. 5.1. Простой запрос на обновление записей.
Пояснения
а). Запрос в режиме таблицы, представленный на рис. 5.1, содержит поле Категория. Для того чтобы этого добиться, пришлось указать для него в режиме конструктора значение обновления (в данном случае годится пустая строка — две подряд идущие двойные кавычки). Однако не забудьте перед выполнением запроса удалить все фиктивные обновления. Если этого не сделать, то можно, в худшем случае, навсегда потерять важную информацию, а в лучшем — добиться того, что запрос не будет работать. Например, если запустить на выполнение запрос с указанным для поля Категория значением обновления (пустая строка), то запрос выполнен не будет, а система выдаст сообщение об ошибке. Однако в данном случае сообщение об ошибке полностью проясняет ситуацию. Дело в том, что система пытается обновить не только поле Цена таблицы Товары, но и поле Категория таблицы Типы, присвоив ему вместо значения Напитки значение Пустая строка (""). Если открыть таблицу Типы в режиме конструктора, можно убедиться, что свойство этого поля Пустые строки установлено в Нет. Если переустановить значение свойства в Да (Yes) или поменять значение обновления в запросе на непустую строку, то запрос будет выполнен и обновлены будут поля обеих таблиц.
б). В режиме таблицы поля, подлежащие обновлению, содержат старые (не обновленные) данные. Информация в таблице будет обновлена только после успешного запуска запроса на выполнение.
в). Инструкции SQL.
Предложение UPDAТЕ (обновить) определяет тип запроса и, кроме перечня обновляемых таблиц, как и предложение FROM операторов SELECT или DELETE, содержит информацию о связях.
Предложение SET (установить) содержит список полей вместе со значениями обновления для них.
5.2. Запрос на обновление полей нескольких связанных таблиц.
Допустим, необходимо для еще не выполненных заказов, стоимость доставки которых больше 30, установить новую дату исполнения на 1 января 1999 года и, по возможности, уменьшить скидку на 1%.
Откройте новый запрос в режиме конструктора и добавьте в него таблицы Заказы и Заказано. Эти таблицы связаны между собой на уровне базы данных по полям КодЗаказа. Измените тип запроса на запрос на обновление. В бланк запроса добавьте следующие поля:
Дата Назначения из таблицы Заказы, значение обновления — #01.01.99#.
Скидка из таблицы Заказано, значение обновления — IIf([Скидка]<0.01; 0; [Скидка]-0.01).
СтоимостьДоставки из таблицы Заказы, условие отбора — >30.
Дата Исполнения из таблицы Заказы, условие отбора — Is Null.
Полученный запрос изображен на рис. 5.2.
|
|
Рис. 5.2. Запрос на обновление полей двух связанных таблиц.
Пояснения
а). Поле Скидка таблицы Заказано имеет формат поля процентный, поэтому значение 0.01 этого поля соответствует 1%.
б). Смысл функции IIf(), использованной в запросе, следующий: если скидка меньше 1%, то она обнуляется, иначе уменьшается на 1%.
