No Image

Создание запроса на удаление в access

СОДЕРЖАНИЕ
601 просмотров
10 марта 2020

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

Если две таблицы связаны отношением "один-ко-многим", нельзя удалять записи из таблицы "один" если в таблице "многие" присутствуют соответствующие им записи. Сначала должны быть удалены записи в таблице "многие" и только потом — соответствующие им записи в таблице "один". Для того чтобы упростить этот процесс, 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

Сегодня поговорим на тему «Запрос на удаление 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). При выполнении запроса будет сообщено об удалении одной записи. Откройте таблицу ПОКУПАТЕЛЬ и подчиненные ей таблицы на всех уровнях и убедитесь, что в них также удалены записи, связанные с этим покупателем.
    Результаты работы запроса на удаление зависят от отношений между таблицами и установленных в схеме базы данных параметров обеспечения целостности для их связей.
Читайте также:  List index out of bounds перевод


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

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

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

Если необходимо удалить всего несколько записей, использовать запрос не нужно. Можно открыть таблицу в режиме таблицы, выбрать поля (столбцы) или записи (строки), которые требуется удалить, и нажать клавишу DELETE.

Важно: Эта статья относится только к базам данных рабочего стола. Запросы на удаление и обновление невозможно использовать в веб-приложениях Access.

В этой статье

Выбор типа запроса

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

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

Удаление всех записей (строк) из таблицы или двух связанных таблиц одновременно.

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

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

Запрос на обновление

Удаление отдельных полей из таблицы.

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

Что необходимо проверить перед использованием запроса на удаление любых данных

Убедитесь, что файл не открыт в режиме только для чтения.

Щелкните правой кнопкой мыши кнопку Пуск и откройте проводник Windows.

Щелкните файл базы данных правой кнопкой мыши и выберите пункт Свойства.

Проверьте, не выбран ли параметр Только для чтения.

Проверьте наличие необходимых разрешений на удаление записей из базы данных. При необходимости обратитесь к системному администратору или разработчику базы данных.

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

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

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

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

Открытие базы данных в монопольном режиме

Откройте вкладку Файл и выберите пункт Открыть.

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

Создание резервной копии базы данных

Откройте вкладку Файл и выберите пункт Сохранить как.

В разделе Сохранить базу данных как выберите пункт Резервная копия базы данных. Приложение Access закроет исходный файл, создаст резервную копию и снова его откроет.

Нажмите кнопку Сохранить как и укажите имя и расположение для резервной копии, а затем нажмите кнопку Сохранить.

Примечание: При использовании базы данных, доступной только для чтения или созданной в более ранней версии приложения Аccess, может появиться сообщение о том, что резервную копию создать невозможно.

Читайте также:  Intel core tm 2 quad processor q9650

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

Использование запроса на удаление

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

Таблица будет отображена в верхней части бланка запроса. В списке полей дважды щелкните звездочку ( *), чтобы добавить все поля таблицы в бланк запроса.

Использование специальных условий в запросе на удаление

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

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

Рассмотрим пример использования этого параметра. Допустим, необходимо удалить все невыполненные заказы клиента. Чтобы найти записи, необходимо заполнить поля "Код заказчика" и "Дата заказа" в бланке запроса, а потом ввести код заказчика и дату, когда заказы этого клиента стали недействительным.

На вкладке Конструктор выберите команду Режим > Режим таблицы.

Убедитесь, что выбраны записи, которые требуется удалить, а затем нажмите клавиши CTRL+S, чтобы сохранить запрос.

Для выполнения запроса дважды щелкните его в области навигации.

Использование запроса на обновление

Примечание: Запросы на обновление невозможно использовать в веб-приложениях Access.

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

На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

Выберите таблицу с данными, которые вы хотите удалить (если таблица связана, выберите таблицу на стороне отношения "один"), нажмите кнопку Добавить, а затем — Закрыть.

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

Чтобы добавить все поля в бланк запроса, дважды щелкните звездочку ( *). Это позволит удалить все записи (строки) из таблицы.

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

Примечание: Условия служат для выбора только тех записей, которые необходимо изменить. В противном случае запрос на обновление изменит все записи в полях запроса на значение NULL.

На вкладке Конструктор в группе Результаты выберите команду Режим, а затем — Режим таблицы.

Убедитесь, что выбраны записи, вместо которых нужно вставить значение NULL или строку нулевой длины (пару двойных кавычек без пробела между ними ( "").

При необходимости повторяйте шаги 3–5, изменяя поля или условия отбора, пока не будут выбраны только те данные, которые нужно удалить. После этого нажмите клавиши CTRL+S, чтобы сохранить запрос.

Для выполнения запроса дважды щелкните его в области навигации.

Дополнительные сведения

Удаление данных из связанных таблиц

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

Определите, какие из записей находятся на стороне отношения "один", а какие — на стороне "многие".

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

Если вам нужно удалить данные только на стороне отношения "один", сначала удалите отношение, а затем — данные.

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

Чтобы узнать, какие записи находятся на сторонах отношения "один" и "многие", на вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных. Вкладка Схема данных отображает таблицы в базе данных и связи между ними. Каждая связь изображается линией, соединяющей поля таблиц.

На рисунке ниже изображена типичная связь. В большинстве связей (если не во всех) присутствует сторона "один" и сторона "многие". В схеме связей сторона "один" обозначается единицей ( 1), а сторона "многие" — знаком бесконечности ( ∞).

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

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

Изменение связи

Следующие инструкции выполняются только если необходимо удалить данные на сторонах отношения "один" и "многие".

На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.

Читайте также:  Сохраняется ли трансляция в вк

Щелкните правой кнопкой мыши связь (линию) между таблицами, включенными в операцию удаления, и выберите в контекстном меню команду Изменить связь.

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

Установите флажок Каскадное удаление связанных записей.

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

Нажмите кнопку OK и закройте область Схема данных. После этого можно перейти к дальнейшим действиям.

Удаление связи

Откройте область Схема данных, если она закрыта.

На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.

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

Щелкните правой кнопкой мыши связь (линию) между таблицами, включенными в операцию удаления, и выберите в контекстном меню команду Удалить.

Примечание: Чтобы восстановить связь, откройте область Схема данных, как показано выше, и перетащите поле первичного ключа из таблицы "один" на поле внешнего ключа таблицы "многие". Будет открыто диалоговое окно Изменение связей. Если в исходном отношении была включена целостность данных, установите флажок Обеспечение целостности данных и нажмите кнопку Создать. В противном случае просто нажмите кнопку Создать.

Примеры условий отбора для запросов

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

Возвращает все числа больше 234. Чтобы найти все числа меньше 234, используйте условие = "Новосибирск"

Выбирает все записи от "Новосибирск" до конца алфавита.

Between #02.02.2010# And #12.01.2010#

Выбирает даты между 2-фев-2010 и 1-дек-2010 (ANSI-89). Если в базе данных применяется набор подстановочных знаков ANSI-92, используйте вместо знака решетки ( #) одинарные кавычки (‘). Пример: Between ‘02.02.2010’ And ‘12.01.2010’.

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

Находит все записи, кроме тех, которые начинаются с буквы "Т". Если в базе данных применяется набор подстановочных знаков ANSI-92, используйте знак процента ( %) вместо знака звездочки ( *).

Находит все записи, которые не оканчиваются буквой "т". Если в базе данных применяются подстановочные знаки ANSI-92, используйте знак процента (%) вместо звездочки (*).

Находит все записи в списке со словами "Канада" или "Великобритания".

Находит в поле с типом данных "Текстовые" все записи, начинающиеся с букв "А–Г". Если в базе данных используются подстановочные знаки ANSI-92, используйте знак процента (%) вместо знака звездочки (*).

Находит все записи, которые содержат сочетание букв "тр". Если в базе данных применяются подстановочные знаки ANSI-92, используйте знак процента (%) вместо звездочки (*).

Like "Григорий Верны?"

Находит все записи, начинающиеся с имени "Григорий" и содержащие вторую строку из 9 букв, из которых 6 букв составляют начало фамилии "Верный", а последняя буква неизвестна. Если в базе данных применяется набор подстановочных знаков ANSI-92, используйте вместо вопросительного знака ( ?) знак подчеркивания ( _).

Находит все записи для 2 февраля 2010 г. Если в базе данных используются подстановочные знаки ANSI-92, необходимо заключить дату в одинарные кавычки вместо знаков решетки (‘2.2.2010’).

Date для возврата всех дат не менее 30-дневной давности.

Использует функцию Date для возврата всех записей, содержащих текущую дату.

Between Date( ) And DateAdd("M", 3, Date( ))

Использует функции Date и DateAdd которые возвращают все записи между текущей датой и датой на три месяца позже.

Возвращает все записи, содержащие пустое (незаполненное или неопределенное) значение.

Выбирает все записи с любым (не пустым) значением.

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

Советы по устранению неполадок

Почему на экране может появиться это сообщение об ошибке, и как его исправить?

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

Чтобы решить эту проблему, задайте для свойства запроса Уникальные значения значение Да.

Откройте запрос на удаление в конструкторе.

Если окно свойств запроса не открыто, нажмите для его открытия клавишу F4.

Щелкните конструктор запросов, чтобы в окне свойств отображались свойства запроса, а не свойства поля.

В окне свойств найдите свойство Уникальные значения и назначьте ему значение Да.

Выполнение запроса, заблокированного из-за режима отключения содержимого

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

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

Данное действие или событие заблокировано в режиме отключения.

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

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

Комментировать
601 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock
detector