Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Access часть2.doc
Скачиваний:
24
Добавлен:
14.08.2019
Размер:
6.24 Mб
Скачать

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%.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]