Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Access часть2.doc
Скачиваний:
24
Добавлен:
14.08.2019
Размер:
6.24 Mб
Скачать

3.2. Запрос на удаление с ограничением числа удаляемых записей

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

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

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

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

Полученный запрос представлен на рис. 3.2.

Рис. 3.2. Запрос на удаление с ограничением числа удаляемых записей

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

3.3. Запрос на удаление с применением внешнего объединения таблиц

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

Откройте новый запрос в режиме конструктора и добавьте в него таблицы Клиенты и Заказы. Конструктор запросов автоматически отобразит связь типа один-ко-многим, существующую на уровне базы данных. Из контекстного меню линии связи выберите пункт Параметры объединения и затем в окне параметров объединения установите переключатель в значение: Объединение ВСЕХ записей из Клиенты и только тех записей из Заказы, в которых связанные поля совпадают. Вид линии связи таблиц после этого изменится — появится стрелка, упирающаяся в изображение таблицы Заказы. Из контекстного меню запроса выберите пункт Тип запроса | Удаление. В первом поле бланка запроса из выпадающего списка нужно выбрать Клиенты.*. Затем из таблицы Заказы перетащите в бланк запроса поле КодКлиента и задайте для него в строке Удаление значение Условие, а в строке Условие отбора значение Is Null.

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

Однако, если запустить только что созданный запрос на выполнение, Microsoft Access выдаст сообщение об ошибке: Невозможно удаление записей из указанных таблиц и записи, соответственно, удалены не будут. Для того чтобы запрос работал, необходимо в режиме конструктора в зоне таблиц щелкнуть правой клавишей мыши и из контекстного меню выбрать пункт Свойства, после чего установить свойство запроса Уникальные записи в значение Да. Теперь запрос сработает правильно, и нужные записи будут удалены.

Созданный запрос изображен на рис. 3.3.

Рис. 3.3. Запрос на удаление с применением внешнего объединения.

Пояснения

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

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

в). В SQL-операторе значению Да свойства запроса Уникальные записи соответствует ключевое слово DISTINCTROW.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]