Создание запроса на удаление в Access
Запрос на удаление в Access позволяет отфильтровать необходимые записи и удалить их из базы данных в один клик. Принцип его создания аналогичен с запросом на обновление, но стирая информацию из связанных таблиц, необходимо следить за тем, чтобы действия не нарушили общую целостность данных.
Так, если в Access между таблицами существует связь «один-ко-многим», то не следует удалять поля из раздела «один», если у них есть связь с записями из таблицы «многие». Процесс удаления должен происходить наоборот. Для упрощения этого действия существует опция «Каскадное удаление связанных записей», которой следует пользоваться при добавлении связей. Подобную команду удобно применять к базе «Заказы» и «Заказано». Ведь если потребуется удалить какой-либо товар, логичным будет и деактивирование всех заказов по данной позиции.
Пошаговая инструкция
- Для создания можно воспользоваться существующим запросом на добавление, откройте его в режиме Конструктора.
- Для преобразования следует выбрать пункт «Запрос/Удаление» после чего в бланке появится строчка с соответствующим названием.
- Значение «Из» в первом столбце указывает на таблицу, в которой будут стираться записи.
- Второй столбик содержит параметр «Условие», демонстрирующий критерии при которых будет работать данная функция.
- Кликните на кнопку «Запуск», после чего на экране появятся сообщения о подтверждении удаления информации. Если вы хотите отменить действие, следует нажать «Нет», как только вы щелкните по кнопке «Да» — вернуть информацию уже будет невозможно.
- Этот запрос на удаление в Access можно сохранить и использовать его в других необходимых случаях.
Обратите внимание, что каскадное удаление подходит не для всех связанных таблиц. Так, после увольнения сотрудника, вам следует стереть всю информацию о нем, однако это не должно повлиять на сведения из базы заказов, которые были обработаны и приняты человеком. Чтобы подобная проверка целостности данных выполнялась всегда – поставьте «птичку» возле команды «Обеспечение целостности данных».
Создание запросов на удаления записей
Запросы на удаление записей позволяют отобрать требуемые записи и удалить их за один прием. Принцип создания такого запроса аналогичен созданию запроса на обновление, однако, удаляя записи из связанных таблиц, необходимо помнить о том, что при этом не должна нарушаться целостность данных.
Если две таблицы связаны отношением «один-ко-многим», нельзя удалять записи из таблицы «один» если в таблице «многие» присутствуют соответствующие им записи. Сначала должны быть удалены записи в таблице «многие» и только потом — соответствующие им записи в таблице «один». Для того чтобы упростить этот процесс, Access позволяет при определении связей между таблицами установить флажок каскадное удаление связанных записей (Cascade Delete Related Records). Такой флажок установлен, например, для связи таблиц «Заказы» (Orders) и «Заказано» (Order Details). Действительно, если требуется удалить из базы данных какой-то заказ, должны быть удалены не только запись об этом заказе в таблице «Заказы», но ч все позиции данного заказа в таблице «Заказано».
Для создания запроса на удаления мы воспользуемся уже имеющимся запросом на добавление записей «Копирование заказов».
- Откройте этот запрос в режиме Конструктора.
- Чтобы преобразовать запрос на добавление в запрос на удаление записей, выберите команду Запрос, Удаление (Query, Delete Query). В бланке запроса появится строка Удаление (Delete) (рис. 8.11). В первом столбце строки Удаление (Delete) показывается значение Из (From), которое указывает, что будут удаляться записи из таблицы «Заказы». Во втором столбце строки Удаление (Delete) вы видите значение Условие (Where), что указывает на использование этого столбца для определения критерия отбора удаляемых записей.
Рис. 8.11. Запрос на удаление записей из таблицы «Заказы»
- Нажмите кнопку Запуск (Run). Выводятся сообщение с приглашением подтвердить удаление записей и информация о количестве записей, которые будут удалены. Их будет столько же, сколько было отобрано в соответствующем запросе на добавление. В этот момент еще можно отменить удаление, для чего достаточно нажать кнопку Нет (No) в окне сообщения. Нажмите кнопку Да (Yes), подтверждая удаление. Будут удалены все заказы за 1996 год из таблицы «Заказы» (Orders) и все позиции заказов из таблицы «Заказано» (Order Details). Вы можете убедиться в этом, если откроете таблицу «Заказано».
- Сохраните запрос, дав ему имя: Удаление заказов.
Однако такое каскадное удаление записей не всегда возможно. Например, для рассмотренной нами в предыдущем разделе связи таблиц «Сотрудники» и «Заказы» нельзя устанавливать флажок каскадное удаление связанных записей (Cascade Delete Related Records), т. к. удаление записи о сотруднике из таблицы «Сотрудники» не должно повлечь за собой удаление всех его заказов. Если вы попытаетесь удалить какую-либо запись о сотруднике и в таблице «Заказы» (Orders) окажутся заказы, принятые этим сотрудником, Access выдаст сообщение об ошибке (рис. 8.12).
Рис. 8.12. Запрос на удаление
Для того чтобы выполнялась автоматическая проверка целостности данных, не забудьте для всех связей в базе данных установить флажок Обеспечение целостности данных (Enforce Referential Integrity).
Удаление запроса через VBA
Допустим в БД есть 10 запросов.
Можно ли через VBA модуль удалить запрос по названию?
Если да, то как ?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Запуск SQL-запроса через VBA
У меня ситуёвина следующая. как я не мучался ниче придумать так и не смог. Вообщем нужна кнопка.

Результат запроса в эксель через vba
Здравствуйте, Есть запрос, который получает 2 параметра из полей формы. Результат запроса.
Синтаксическая ошибка запроса через VBA
Данный запрос выдает ошибку на AND Format(, ‘dd/mm/yyyy’)>= # " & d1 & " #" Вариант strSQL =.
Запуск запроса на добавление через VBA
Форумчане, доброго времени суток! Возникла проблема- как запустить запрос на добавление записей.
26798 / 14477 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
Можно вот таким кодом удалить запрос
currentdb.QueryDefs.Delete "ИмяЗапроса"
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
mobile, А можно ли получить коллекцию запросов, которые имеют тип UPDATE и прогнать через удаление?
Если да, то как?
26798 / 14477 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
Можно и так. Надо построить цикл по всей коллекции QueryDefs, сравнить с известным типов запросов Update, это тип=48, удалить их и обновить коллекцию QueryDefs. Цикл надо строить в обратном порядке от большего номера к меньшему.
1 2 3 4 5 6 7 8 9 10 11 12
Sub DelUpdQuery() Dim db As DAO.Database, qdf As QueryDef, i Set db = CurrentDb For i = db.QueryDefs.Count - 1 To 0 Step -1 'Цикл по коллекции запросов Set qdf = db.QueryDefs(i) 'Создание вспомогательного объекта коллекции Debug.Print qdf.Name, qdf.Type 'Распечатка имен запросов и их типов If qdf.Type = 48 Then 'Проверка на нужный тип запросов db.QueryDefs.Delete qdf.Name 'Удаление объекта из коллекции End If Next db.QueryDefs.Refresh 'Обновление все коллекции запросов End Sub
Удаление поля
Вы можете удалить поле из запроса или таблицы Access. При удалении поля из запроса поле остается в базе данных, но больше не используется в запросе. При удалении поля из таблицы это поле удаляется из всей базы данных.
В этой теме рассматриваются вопросы и процесс удаления полей, а также процедуры удаления поля из запроса или таблицы.
В этой теме не подробно #Deleted поля или управления. В большинстве #Deleted указывает на то, что отображаемая запись была недавно удалена. Как правило, обновление данных исправит эту ситуацию. Дополнительные сведения об обновлении данных см. в статье «Обновление или повторное обновление данных».
В этой статье
- Обзор
- Просмотр зависимостей объекта перед удалением поля
- Удаление поля из запроса
- Удаление поля из таблицы
Обзор
При удалении поля из запроса другие объекты базы данных, например формы, не смогут использовать его в качестве источника данных из удаленного поля. Однако такие объекты по-прежнему могут использовать поле, используя таблицу в качестве источника данных или используя другой запрос, содержащий поле.
При удалении поля из таблицы это поле больше не доступно ни для одного объекта базы данных.
Перед удалением поля можно использовать область зависимостей объектов, чтобы определить, зависит ли другой объект базы данных от запроса или таблицы, из которой удаляется поле. Это позволит вам просмотреть, как удаление поля повлияет на другие объекты базы данных, и соответствующим образом отредактировать их дейс.
Просмотр зависимостей объекта перед удалением поля

- В области навигации выберите запрос или таблицу с полем, которое вы хотите удалить.
- На вкладке «Инструменты базы данных» в группе «Отношения» выберите «Зависимости объектов». В области «Зависимости объектов» отображаются объекты, которые зависят от запроса или таблицы, выбранных на шаге 1.
Примечание: Если вы еще не использовали ее, их показ может занять некоторое время.
Удаление поля из запроса
- В области навигации щелкните запрос правой кнопкой мыши и выберите «Конструктор».
- В сетке конструктора запросов выберите поле, которое вы хотите удалить, и нажмите del.
- Закройте и сохраните запрос.
Удаление поля из таблицы
- В области навигации щелкните таблицу правой кнопкой мыши и выберите «Конструктор».
- На сетке конструктора таблицы выберите поле, которое вы хотите удалить, и нажмите del.
- Закроем таблицу и сохраните ее.
