Как сделать удаление в access?

Сегодня поговорим на тему «Запрос на удаление Access». Запрос на удаление Access может быть использован для удаления данных в полях базовых таблиц. Запрос на удаление (Delete Query) позволяет удалить записи из одной таблицы или из нескольких взаимосвязанных таблиц, для связи с которыми установлен параметр обеспечения целостности данных каскадное удаление связанных записей (Cascade Delete Related Records). В схему данных запроса включается таблица, из которой должны удаляться записи, и связанные с ней таблицы, для полей которых требуется задать условия отбора удаляемых записей.

Задача. Пусть необходимо из справочника удалить запись о покупателе с кодом П003. В схеме данных базы Поставка товаров для всех связей установлен параметр обеспечения целостности каскадное удаление связанных записей (Cascade Delete Related Records), поэтому удаление записи из таблицы ПОКУПАТЕЛЬ повлечет за собой удаление из базы всех подчиненных ему записей на всех уровнях иерархии. Автоматически будут удалены все договоры этого покупателя, а также все накладные, выписанные по этим договорам, т. е. будут удалены связанные записи из таблиц ДОГОВОР, ПОСТАВКА_ПЛАН, НАКЛАДНАЯ и ОТГРУЗКА.

  1. Создайте запрос на выборку. Добавьте в схему данных запроса таблицу ПОКУПАТЕЛЬ, из которой удаляются записи.
  2. Преобразуйте запрос на выборку в запрос на удаление, выбрав на вкладке ленты Конструктор (Design) тип запроса Удаление (Delete) или выполнив команду контекстного меню запроса Тип запроса | Удаление (Query Type | Delete).
  3. После преобразования запроса в запрос на удаление Access в его бланке появляется строка Удаление (Delete) (рис. 4.49).
  4. Далее приступайте к формированию бланка запроса. Переместите символ звездочки (*) из списка полей таблицы ПОКУПАТЕЛЬ в бланк запроса. В строке Удаление (Delete) в столбце этого поля появляется значение Из (From).
  5. Для того чтобы задать условия отбора удаляемых записей, переместите с помощью мыши в бланк запроса поле КОД_ПОК из таблицы ПОКУПАТЕЛЬ. В строке Удаление (Delete) под именем этого поля появится значение Условие (Where). Запишите в строку Условие отбора (Criteria) для этого поля значение П003.
  6. Следует иметь в виду, что удаленные записи нельзя восстановить. Поэтому перед удалением записей выполните предварительный просмотр удаляемых записей, нажав кнопку Режим (View) на вкладке ленты.
  7.  Для удаления записей на вкладке ленты нажмите кнопку Выполнить (Run). При выполнении запроса будет сообщено об удалении одной записи. Откройте таблицу ПОКУПАТЕЛЬ и подчиненные ей таблицы на всех уровнях и убедитесь, что в них также удалены записи, связанные с этим покупателем.
    Результаты работы запроса на удаление зависят от отношений между таблицами и установленных в схеме базы данных параметров обеспечения целостности для их связей.

как сделать удаление в access
Если параметры обеспечения целостности для связей таблицы не установлены вообще, то записи удаляются только в указанной в бланке запроса таблице и вне зависимости от ее логических связей.
Если в запросе объединяются две или более таблиц, находящихся в отношении 1 : М, то удалить можно только записи одной из таблиц на стороне «многие».
Если между таблицами, находящимися в отношении 1 : М, установлена связь с поддержанием целостности, но не задан параметр каскадное удаление связанных записей (Cascade Delete Related Records), сначала необходимо удалить записи подчиненной таблицы и только после этого можно выполнить удаление записей в главной таблице. То есть удаление записи главной таблицы возможно только, если в подчиненной таблице нет связанных записей. Если параметр каскадное удаление связанных записей (Cascade Delete Related Records) задан, то для удаления записей главной таблицы и связанных с ними подчиненных записей достаточно указать в запросе удаление записей главной таблицы.
Откройте запрос на удаление Access, представленный на рис. 4.49, в режиме конструктора и перейдите в режим SQL. Эквивалентная этому запросу инструкция DELETE будет записана следующим образом:
DELETE ПОКУПАТЕЛЬ.*, ПОКУПАТЕЛЬ.КОД_ПОК
FROM ПОКУПАТЕЛЬ
WHERE (((ПОКУПАТЕЛЬ.КОД_ПОК)=»П003″));
Инструкция DELETE удаляет из таблицы записи, удовлетворяющие условию отбора, заданному в предложении WHERE. Если в предложении FROM объединяется две или более таблиц, то удалить можно только записи одной из таблиц. Для того чтобы указать, из какой именно таблицы должны быть удалены записи, в список полей включается конструкция имя_таблицы.* (например, ПОСТАВКА_ПЛАН.*). Для однотабличного запроса эта конструкция может быть опущена.
Для закрепления темы «Запрос на удаление Access» смотрим видеоурок:

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

Если две таблицы связаны отношением «один-ко-многим», нельзя удалять записи из таблицы «один» если в таблице «многие» присутствуют соответствующие им записи. Сначала должны быть удалены записи в таблице «многие» и только потом — соответствующие им записи в таблице «один». Для того чтобы упростить этот процесс, Access позволяет при определении связей между таблицами установить флажок каскадное удаление связанных записей (Cascade Delete Related Records). Такой флажок установлен, например, для связи таблиц «Заказы» (Orders) и «Заказано» (Order Details). Действительно, если требуется удалить из базы данных какой-то заказ, должны быть удалены не только запись об этом заказе в таблице «Заказы», но ч все позиции данного заказа в таблице «Заказано».

Для создания запроса на удаления мы воспользуемся уже имеющимся запросом на добавление записей «Копирование заказов».

  1. Откройте этот запрос в режиме Конструктора.
  2. Чтобы преобразовать запрос на добавление в запрос на удаление записей, выберите команду Запрос, Удаление (Query, Delete Query). В бланке запроса появится строка Удаление (Delete) (рис. 8.11). В первом столбце строки Удаление (Delete) показывается значение Из (From), которое указывает, что будут удаляться записи из таблицы «Заказы». Во втором столбце строки Удаление (Delete) вы видите значение Условие (Where), что указывает на использование этого столбца для определения критерия отбора удаляемых записей.

Рис. 8.11. Запрос на удаление записей из таблицы «Заказы»

  1. Нажмите кнопку Запуск (Run). Выводятся сообщение с приглашением подтвердить удаление записей и информация о количестве записей, которые будут удалены. Их будет столько же, сколько было отобрано в соответствующем запросе на добавление. В этот момент еще можно отменить удаление, для чего достаточно нажать кнопку Нет (No) в окне сообщения. Нажмите кнопку Да (Yes), подтверждая удаление. Будут удалены все заказы за 1996 год из таблицы «Заказы» (Orders) и все позиции заказов из таблицы «Заказано» (Order Details). Вы можете убедиться в этом, если откроете таблицу «Заказано».
  2. Сохраните запрос, дав ему имя: Удаление заказов.

Однако такое каскадное удаление записей не всегда возможно. Например, для рассмотренной нами в предыдущем разделе связи таблиц «Сотрудники» и «Заказы» нельзя устанавливать флажок каскадное удаление связанных записей (Cascade Delete Related Records), т. к. удаление записи о сотруднике из таблицы «Сотрудники» не должно повлечь за собой удаление всех его заказов. Если вы попытаетесь удалить какую-либо запись о сотруднике и в таблице «Заказы» (Orders) окажутся заказы, принятые этим сотрудником, Access выдаст сообщение об ошибке (рис. 8.12).

Рис. 8.12. Запрос на удаление

Замечание

Для того чтобы выполнялась автоматическая проверка целостности данных, не забудьте для всех связей в базе данных установить флажок Обеспечение целостности данных (Enforce Referential Integrity).

Для того чтобы упростить этот процесс, Access позволяет при определении связей между таблицами установить флажок Cascade Delete Related Records (каскадное удаление связанных записей).

Для создания запроса на удаления мы воспользуемся ранее созданным запросом на добавление записей «Arhiiv2005».

  1. Откройте этот запрос в режиме Конструктора. Данный запрос построен на основе таблицы «Koolitus».
  2. Чтобы преобразовать запрос на добавление записей в запрос на удаление записей, щелкните на кнопке Удаление.

как сделать удаление в access

В бланке запроса появится строка Delete (Удаление), в которой вы видите значение Where (Условие), что указывает на использование этого столбца для определения критерия отбора удаляемых записей.

3. Пересохраните запрос, дав ему имя: Delete_2005. С помоью созданного нами запроса мы сможем удалить все курсы в таблице «Koolitus», которые прошли в 2005 году.

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

как сделать удаление в access

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

как сделать удаление в access

Их будет столько же, сколько было отобрано в соответствующем запросе на добавление. В этот момент еще можно отменить удаление, для чего достаточно нажать кнопку No (Нет) в окне сообщения.

5. Нажмите кнопку Yes(Да), подтверждая удаление. Будут удалены все записи за 2005 год из таблицы «Koolitus» (Обучение). Вы можете убедиться в этом, если откроете таблицу «Koolitus».

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

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

В принципе можно удалить запись из БД и без помощи запроса, а непосредственно из формы, как описывалось в главе 4. Кроме того, можно просто открыть таблицу и удалить выбранную запись. Однако суть проблемы именно в этом слове – «выбранная». Когда число записей в таблице растет и их счет идет на тысячи, определение «жертвы» превращается в сложное и трудоемкое мероприятие. Использование запроса на выборку помогает решить такую задачу.

В окне конструктора создайте обычный запрос на выборку (см. рис. 11.4). Затем с помощью уже хорошо известной вам кнопки

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

Так как речь идет о базе данных по ЧС, то в ней не предусмотрено накопление и хранение информации о дорожно-транспортных происшествиях – подобные сведения должны содержаться в другом банке данных. Однако по разным причинам в нашу базу данных (в частности, в таблицу ES_OPER) такая информация иногда попадает. Пользы от этого все равно нет, потому что случайные разрозненные записи не дают полной картины по дорожно-транспортным происшествиям. Естественно, такие сведения следует удалять. В бланке запроса в ячейке Условия отбора для поля Код вида ЧС введите код данного типа происшествий – «10101» (рис. 11.47).

Рис. 11.47

Дайте команду на выполнение запроса. На экране появится сообщение о том, что удалению подлежит 556 записей (см. рис. 11.48), и предупреждение, что если вы ответите Да, то назад возврата не будет. Надеемся, что вы исполнены самых серьезных намерений и решительно ответите Да, приведя приговор в исполнение. Таким образом, вы реализуете запрос на удаление, убрав 556 записей, или 6,6 % от общего числа записей в таблице ES_OPER (8397).

Рис. 11.48

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