Green-sell.info

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

Удаление записей access

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

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

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

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

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

В этой статье

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать еще:  Access экспорт vba

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

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

access-list: удаление конкретных записей

Рекомендованные сообщения

Присоединяйтесь к обсуждению

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

Похожие публикации

Набросок небольшой программы на PHP для облегчения жизни IT отделу. Позволяет просматривать какие хосты располагаются на портах сетевого оборудования (за основу взято оборудование фирмы Cisco). Для связи используется SNMP протокол. Из информации об узле выводятся:
MAC IP DNS имя Производитель оборудования Подробное описание можно посмотреть в следующей теме.

Делюсь шаблоном для мониторинга состояния маршрутизаторов CISCO, zabbix 2.4
Работа с устройством реализована по протоколу SNMP и тут есть ряд подводных камней, но самый основной это изменения стандарта от одной версии прошивки к другой.
Если понадобится изменить OID значения, то поискать их можно тут http://tools.cisco.com/Support/SNMP/do/BrowseOID.do но часть старый параметров в базе отсутствует. Тут уж или через поисковик или «Селяви, что в перевод с древнегреческого — не повезло!».
Простая конфигурация устройства:
cisco-test#configure terminal Enter configuration commands, one per line. End with CNTL/Z. cisco-test(config)#snmp-server community public RO cisco-test(config)# Но при этом любой может подключиться к устройству и читать с него данные, если вы хотите чтобы плохие люди могли еще и отдавать команды то RO необходимо заменить на RW
Если Вы желаете ограничить доступ к SNMP серверу устройства по IP, то необходимо использовать access-list:
cisco-test#configure terminal Enter configuration commands, one per line. End with CNTL/Z. cisco-test(config)#ip access-list standard SNMP_ACCESS_RO cisco-test(config-std-nacl)#permit 192.168.1.2 cisco-test(config)#snmp-server community public RO SNMP_ACCESS_RO cisco-test(config)#^Z cisco-test# Сommunity можно обозвать как угодно, хоть BLABLABLA место public. IP естественно заменить на адрес Вашего сервера. RO — только чтение, RW — полный доступ
Мы будем только читать, поэтому RO. В теории конечно можно отлавливать определенные события на устройстве и предпринимать ответные действия автоматически, только в таких случаях RW. Но об этом мы поговорим в другой раз.
Теперь необходимо добавить макрос в zabbix Администрирование -> Общие -> Макросы
<$SNMP_COMMUNITY>= имя community указанное в конфигурации CISCO, например «public» Сам шаблон можно забрать в конце поста.
Немного о шаблоне.

На данным момент собираются данные:
Аптайм Модель маршрутизатора Загрузка центрального процессора за: 5 секунд, 1 минуту, 5 минут Статус (onlineoffline) Память: ОЗУ, ПЗУ Список доступных интерфейсов Статусы сетевых интерфейсов Количество byte RXTX на каждом интерфейсе Количество error byte RXTX на каждом интерфейсе По этим данным строятся соответствующие графики (ОЗУ, ПЗУ и т.п не выведены, можете добавить самостоятельно)
Пока маловато триггеров, но по мере обновления шаблона, их количество увеличится:
Маршрутизатор выключен или с ним нет связи по Ethernet Маршрутизатор был пере запущен менее 5 минут назад Нагрузка на ЦП выше 80% PS: следите за обновлениями!
zbx_templates_router_cisco.xml

Update 03.12.2015
Добавлена возможность отображать DNS имена для определенных хостов, это позволит явно и человеко-понятно идентифицировать соответствующие узлы в сети. Отсутствие записи на DNS сервере должно привлечь соответствующее внимание к хосту.
В конфигурацию добавлен параметр $domain позволяющий удалять из DNS имени хоста имя домена. Чтобы из name.domain.com сделать name, необходимо указать $domain = «.domain.com» Обновлена база производителей сетевого оборудования — oui.txt Мелки доработки интерфейса.
Update 26.11.2015
Добавлена возможность отображать реальные имена портов (Fa1, Ethernet1/0/1, Port1 . ). Внимание: не все устройства способны передавать данную информацию, в связи с этим оставлены числовые идентификаторы, чтобы в таких случаях иметь систему идентификации.
Добавлена возможность описывать в конфигурации настройки для каждого устройства отдельно. Если не использовать эту возможность, то для оборудования будет применена общая конфигурация. Добавлена возможность описывать в конфигурации уникальные OID-ы для конкретного оборудования аналогично п.2. Мелкие доработки интерфейса и кода.

В данной теме мы будем рассуждать о мониторинге сетевого оборудования и подключенных к нему хостах. Следовало бы разместить её в другом разделе, но 90% всех манипуляций и дальнейшая эксплуатация будет производиться на UNIX-подобной платформе. В моем случае используется:
Linux Ubuntu 14.04 Apache/2.4.7 PHP 5.5.9 Библиотека php5-snmp Также само сетевое оборудование (маршрутизаторы и свичи) должно поддерживать работу по протоколу SNMP и соответствовать стандартам ISO.
Проект разработан отталкиваясь от топологии сети — звезда. Имеются множество отдельных подсетей 192.168.0.0 все они ходят во внешний мир через маршрутизаторы (в моем случае фирмы Cisco). В самих подсетях используются различные свичи, по большей части поддерживающие SNMP v1 и выше.
Ранее я уже поднимал данную тему на другом, дружественном, форуме, но потом работа над проектом бала остановлена. На данный момент вопрос опять стал актуален и решено переделать как основную программу, так и внешний вид. Старая версия была написана на скорую руку и выглядела невзрачно и с большими изъянами в коде.
На данный момент проект преобразился и выглядит следующим образом. Ваш браузер должен поддерживать HTML5.
Чтобы избежать вопроса «зачем это нужно?» предлагаю Вам задачку. Попробуйте назвать номер порта на свиче к которому подключен компьютер дяди Васи зная лишь его IP. Или еще интереснее — зная лишь производителя его сетевого оборудования. Или вопрос от начальника «Скажи мне, кто подключен к этому свичу, а я пока узнаю, кого нужно искать».
Раньше это делалось следующим образом. Подключаемся к маршрутизатору и спрашиваем, какой MAC принадлежит интересующему нас IP, пусть это будет 192.168.0.3
cisco-router#sh arp | include Vlan1 Internet 192.168.0.1 210 0800.0694.d027 ARPA Vlan1 Internet 192.168.0.2 210 0800.bdf0.0010 ARPA Vlan1 Internet 192.168.0.3 210 000e.be08.001c ARPA Vlan1 Internet 192.168.0.4 210 000e.42ee.20cf ARPA Vlan1 Internet 192.168.0.5 210 0800.218e.be09 ARPA Vlan1 Internet 192.168.0.6 5 20cf.0800.000e ARPA Vlan1 Internet 192.168.0.7 — 001c.0010.000e ARPA Vlan1 Internet 192.168.0.8 6 0010.1fc4.0800 ARPA Vlan1 Internet 192.168.0.9 2 d027.0694.0800 ARPA Vlan1 . Теперь мы знаем MAC, это 000e.be08.001c. Подключаемся к свичу и просим его показать нам таблицу MAC адресов с сортировкой по конкретному MAC-у.
cisco-switch#sh mac-address-table | include 000e.be08.001c 000e.be08.001c Dynamic 1 FastEthernet21 Теперь мы знаем, что интересующий нас (или не нас) хост использует порт FastEthernet21
Все прошло относительно быстро и гладко. Но что делать, если порт имеет порядковый номер превышающий общее число физических портов на свиче, оборудование разных производителей и оно не поддерживает одинаковый формат MAC адресов, отсутствуют различные фильтры, как например «include» в оборудовании Cisco. При этом может быть несколько свичей с десятками хостов. Все это повлияет на время поиска и на конечный результат.
Реализация
Мы знаем, что и у какого оборудования спрашивать. Так и давайте спрашивать это используя SNMP протокол. Первым делом необходимо настроить Ваше сетевое оборудование, выставить необходимые разрешения и community. Описывать этот пункт нету смысла т.к у Вас своё оборудования, а у дяди Васи совсем другое.
На сервере, где установлен Apache необходимо доставить библиотеку реализующий работу snmpwalk в PHP
apt-get install php5-snmp service apache2 restart На самом деле большая часть работы уже сделана. Теперь необходимо скачать сам скрипт, он будет прикреплен к данному посту и отредактировать его под себя.
Редактируем .htaccess
RewriteEngine On Options +FollowSymlinks Options -MultiViews RewriteBase /switch/ RewriteCond % !-f RewriteCond % !-d RewriteRule (.*) index.php?$1 [L] Убедитесь, что у Вас подключен модуль mod_rewrite и измените относительный путь указанный в RewriteBase на удобный Вам. Если закинуть каталог switch в корневую веб директории Apach, то вносить изменений в файл не нужно.
Редактируем index.php
$url = ‘http://’.$_SERVER[«HTTP_HOST»].’/switch/’; $domain = ‘.domain.com’; $community = ‘public’; $unit = array( ‘network_id’ => array( ‘name’ => ‘Желаемое для отображения имя подсети или объекта где сеть эксплуатируется’, ‘router’ => ‘192.168.1.1’, ‘switch’ => array(‘192.168.1.2’), ), ‘object_name’ => array( ‘name’ => ‘Желаемое для отображения имя подсети или объекта где сеть эксплуатируется’, ‘router’ => ‘192.168.2.1’, ‘switch’ => array(‘192.168.2.2’, ‘192.168.2.3’, ‘192.168.2.4’), ), // UPDATE 26.11.2015 ‘new_object’ => array( ‘name’ => ‘new object name’, ‘router’ => ‘192.168.3.1’, ‘switch’ => array(‘192.168.3.2’, ‘192.168.3.3’), // Уникальные настройки для маршрутизатора 192.168.3.2 ‘192.168.3.1’ => array( ‘community’ => ‘public2’, ), // Уникальные настрокий для свича 192.168.3.3 ‘192.168.3.3’ => array( ‘community’ => ‘public3’, ‘ifName’ => ‘.1.3.6.1.2.1.31.1.1.1.1’, ‘dot1dBasePortIfIndex’ => ‘.1.3.6.1.2.1.17.1.4.1.2’, ), ), ); Мы старались сделать конфигурацию интуитивно понятной, получилось это или нет, спорный вопрос. Поживем увидем, а пока разберем, что тут к чему.
$url — содержит http адрес до каталога со скриптом. Измените /switch/ на используемый Вами network_id, object_name — любой понравившийся идентификатор для подсети. Используйте латиницу иили цифры и не используйте пробелы. name — описание для подсети. Оно будет отображаться в списке на главной странице скрипта и в навигационном баре router — IP адрес маршрутизатора, через который подсеть ходит во внешний мир switch — список IP адресов свичей используемых в подсети Можно производить уникальную конфигурацию для любого сетевого устройства. Для этого в конфигурации нужного объекта необходимо указать адрес устройства и описать массив настроек для него. Можно изменять абсолютно любые существующие значения в скрипте. ВНИМАНИЕ: если Вы не понимаете, за что отвечает та или иная переменная и как устроена эта кухня, лучше обратитесь к нам, и мы Вам обязательно поможем!
Список рекомендуемых для изменения значений (описание значений имеется в самом скрипте):
community atPhysAddress sysDescr dot1dTpFdbAddress dot1dTpFdbPort dot1dBasePortIfIndex ifName Определение производителя по MAC адресу
Каждому производителю выделяется определенный список MAC адресов для использования в его сетевом оборудовании. Ознакомиться с этим списком можно по адресу http://standards-oui.ieee.org/oui.txt Мы включили этот файл в состав архива, но советуем Вам периодически обновлять его.
В скрипте используется shell_exec
$vendor = explode(‘(hex)’, shell_exec(«cat ./oui.txt | grep «.str_replace(‘ ‘, ‘-‘, substr($mac, 0, 8)))); Это потенциально не безопасно, но мы не передаем ей данные полученные от пользовательского ввода, только MAC адреса. В любом случае shell_exec должен быть разрешен или часть кода, отвечающая за определения производителя, должна быть удалена.
Есть очень интересная статья на сайте CISCO. Она поможет Вам разобраться в принципах работы данного скрипта. К сожалению я узнал об этой статье уже после написания большей части кода программы. Но уже имеются идеи для следующей версии!
PS: Если все сделано правильно, то Вы сможете насладится нашим велосипедом. Проект будет дорабатываться и обрастать всяческими «свистульками». Приятного использования

Читать еще:  Как установить фон в powerpoint

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

home-cisco#conf t home-cisco(config)#int fa0/0 home-cisco(config-if)#ip flow ingress home-cisco(config-if)#ip flow egress home-cisco(config-if)#exit home-cisco(config)# Ну а потом в режиме глобальной конфигурации настраиваем параметры отображения

home-cisco(config)#ip flow-top-talkers home-cisco(config-flow-top-talkers)#top 20 home-cisco(config-flow-top-talkers)#sort-by bytes home-cisco(config-flow-top-talkers)#cache-timeout 100 home-cisco(config-flow-top-talkers)#end home-cisco#wr Building configuration. [OK] home-cisco# И смотрим кто там у нас, командой sh ip flow top-talkers .
Удачи!

Сейчас на странице 0 пользователей

Нет пользователей, просматривающих эту страницу.

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


Если параметры обеспечения целостности для связей таблицы не установлены вообще, то записи удаляются только в указанной в бланке запроса таблице и вне зависимости от ее логических связей.
Если в запросе объединяются две или более таблиц, находящихся в отношении 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. Чтобы преобразовать запрос на добавление записей в запрос на удаление записей, щелкните на кнопке Удаление.

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

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

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

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

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

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

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

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

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

Читать еще:  Kiosk access com

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

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

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

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

Удаление дубликатов записей MS Access SQL Microsoft

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

Это код для запроса, который показывает мне правильные записи дубликатов и группирует их. Он показывает мне 1083 записи (они сгруппированы)

Это код для удаления записей, он хочет удалить все записи, хотя я хочу, чтобы он удалил только 1083.

Не могли бы вы посоветовать, как это исправить?

2 Ответа

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

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

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

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

Сначала создайте временную таблицу с идентификаторами, которые вы хотите удалить. Мы назовем это temp_Delete:

Во-вторых, запустите инструкцию delete, которая использует таблицу temp_Delete, чтобы ограничить то, что вы удаляете. Вы присоединитесь к полю RecordId (предостережение: вы не сможете сделать это в визуальном редакторе, потому что это испортит ваш sql. Вам придется написать и запустить его вручную.)

Шаг безопасности : Если вы вообще обеспокоены потерей важных данных, я бы посоветовал ввести еще один шаг перед удалением. Добавьте логический столбец IsDelete в tblDat01Prod и используйте таблицу temp_Delete, чтобы обновить соответствующие поля до True. Затем сравните, какие записи должны быть удалены, а какие нет, прежде чем удалить. Затем удалите записи, где IsDelete является истинным, а не Шаг 2 выше.

Наконец, удалите таблицу temp_Delete и все поля, добавленные в tblDat01Prod, которые вы не хотите сохранять.

Спасибо Вам большое за вашу помощь Дон! Я смог немного изменить ваш код, чтобы убедиться, что правильные данные были удалены, но вы были фантастической помощью +1 для вас (если бы у меня была репутация, чтобы сделать это).

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

Затем запустил инструкцию delete

Еще раз огромное вам спасибо!

Похожие вопросы:

У нас есть некоторые веб-службы (написанные на .NET WCF), которые в настоящее время попадают в базу данных сервера Microsoft SQL для получения/обновления данных. Теперь у нас есть требование также.

мы выбираем несколько записей связанных с сервером таблиц ms access sql с помощью предложения joins and order by и вставляем полученные данные в другую связанную с сервером таблицу sql в ms access с.

У меня есть таблица Access 2003 с записями

4000, которая была сделана из 17 различных таблиц. Примерно половина этих записей-дубликаты. Отсутствует уникальный столбец идентификации (ID, имя и т.

У меня есть файл Microsoft Access, который имеет двухуровневую защиту: пароль базы данных mdw-файл ( для хранения логина и пароля) Я могу легко сбросить пароль базы данных ms access, но есть ли в.

Теперь я делаю модуль расчета заработной платы, я хочу синхронизировать данные из Microsoft Access 2007 в MS SQL Server 2008 (каждый день, когда сотрудник регистрирует вход / выход с помощью.

Я использую MS Access для настольного приложения. Пользователи могут не иметь доступа или не устанавливать office. Можно ли сжать доступ MS с помощью запроса SQL? Неужели после вставок и удалений.

Мне нужно исправить некоторые проблемы безопасности в приложении не-IT, которое нам было поручено поддерживать. Он находится в интерфейсе Microsoft Access (серверная часть SQL). Кто-нибудь знает.

А) предположим таблицу. что я хочу выполнить функцию DELETE . Это делается в запросе ms access 2003 sql. Примечание есть много много много много записей. в несколько сотен тысяч . к миллиону.

Подключение от MS Access к серверу SQL через ODBC (необязательно). Я хотел бы привязать свои формы доступа к данным сервера SQL. Было бы здорово иметь возможность динамически фильтровать наборы.

Удаление записей 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