Запросы на обновление данных. Общие сведения о запросах

Российский университет кооперации

Кафедра информационных технологий

Дисциплина «Информатика»

Подготовила доцент Гудзенчук З.В.

Тема . СУБД Access -запросы на обновление

Общие сведения о запросах

Запросы используются для просмотра,. сортировки, фильтрации, изменения и анализа данных различными способами. Запросы также можно использовать в качестве источников записей для форм, отчетов и страниц доступа к данным

В Access запросы можно создавать в двух режимах:

    QBE (Query By Example) - запросы по образцу, параметры которых устанавливаются в окне конструктора запросов - бланке запроса;

    SQL (Structured Query Language) - структурированный язык запросов, при создании которых применяются операторы и функции языка SQL.

В Access легко переключить запрос из режимаQBE в режимSQL - запроса:

В режиме таблицы Запрос отображает для просмотра результат выполнения запроса.

Типы запросов

В режиме Конструктора тип запроса выбирается щелчком на одной из кнопок группы Тип запроса (таблица 1).

Таблица 1

Кнопка запроса

Тип запроса

Назначение запроса

Создание запроса, который выполняет отбор записей из базы данных и показывает их.

Создание таблицы

Создание запроса, который выполняет отбор записей из базы данных и сохраняет их как новую таблицу

Добавление

Создание запроса, который добавляет данные в существующую таблицу

Обновление

Создание запроса, который изменяет данные в существующей таблице

Перекрестный

Создание запроса, который выполняет сведение данных по двум наборам значений, один из которых отображается в левой части, а другой – в верхней ее части.

Удаление

Создание запроса, который удаляет данные, соответствующие указанным условиям, из существующей таблицы

Объединение

Создание запроса, который организует получение и просмотр данных из нескольких связанных таблиц.

Запрос к серверу

Создание запроса в режиме SQL. При использовании связанных таблиц серверных баз данных, таких как SQL Server или Oracle, может возникнуть необходимость выполнить на сервере запрос, обладающий расширенными возможностями по сравнению с «собственным» языком SQL Access, поддерживаемом сервером.

Управление

Создание запроса определения данных (управляющие запросы) в режиме SQL. В управляющем запросе Access можно использовать инструкции CREATE TABLE (создание таблицы) и ALTER TABLE (изменение структуры таблицы).

Тип запроса на изменение

Запрос на изменения - это запрос, который позволяет, выполнив одну операцию, внести изменения во многие записи. Существует четыре типа запросов на изменение:

    создание таблицы

    удаление записей

    добавление записей

    обновление записей.

Перечисленные типы запросов на изменение позволяют автоматически создавать новые таблицы или изменять базовые таблицы в соответствии с данными результирующих таблиц.

Запросы на обновление используются главным образом для того, чтобы внести изменения сразу в большое количество записей с помощью одного запроса. Классическим примером такого запроса является изменение цены в таблице "Товары" (Products) на некоторый постоянный коэффициент, например можно увеличить цену одной из категорий товара на 20%. Чтобы создать такой запрос:

  1. Раскройте список таблиц, щелкнув мышью по ярлыку Таблицы (Tables) окна базы данных.
  2. Выделите таблицу "Товары" (Products). Щелкните левой кнопкой мыши по стрелке на кнопке Новый объект (New Object) на панели инструментов и выберите из списка значение Запрос (Query). Появится окно Конструктора запросов с таблицей "Товары" в верхней части. Перенесите в бланк запроса поля "Цена" и "КодТипа".
  3. Введите условие отбора записей: например, в столбец "КодТипа" введите значение 1.
  4. Выполните запрос, чтобы убедиться, что отбираются все записи, содержащие напитки.
  5. Теперь изменим запрос, превратив его в запрос на обновление. Для этого выполните команду меню Запрос, Обновление (Query, Update). Изменяется заголовок запроса и появляется дополнительная строка Обновление (Update To). При этом исчезают строки Сортировка (Sort) и Вывод на экран (Show) (рис. 8.8).
  6. Теперь нужно в строку Обновление (Update To) ввести выражение, по которому будет вычисляться новая цена: [Цена]* 0, 2. В других случаях можно вводить константу, например, если нужно поменять дату во многих записях на текущую.
  7. Теперь можно выполнить запрос. Для этого нажмите кнопку Запуск (Run) на панели инструментов. Так же, как и при добавлении записей в таблицу, Access выдаёт сообщение о количестве обновляемых записей и запрашивает подтверждение на обновление. Вы можете подтвердить обновление записей или отвергнуть.

Рис. 8.8.

Прежде чем выполнять запрос на обновление, щелкните левой кнопкой мыши по стрелке на кнопке Вид (View) и выберите Режим таблицы (Datasheet View). Вы увидите все записи, которые будут обновлены, хотя данные в обновляемых полях будут еще старые. И только убедившись, что отобраны нужные записи, можно выполнять запрос.

В приведенном примере изменялись значения в поле, которое не является первичным ключом в таблице "Товары" (Products). Особый случай возникает, когда требуется обновить значение первичного ключа в таблице. Если эта таблица связана отношением "один-ко-многим" с другими таблицами, то при изменении первичного ключа записи должны одновременно измениться значения внешних ключей во всех связанных записях подчиненных таблиц. Access обеспечивает выполнение такого изменения автоматически, т. к. поддерживает каскадное обновление записей. При определении связи между таблицами можно установить флажок (Cascade Update Related Fields).

Если такой флажок установлен, то при изменении значения первичного ключа в главной таблице Access автоматически выполняет специальный запрос, с помощью которого обновляются внешние ключи всех связанных записей в подчиненной таблице.

Убедиться в том, как работает такой запрос, можно на примере таблиц "Сотрудники" (Employees) и "Заказы" (Orders). Для этого нам придется сначала сделать копии этих таблиц и установить связь между ними:

  1. Раскройте список таблиц в окне базы данных и выделите таблицу "Сотрудники".
  2. Скопируйте таблицу в буфер обмена, нажав комбинацию клавиш + .
  3. Вставьте таблицу из буфера обмена, нажав комбинацию клавиш + . Появится диалоговое окно Вставка таблицы (Paste Table As).
  4. В поле Имя таблицы (Table Name) введите строку: Сотрудники (копия). Оставьте предлагаемое по умолчанию значение переключателя в группе Параметры вставки (Paste Options). Нажмите кнопку ОК или клавишу . В списке появится новая таблица.
  5. Выполните шаги 1-4 для таблицы "Заказы", создав таблицу "Заказы (копия)".
  6. Для выполнения примера нам придется немного изменить таблицу "Заказы (копия)". Поле "КодСотрудника" в таблице "Заказы" является полем подстановки, т. е. хотя в этом поле содержатся коды сотрудников, при отображении таблицы в этом поле показываются фамилия и имя сотрудника. Мы можем временно удалить поле подстановки, чтобы видеть результаты каскадного обновления данного поля. Для этого достаточно открыть таблицу "Заказы (копия)" в режиме Конструктора, выделить строку "КодСотрудника", раскрыть в панели Свойства поля (Field Properties) вкладку Подстановка (Lookup) и установить значение свойства Тип источника строк (Row Source Type) равным Поле (Text box). Сохраните изменение.
  7. Еще одно изменение потребуется ввести в таблицу "Сотрудники (копия)". Поле "КодСотрудника" в ней имеет тип Счетчик (AutoNumber), поэтому Access не позволит изменить значение в этом поле. Откройте эту таблицу в режиме Конструктора и замените тип данных для поля "КодСотрудника" на Числовой (Number).
  8. Теперь нужно установить связи между новыми таблицами. Нажмите кнопку Схема данных (Relationships) на панели инструментов для вывода окна Схема данных (Relationships).
  9. Нажмите кнопку Очистить макет (Clear Layout), чтобы очистить окно схемы данных. Подтвердите свое намерение в окне сообщения, нажав кнопку Да (Yes).
  10. Добавьте таблицы "Сотрудники (копия)" и "Заказы (копия)" с помощью диалогового окна Добавление таблицы (Show Table). Для этого нажмите соответствующую кнопку на панели инструментов.
  11. Чтобы установить связь "один-ко-многим" между таблицами, перетащите поле "КодСотрудника" таблицы "Сотрудники (копия)" в соответствующее поле таблицы "Заказы (копия)". Появится диалоговое окно Изменение связей (Edit Relationship).
  12. В этом окне необходимо установить флажки Обеспечение целостности данных (Enforce Referential Integrity) и каскадное обновление связанных полей (Cascade Update Related Fields) (рис. 8.9). Нажмите кнопку ОК.
  13. Закройте окно Схема данных (Relationships).

Запросы на обновление используются главным образом для того, чтобы внести изменения сразу в большое количество записей с помощью одного запроса.

Пример

В качестве примера рассмотрим запрос, который изменяет стоимость курсов обучения в таблице «Kursused» (Курсы) на некоторый постоянный коэффициент, например можно увеличим стоимость всех курсов на 20%.
Чтобы создать такой запрос:

1. в режиме Конструктора выбираем в запрос поля Kursuse_kood, Nimetus, Maksumus из таблицы «Kursused» (Курсы).

2. Выполните запрос, чтобы убедиться, что отбираются все записи.

3. Теперь изменим запрос, превратив его в запрос на обновление. Для этого щелкните на кнопке Обновление . Изменяется заголовок запроса и появляется дополнительная строка (Обновление) . При этом исчезают строки Sort (Сортировка) и Show (Вывод на экран) .

4.Теперь нужно в строку Update To (Обновление) ввести выражение, по которому будет вычисляться новая стоимость: * 1, 2.

В других случаях можно вводить константу, например, если нужно поменять дату во многих записях на текущую.

5. Прежде чем выполнять запрос на обновление, щелкните левой кнопкой мыши по стрелке на кнопке Вид и выберите

Для обновления данных в полях таблиц может быть использован запрос на обновление. Изменения вносятся в группу записей, отбираемых с помощью указанных пользователем условий отбора. Значения для изменений в полях определяются в бланке запроса в поле Обновление.

Например, по ошибке клиент Сириус Медия являющийся на самом деле клиентом ИнвестКапиталБанка был указан как клиент ВТБ 24. Для обновления данных выбираем Создать > Конструктор > Таблицы > Клиенты (Рис.37).

Рисунок 37 - Создание Запроса на обновление в режиме конструктор

Из панели задач выбираем Запрос>Тип запроса>Запрос на обновление. У нас появилась новая строка Обновление (Рис.38).

Рисунок 38 - Выбор типа запроса

Заполняем запрос, выбирая Поле - Наименование, Имя таблицы - Клиент, Обновление - ИнвестКапиталБанк, Условие отбора - ВТБ 24 и указываем клиента - Сириус Медия. Сохраняем изменения и переименовываем Запрос 1 на Запрос на обновление (Рис.39).


Рисунок 39 - Сохранение и переименование Запроса на обновление


Рисунок 40 - Подтверждение запроса на обновление

До сих пор вы сталкивались с запросами, выполняющими выборку данных и некоторые вычисления. Однако запросы могут применяться также для добавления, удаления и обновления группы записей таблицы базы данных Access. Такие запросы являются мощным инструментом преобразования данных, они называются запросами действия. Предположим, что по каким-то причинам вам понадобилось скорректировать даты контактов, заменив во всех записях таблицы Список, относящихся к 1999 году, месяц ноябрь на декабрь. Подобную операцию трудно проделать вручную, если в таблице содержится несколько тысяч записей. Запрос действия позволяет быстро решить поставленную задачу.

1. В окне базы данных Access щелкните на кнопке Таблицы .

2. Выделите таблицу Список, данные которой нужно обновить.

3. В палитре кнопки Новый объект выберите пункт Запрос . Откроется окно диалога Новый запрос , показанное на рис. 17.8. Подобное окно открывается и при щелчке на кнопке Создать окна базы данных. Оно позволяет выбрать наиболее удобный способ создания объекта.

Рис. 17.8. Создание запроса

4. Дважды щелкните на строке Конструктор . Таблица Список, выделенная в окне базы данных на шаге 2, автоматически появится в окне конструктора запросов.

5. Перетащите в бланк запроса поле Дата , значение которого нужно обновлять.

Примечание Название поля, заключенное в квадратные скобки, является ссылкой на значение поля. Чтобы сослаться на поле другой таблицы, нужно в начале указать имя таблицы, а затем имя поля (оба имени в квадратных скобках) и разделить их восклицательным знаком. Например [Контакты]! [Фамилия].

6. В палитре кнопки Тип запроса выберите пункт Обновление . Описание всех возможных вариантов запросов, предлагаемых программой Access, приведено в табл. 17.2. Структура бланка запроса видоизменяется в соответствии с типом запроса. В бланке выбранного варианта запроса на обновление появляется поле Обновление , в которое нужно ввести новое значение поля. Чтобы изменить месяц даты с ноября на декабрь, достаточно прибавить к дате 30 дней.

7. Введите в ячейку Обновление формулу [Дата] +30.

ТАБЛИЦА 17.2. Варианты запросов

Тип Описание
Выборка Выборка данных в таблицу результата запроса на основе указанных условий отбора
Перекрестный Результат запроса выводит статистические значения (сумму, количество или среднее) для одного из полей таблицы в зависимости от двух параметров других полей таблицы, задающих заголовки строк и столбцов результата перекрестного запроса
Создание таблицы Создание новой таблицы в текущей или в другой базе данных на базе информации из имеющихся таблиц
Обновление Обновление данных таблицы
Добавление Добавление набора записей в таблицу
Удаление Удаление записей таблицы в соответствии с указанным критерием

8. Чтобы обновлялись только даты, относящиеся к ноябрю 2000 года, введите в ячейку Условие отбора формулу Between DateValue ("1.11.99") And DateValue ("30.11.99"), которая подробно обсуждалась в ранее (рис. 17.12).

9. Закройте запрос, сохранив его под именем Обновление.

10. Щелкните на кнопке Таблицы окна базы данных и двойным щелчком на значке Список откройте эту таблицу. В ней есть четыре записи, относящиеся к ноябрю 2000 года.

Примечание Запросы действия могут выполнять широкомасштабные изменения данных, которые отменить уже невозможно. Будьте внимательны. Перед запуском таких запросов полезно сделать резервную копию базы данных, чтобы иметь возможность возвратиться к исходному состоянию таблиц. Значки запросов действия снабжены восклицательным знаком, предупреждающим об их особой роли.

11. В окне базы данных щелкните на кнопке Запросы .

12. Дважды щелкните на значке Обновление .

Ответьте Да на вопрос о необходимости запуска запроса действия. Access проинформирует вас об обнаружении четырех записей, удовлетворяющих условию отбора, и попросит подтвердить необходимость их изменения.

13. Щелкните на кнопке Да и изучите изменения, произошедшие с данными таблицы Список.