Как сделать запрос на изменение в access?

В этой статье поговорим про запросы на изменение Access. К запросам на изменение относятся запросы на обновление данных в записях таблицы базы, на добавление и удаление записей из таблицы, а также запросы на создание таблицы из записей, сформированных в нем.
Чтобы создать запросы на изменение Access, используется конструктор. Процесс создания любого запроса на изменение начинается с создания запроса на выборку, который после добавления в него необходимых таблиц преобразуется в нужный запрос на изменение.
По умолчанию Access 2010 в целях обеспечения безопасности, как правило, блокирует выполнение всех запросов на изменение. Если при выполнении запроса на изменение ничего не происходит, проверьте, не появляется ли в строке состояния Access сообщение: «Данное действие или событие заблокировано в режиме отключения».
Если отображается это сообщение и панель сообщений (Message Bar) (рис. 4.39), для включения заблокированных запросов можно нажать на ней кнопку Включить содержимое (Enable content). После этого выполнение запроса будет доступным.
как сделать запрос на изменение в access
Если панель сообщений была закрыта и больше не отображается, перейдите на вкладку Файл (File) и на открытой странице Сведения (Info) в блоке Предупреждение системы безопасности (Security Warning) нажмите кнопку Включить содержимое (Enable Content) (рис. 4.40).
как сделать запрос на изменение в access
В открывшемся списке (рис. 4.41) можно Включить все содержимое (Enable All Content) открытой базы данных. Это приведет к тому, что при повторных открытиях базы ни панели сообщения, ни сообщений о невозможности выполнения запроса действия выводиться не будет, т. к. база данных будет отнесена к разряду надежных. То же самое происходит, если была нажата кнопка Включить содержимое (Enable content) на панели сообщений.
Выбор строки Дополнительные параметры (Advanced Otions) открывает окно параметров безопасности Microsoft Office, в котором можно включить опасное содержимое только на время сеанса. При следующем открытии базы данных опять появится панель сообщений и, если не включать содержимое, запросы действия выполняться не будут.
как сделать запрос на изменение в access
Чтобы вернуть возможность управления содержимым, откройте окно Параметры Access (Access Options) соответствующей командой на вкладке ленты Файл (File), щелкните на строке Центр управления безопасностью (Trust Center) и далее по кнопке Параметры центра управления безопасностью (Trust Center Settings). В окне центра на странице Надежные документы (Trusted Documents) в строке Сбросить пометку о надежности для всех надежных документов (Cliar all Trusted Documents so that they are no longer trusted) нажмите кнопку Очистить (Clear).

ВНИМАНИЕ!
Единое средство вывода предупреждений системы безопасности — панель сообщений — по умолчанию появляется при открытии базы данных Access 2010 вне доверенного расположения. Если точно известно, что можно доверять содержимому базы данных, включите все отключенные потенциально опасные активные компоненты — запросы на изменение, макросы, элементы управления ActiveX, некоторые выражения и программы на VBA — при открытии базы данных, содержащей один или несколько этих компонентов.

Для закрепления смотрим видеоурок:

Далее узнаем про запрос на создание таблицы Access.

Запросы на изменение

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

Существует четыре вида запросов на изменение:

• запрос на создание таблицы – создает новую таблицу на основе данных, которые уже размещены в одной или нескольких таблицах;

• запрос на удаление – удаляет записи из одной или нескольких таблиц на основании критериев, заданных в запросе;

• запрос на добавление – добавляет записи целиком или только указанные поля в одну или несколько таблиц;

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

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

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

При составлении запросов могут использоваться объединение таблиц, параметры, функции, рассмотренные для создания запросов в предыдущей главе.

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

Если при попытке выполнения запроса на изменение ничего не происходит, проверьте, не появляется ли в строке состояния следующее сообщение: Данное действие или событие заблокировано в режиме отключения (рис. 6.1).

Рис. 6.1. Строка состояния при заблокированном содержимом

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

1. На панели сообщений нажмите кнопку Параметры . Откроется окно Параметры безопасности Microsoft Office (рис. 6.2).

Рис. 6.2. Окно Параметры безопасности Microsoft Office

2. Установите переключатель в положение Включить это содержимое .

3. Нажмите кнопку ОК .

4. Перезапустите запрос.

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

Следующая глава >

Запросы на обновление используются главным образом для того, чтобы внести изменения сразу в большое количество записей с помощью одного запроса. Классическим примером такого запроса является изменение цены в таблице «Товары» (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).

Рис. 8.9. Диалоговое окно Изменение связей

Для выполнения каскадного обновления:

  1. Откройте таблицы «Сотрудники (копия)» и «Заказы (копия)» и разместите их на экране так, чтобы были видны обе таблицы (рис 8.10).
  2. Отсортируйте таблицу «Заказы (копия)» по столбцу «Сотрудник». Для этого выделите данный столбец, щелкнув левой кнопкой мыши по его заголовку, и нажмите кнопку Сортировка по возрастанию (Sort Ascending) на панели инструментов.
  3. Измените значение в столбце «Код сотрудника» первой записи таблицы «Сотрудники (копия)», введя число 10, и нажмите клавишу , чтобы перейти к следующей записи. Изменение кода сразу же будет отображено в столбце «Сотрудник» таблицы «Заказы (копия)».

Рис. 8.10. Каскадное обновление записей

Цель работы: в среде СУБД ACCESS освоить следующие приемы:

    Теоретические положения

    Существует четыре типа запросов на изменение.

      Понятие запросов-действий

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

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

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

      Создание таблицы. Этот запрос позволяет сохранить набор данных, вышедших в ответ на запрос, в виде таблицы.

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

      Удаление. Используется для удаления всех записей, вышедших в ответ на запрос.

      Добавление. Используется для добавления данных в имеющуюся таблицу.

      ACCESS отмечает запросы-действия специальными значками

      1. Особенности работы с запросами-действиями

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

      Для создания резервной копии таблицы необходимо перейти в окно базы данных, выбрать таблицу, в которой произойдут изменения, а затем воспользоваться командой Правка/Копировать. Затем выполнить команду Правка/Вставить, и в диалоговом окне указать имя для копии таблицы.

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

      Новый запрос желательно создать вначале как запрос на выборку. Так вы сможете проверить правильность отбора записей.

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

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

      2. Запросы на создание таблицы

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

      Например, сводную информацию по годам необходимо хранить в течение 5 лет. Для этого создается итоговый запрос и результат его выполнения сохраняется в виде отдельной таблицы. Для этого в режиме Конструктора запросов нужно выбрать команду Запрос/Создание таблицы.

      Access выведет на экран диалоговое окно «Создание таблицы», где нужно указать имя таблицы, в которой будут сохранены результаты выборки

      3. Запросы на обновление записей

      Этот тип запросов-действий предназначен для изменения значений некоторых полей для всех выбранных записей. После входа в режим Конструктора запроса нужно выбрать команду Запрос/Обновление. После этого в бланке запроса появится строка Обновление. Эта строка используется для того, чтобы задать новые значения для выбранных записей.

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

      4. Запрос на удаление записей

      Этот вид запросов служит для удаления группы записей базы данных, удовлетворяющих определенным условиям. Обычный запрос можно преобразовать в запрос на удаление с помощьюкоманды Запрос/Удаление в режиме Конструктора запросов. При этом в бланке запроса появится строка Удаление, где можно ввести условие для удаления записей

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

      Если в результате запроса присутствуют только подлежащие удалению записи, следует преобразовать его в запрос на удаление.

      Удаление записей может привести к непредсказуемым результатам, в том числе и к нарушению целостности базы данных, по следующим причинам:

      — Таблица является частью отношения один-ко-многим

      — В качестве условия обеспечения целостности данных использована опция Каскадное удаление связанных полей.

      Например, вы решили исключить каких-то студентов и удалить соответствующие записи из таблицы Студенты. При этом существует также таблица Экзамены, которая связана с таблицей Студенты, отношением один – ко многим. Если для обеспечения целостности данных выбрана опция Каскадное удаление связанных полей, в результате удаления записей о студентах будут удалены записи об их оценках, то есть информация об успеваемости!

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

      5. Запрос на добавление записей

      С помощью запроса на добавление записей можно скопировать выбранные записи и поместить их в другую таблицу. Можно также использовать запрос на добавление для переноса данных в используемую базу данных из другого источника (из какой-либо другой таблицы).

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

      Если необходимо добавить записи к таблице в другой базе данных, сначала следует присоединить таблицу-источник к базе, содержащей целевую таблицу, с помощью команды Файл/Внешние данные/Связь с таблицами. Для отбора добавляемых записей нужно составить запрос на выборку. Затем надлежит выполнить составленный запрос и оценить результат, переключившись в режим таблицы с помощью команды Вид/Режим таблицы. После этого необходимо вернуться в режим Конструктора и активизировать команду Запрос/Добавление.

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

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

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

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

      Выполнение работы

      Часть 1

      Откройте базу данных Борей, вкладку Запросы.

      Разработка запроса на создание таблицы

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

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

        Фирма Борей решила поднять цены на молочные продукты на 10% по отношению к установленным ранее. Необходимо внести изменения в таблицу Товары.

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

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

            Добавим товары из таблицы Неперспективные товары, имеющиеся на складе, в таблицу Товары.

              Если таблица находится в открытой в настоящий момент базе данных(это наш случай), выберите параметр в текущей базе данных.

              Если таблица не находится в открытой в настоящий момент базе данных(это к общему сведению), выберите параметр в другой базе данных и введите имя базы данных, в которой находится таблица, или нажмите кнопку Обзор, чтобы указать путь к базе данных. Можно ввести путь к базе данных Microsoft FoxPro, Paradox или dBASE, а также строку подключения к базе данных SQL.

              ·  Нажмите кнопку OK.

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

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

              ·  Для полей, перемещенных в бланк запроса, введите в ячейку Условие отбора условие отбора, по которому будет осуществляться добавление. Нашим условием является наличие товара на складе, т. е. в поле НаСкладе в строке Условие отбора введем условие >0

              ·  Для предварительного просмотра добавляемых записей нажмите кнопку Вид на панели инструментов. Для возврата в режим конструктора снова нажмите кнопку Вид на панели инструментов.

              ·  Для добавления записей нажмите кнопку Запуск на панели инструментов. Будет выведено сообщение о добавлении записей в таблицу Товары

              ·  Просмотрите таблицу Товары

              Часть 2

              Выполните самостоятельно конструирование запросов действия

              ЗАДАНИЕ На основе таблиц Билеты и Цены сконструировать запросы действия, которые выполняют:

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

              •  удаление записей в таблицах;

              •  обновление записей в таблицах;

              Выполнить и сохранить все запросы под именами Созда­ние, Удаление, Обновление соответственно.

              Контрольные вопросы

              1.  Назовите все виды запросов на изменение данных. В чем особенность этих запросов?

              2.  Для чего предназначен и как создается запрос на создание таблицы?

              3.  Для чего предназначен и как создается запрос на обновление записей?

              4.  Для чего предназначен и как создается запрос на добавление записей?

              5.  Для чего предназначен и как создается запрос на удаление записей?