Рис. 11.47
Дайте команду на выполнение запроса. На экране появится сообщение о том, что удалению подлежит 556 записей (см. рис. 11.48), и предупреждение, что если вы ответите Да,то назад возврата не будет. Надеемся, что вы исполнены самых серьезных намерений и решительно ответите Да,приведя приговор в исполнение. Таким образом, вы реализуете запрос на удаление, убрав 556 записей, или 6,6 % от общего числа записей в таблице ES_OPER(8397).
Рис. 11.48
Удаление дублирующихся записей
При ведении банка данных довольно часто приходится удалять повторяющиеся записи. Есть два традиционных пути решения этой задачи:
• не допускать дублирования записей непосредственно при вводе информации в базу данных;
• находить и устранять повторяющиеся записи из уже сформированной БД.
Напомним, что мы работаем с объединенным информационным банком, в котором собраны разнородные базы данных. Поэтому неудивительно, что для разных БД эта задача решается неодинаковыми средствами. В последующих главах мы покажем, как предотвратить дублирование сведений при вводе информации в базу данных, используя средства языка Visual Basic. А сейчас речь пойдет о том, как удалять повторяющиеся записи с помощью стандартных запросов.
Когда информация вводится в оперативном режиме из различных источников, в базу данных тоже могут попасть сведения, дублирующие друг друга. Прежде чем удалить такие записи, их надо найти. Следовательно, решение проблемы включает два этапа – поиск повторяющихся записей и их удаление.
Запрос на поиск повторяющихся записей
Начнем с таблицы ES_OPER.В окне базы данных откройте вкладку Запросыи щелкните по кнопке
Затем в окне Новый запросвыберите позицию Повторяющиеся записи(рис. 11.49). Как видите, создаваемый запрос отличается от тех, что рассматривались ранее, – он строится с помощью мастера запросов. Последний содержит три шага, каждый из которых описывается своим окном.
Рис. 11.49
В первом окне (рис. 11.50) мастер просит определить таблицу или запрос, в котором надо найти повторяющиеся поля. Выберите таблицу ES_OPERи продолжите работу.
Рис. 11.50
В следующем окне (см. рис. 11.51) надо указать повторяющиеся поля. Будем считать, что записи дублируют друг друга, если в них совпадает содержимое трех полей: Дата ЧС, Код объекта, Виды ЧС.Иначе говоря, мы исходим из того, что в один и тот же день на данном объекте не могут произойти две или более однотипные аварии. (Конечно, было бы проще поставить условием совпадение всех полей. Однако даже для записей аналогичного содержания это маловероятно: сообщения об одном и том же событии могут передаваться разными людьми и основываться на разных источниках информации. Отсюда неизбежность расхождений и просто ошибок.) Вы уже знаете, как открыть перечисленные поля в окне мастера запросов, поэтому здесь представлен лишь конечный результат.
Рис. 11.51
После этого мастер откроет следующее окно (см. рис. 11.52), предлагая включить в запрос дополнительные поля. Рекомендуем добавить поле Номердля указания номера записи (чуть позже будет объяснена причина). В следующем окне мастер предложит согласиться с именем нового запроса.
Рис. 11.52
Пока советуем согласиться с именем Поиск повторенийдля ES_OPER.
Запустив этот запрос на выполнение, вы получите выборку в виде таблицы (см. рис. 11.53). Здесь аккумулированы записи, в которых повторяются поля Дата ЧС, Код объектаи Виды ЧС,определенные выше в качестве критериев отбора. Как видите, таких записей всего 382, или 4,87 % от их общего числа – вполне правдоподобная оценка.
Рис. 11.53
Удаление повторяющихся записей
Если следовать формальной логике, при удалении записей нужно использовать запрос на удаление. Можно так и сделать, но это не идеальное решение. Попробуем разобраться.
Когда вы удаляете определенные записи с помощью соответствующего запроса, то должны ввести какие-то условия отбора. Эти критерии могут быть основаны либо на внешних признаках (нужно отобрать значение, которое равно, больше или меньше указанного числа или выражения), либо на определенном соотношении между полями одной записи (заданное соотношение должно соблюдаться во всех отфильтрованных записях). В условиях отбора не заложено сопоставление различных записей, а ведь именно это требуется при поиске дубликатов. Сформулировать критерии отбора так, чтобы они позволяли отследить именно повторяющиеся записи, не удается. Если же вы непременно хотите использовать для уничтожения дубликатов запрос на удаление, попробуйте следующий способ. Задайте в качестве условия удаления номер записи, который указывается в запросе, на поиск повторяющихся записей, как показано на рис. 11.53. (Вот почему поле Номерследует включить в итоговую таблицу повторяющихся записей!) Чтобы реализовать эту идею, в строке Условия отборабланка запроса на удаление введите выражение типа:
Читать дальше
Конец ознакомительного отрывка
Купить книгу