Access запрос на удаление записей - IT Новости из мира ПК
Semenalidery.com

IT Новости из мира ПК
38 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

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, удобно воспользоваться запросом на удаление или обновление: в этом случае можно указать условия для быстрого поиска и удаления информации. Кроме того, с помощью запросов вы сэкономите время, потому что их можно повторно использовать после сохранения.

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

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

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

В этой статье

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать еще:  Объекты ms access

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример использования этого параметра: Предположим, вы хотите удалить все ожидающие заказы для клиента. Чтобы найти только те записи, в бланк запроса нужно добавить поля «код заказчика» и «Дата заказа», а затем ввести ИДЕНТИФИКАЦИОНный номер клиента и дату, на которую заказы клиента стали недействительными.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать еще:  Access открытие формы при запуске

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Запросы удаления и замены. Перекрестные запросы

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

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

В Access имеются запросы, позволяющие изменять и удалять записи.

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

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

Задание.

  1. Из таблицы ЗАКАЗ удалить все записи для данного покупателя. Фамилию покупателя вводить как параметр.
  2. Из таблицы ЗАКАЗ удалите все записи, соответствующие названию введенного товара.

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

Для выполнения запросов замены на Ленте Конструктор в разделе Тип Запроса необходимо выбрать Обновление.

Задание. Создайте запросы

  1. “Инфляция”, увеличивающий все цены на 10% на основе поля Цена таблицы ТОВАР.
  2. “Уценка” для таблицы ТОВАР. Для товаров, стоимость которых меньше 50 р, уменьшите стоимость на заданное число процентов.

Перекрестные запросы

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

Создадим запрос, выводящий сколько каких товаров купили покупатели. Для этого из таблицы ЗАКАЗ выбираем поля Код покупателя, Код товара, количество товара. Выбрав кнопку Итоги, задаем Группировка – Sum. Далее на Ленте Конструктор в разделе Тип Запроса выбираем Перекрестный. Затем для Кода покупателя в строке Перекрестная таблица задаем режим Заголовки строк, для Кода товараЗаголовки столбцов, для Количества товараЗначение. Все готово, выполним запрос, получим искомую таблицу.

Пример выполнения запроса приведен на рисунке.

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

  1. Модифицируйте предыдущий запрос, выведя вместо кодов фамилии покупателей и названия товаров.
  2. В предыдущем примере поменяйте местами строки и столбцы.
  3. Добавить условие – вывод итогов после определенной даты, дату вводить как параметр.
  4. Придумать пример с операцией Count.

Связанные статьи

Рекомендую прочесть статьи, связанные с данной:

Создание и использование запроса на удаление в СУБД Access

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

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

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

Читать еще:  Объединение таблиц в access

Создание и использование запроса на создание новой таблицы в СУБД Access

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

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

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

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

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

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

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

Дата добавления: 2018-04-15 ; просмотров: 179 ;

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

Есть таблица из трёх полей (формат: длинное целое). Столбцы: магазин, чек, категория_товара.
Нужно удалить полностью повтояющиеся записи, то есть те, для которых значения по всем трём столбцам совпадают. Всмысле, удалить повторы, оставив только одну запись из множества идентичных.

Буду благодерен за идеи.

Т.е. выбираем из дублей c минимальным ID (можно с максимальным), и удаляем все другие.

ЗЫ: вообще-то SQL плохо оперирует с полными дублями по всем полям записям — сама идея языка такова, что для него это одни и те же записи.

Спасибо, запрос работает. Только очень долго. У меня 13 таблиц по 40-50 тысяч записей . Если SQL не очень подходит, не намекнёте, в чём можно реализовать подобную процедуру? Пробовал VBA в Excel, простой макрос записывающий в 3-х мерный массив, а затем сравнивающий его элементы — НЕВЕРОЯТНО долго. SQL всё же быстрее.

Спасибо большое за совет!

По поводу удаления дублей — можно попытаться упорядочить (при помощи того же SQL) записи по полям, по которым требуется уникальность, и пробежаться по результату в VBA, сравнивая значения у этих полей у текущей записи со значениями предыдущей записи (их в конце каждого прохода цикла нужно сохранить в переменные, а перед циклом проиницилизировать значениями, которых точно нет в таблице — может значения -1 подойдут). Если значение совпадает с предыдущей — удаляем запись. НО: 1) не уверен, что это будет быстрее работать, чем запрос, приведенный выше; 2) не знаю как написать такое на VBA-Access (я с Access’ом вообще слабо знаком).

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

Доброе время суток!

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

Имеется таблица, содержащая 6 полей — field1..field6
Необходимо удалить повторы, которые определяются полями 2,3 и 5. Остальные поля несущественны для отбора, но должны присутствовать в получаемой таблице.
Т.е. если поля 2,3,5 совпадают, то мы считаем эту запись «повтором», и неважно, какие значения в остальных полях.

Делаю так:
INSERT INTO Table2
SELECT DISTINCT field2, field3, field5
FROM Table1

Затем очищаю Table1:
DELETE * FROM Table1

Копирую отобранные записи обратно:
INSERT INTO Table1 SELECT * FROM Table2

В результате получаю Table1 с уникальными записями, но поля 1,4 и 6 пустые.

Собственно вопрос: как добиться заполнения этих полей, чтобы они не влияли на результаты отбора, а просто копировались?

P.S. Извиняюсь за «некропостинг», но имхо это лучше, чем плодить кучу похожих тем

Доброе время суток!

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

Имеется таблица, содержащая 6 полей — field1..field6
Необходимо удалить повторы, которые определяются полями 2,3 и 5. Остальные поля несущественны для отбора, но должны присутствовать в получаемой таблице.
Т.е. если поля 2,3,5 совпадают, то мы считаем эту запись «повтором», и неважно, какие значения в остальных полях.

Делаю так:
INSERT INTO Table2
SELECT DISTINCT field2, field3, field5
FROM Table1

Затем очищаю Table1:
DELETE * FROM Table1

Копирую отобранные записи обратно:
INSERT INTO Table1 SELECT * FROM Table2

В результате получаю Table1 с уникальными записями, но поля 1,4 и 6 пустые.

Собственно вопрос: как добиться заполнения этих полей, чтобы они не влияли на результаты отбора, а просто копировались?

P.S. Извиняюсь за «некропостинг», но имхо это лучше, чем плодить кучу похожих тем

Ссылка на основную публикацию
Adblock
detector