Как сделать повторяющийся запрос в access

Добавил пользователь Алексей Ф.
Обновлено: 12.09.2024

<- ->
KDS ( 2002-09-12 12:57 ) [0]

Всем привет!
Можно ли средствами только Access
удалить повторяющиеся записи или все равно придется писать программку для чистки?
Если в Access заложена эта функция, то где ее искать?

<- ->
LordOfSilence ( 2002-09-12 13:08 ) [1]

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

<- ->
KDS ( 2002-09-12 13:58 ) [2]

>LordOfSilence Спасибо за внимание
Выборку повторяющихся я сделал вручную SQL-запросом.
Этот список есть.
Уточняю вопрос:
Необходимо, чтобы осталось по одной записи.
При Вашем предложении удалятся все повторяющиеся.
Т.е. было две одинаковые записи, а станет ноль,
а мне необх. оставить только одну, любую.

<- ->
LordOfSilence ( 2002-09-12 14:06 ) [3]

>KDS
Эта тема довольно живо обсуждалась здесь пару дней назад,
поищите ее, если не лень.

<- ->
LordOfSilence ( 2002-09-12 14:48 ) [4]

Дима, извините, если опять "невпопад", но может
следующие мысли Вам помогут.

1. Список повторений мы создали (Запрос1).
2. Создаем Запрос2 к Запросу 1,
в нем делаем группировку по повторяющемуся полю
( а может полям? вообще большой вопрос, что в
Вашем случае и как повторяется),
а к остальным полям применяем аггрегирующие функции
First()/Last() (есть такие в Access2000).

Таким образом, у нас есть список записей, на основе
которого мы можем создать новую таблицу, старую "грохнуть"
и т.п. - на Ваше усмотрение.

Только что смоделировал эту ситуацию, вроде работает.
Подразумевается, что повторяется поле Pole1.

SELECT [Запрос1].Pole1, Last([Запрос1].Pole2) AS [Last-Pole2], Last([Запрос1].Pole3) AS [Last-Pole3], Last([Запрос1].Pole4) AS [Last-Pole4]
FROM [Запрос1]
GROUP BY [Запрос1].Pole1;

<- ->
sniknik ( 2002-09-12 15:21 ) [5]

да уж вопрос явно неоригинален, часто повторяется.
выполни простой запрос вроде приведенного в том же Access после переименуй табличку
SELECT * INTO ADVDISC1 FROM (SELECT DISTINCT * FROM ADVDISC)
удалятся только повторы причем только при совпадении всех полей, впрочем по одному тоже можно немного переделав запрос.

<- ->
KDS ( 2002-09-12 16:38 ) [6]

>LordOfSilence и sniknik Спасибо, ребята.
Вы мне оба очень помогли, подсказав, что необх. создать новую таблицу на основе данной (с повторениями)!
>LordOfSilence узнал новое для себя
про First()/Last() (есть такие в Access2000)
>sniknik очень рационально и быстро.
Удачи Вам!

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

При создании базы данных стремятся свести все данные, необходимые для дальнейшего использования в таблицы, таким образом, чтобы избежать избыточности данных и достичь логики их объединения в таблицах. В рассматриваемых примерах были созданы таблицы, которые не содержат избыточных данных. Вместе с тем, следует отметить, что конечному пользователю не требуется видеть всю информацию, которая находится в таблицах. Наоборот, пользователь заинтересован получать сведения из базы данных, не вникая, в каких таблицах они находятся. Для этой цели в Access 2010 включён самостоятельный объект – Запросы. Запросы создаются с помощью Мастера запросов, Конструктора запросов и языка запросов SQL ( Structured Query Language – структурный язык запросов). Каждое из перечисленных средств имеет определённую специфику, о которой будет изложено ниже. К основным типам запросов относятся:

§ Запрос на выборку ( Select query ). Эти запросы позволяют извлекать информацию из таблиц, проводить вычисления с показателями, создавать перекрёстные ссылки. В запросах на выборку, изменять данные в таблицах нельзя.

§ Запрос на изменение ( Action query ). Запросы такого типа дают возможность корректировать информацию, которая содержится в таблицах. Запросы на изменение делятся на четыре категории.

· Запрос на создание таблицы ( Make - table ) – позволяет создать новую таблицу на основе данных, содержащихся в одной или нескольких таблицах.

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

· Запрос на присоединение ( Append ) – добавляет целые записи или только указанные поля в таблице.

· Запрос на обновление ( Update ) – изменяет данные в существующих таблицах на основании информации в окне Конструктора.

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


Рис. 66. Пиктограммы для выбора режима создания запросов

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


Рис. 67. Диалоговое окно для добавления необходимых таблиц на поле запросов


Рис. 68. Пример заполнения бланка запроса


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


Рис. 70. Предложение системы по сохранению запроса


Рис. 71. Результаты выполненного запроса на выборку

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


2. Выбрать строку , и раскрыть её.

3. Выбрать строку с наименованием , нажать на кнопку .


Рис. 72. Пример использования текстового фильтра в таблице запроса


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

Вопросы для самоконтроля

1. Как отображаются результаты запроса?

2. Какие основные типы запросов создают в базе данных Access 2010?

3. Чем отличаются запросы на выборку от запросов на изменение?

4. Какие средства предложены в Access 2010 для создания запросов?

5. В каком порядке следует работать с Конструктором запросов?

6. Какие дополнительные возможности получает пользователь при просмотре запроса на выборку?


Рис. 73. Пример создания параметрического запроса

1. Поместим таблицы на поле запроса.

2. На бланк запроса перенесём поля из таблиц (Фамилия, Телефон, Фото, Наим_отдела , Должность).


Система выдаст диалоговое окно с вопросом (Рис. 74), в которое введите, например – Менеджер, и нажмите на кнопку .


Рис. 74. Предложение системы для ввода параметра


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


Рис. 75. Результат выполнения отбора данных по заданным параметрам


Рис. 76. Логическое выражение Or (Или) для заданных параметров отбора данных

Вопросы для самоконтроля

2. Как задать параметр в виде текстового фрагмента?

3. Можно ли задавать несколько параметров в одном запросе для различных полей?

4. Как объединить несколько параметров для одного столбца в бланке запроса?


Рис. 77. Заполнение бланка запроса для осуществления поиска по неполному значению поля

1. Создайте новый запрос в режиме Конструктора. Перенесите на поле конструктора таблицы, как показано на рисунке 78.


Рис. 78. Подготовка запроса для работы с множественным значением данных


Рис. 79. Список для выбора функций при работе с групповыми данными


Рис. 80. Результаты работы запроса с обработкой множественных данных


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


Выполнение вычислений над данными, которые находятся в разных полях таблицы или в различных таблицах и запросах приходится очень часто. Эффективным средством для составления формул по определённым алгоритмам, является надстройка в Access 2010 - Построитель выражений, которая подключается в режиме Конструктора с помощью пиктограммы . В диалоговом окне Построитель выражений содержатся два раздела (Рис. 81).

o Раздел в верхней части окна содержит поле, в котором создаётся выражение.

o Раздел в нижней части окна предназначен для создания элементов выражений и вставки их в поле выражения. Допускается непосредственный ввод выражения с клавиатуры. Этот раздел разделён на три вертикальных поля. В левом поле (Элементы выражений) выводятся папки, содержащие объекты базы данных - , встроенные и определённые пользователем функции - , константы - , операторы - и выражения - . Среднее поле (Категории выражений) служит для выбора элемента или типа элементов из папки, заданной в левом поле. В правом поле (Значения выражений) выводится список значений для элементов, заданных в левом и среднем полях. Например, на рисунке 81 в построителе выражений показано, как отображается информация в полях Построителя выражений.


Рис. 81. Общий вид построителя выражений


3. В пустом поле щёлкните мышкой, и на ленте щёлкните по пиктограмме , после чего откроется Построитель выражений.

5. В бланке запроса отобразится, создаваемое выражение (Рис. 82), сохраните запрос, например под именем «Фактический стаж работы.


Рис. 82. Бланк запроса для вычисления фактического стажа работы сотрудника


Рис. 83. Результаты вычислений фактически отработанных лет сотрудниками

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


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

2. Перенесите в бланк запроса необходимые поля для проведения расчётов заработной платы (Рис. 85).


Рис. 85. Бланк запроса с перечнем полей


Рис. 86. Выражение (формула) для вычисления причитающейся суммы заработной платы сотруднику за месяц

Всего:[ Sum -Коэффициент]*[Оклад по должности]+[Оклад по должности]+[Надбавка]


Рис. 87. Создание поля в запросе и установление его свойств


Рис. 88. Таблица с данными по заработной плате сотрудников

Вопросы для самоконтроля

1. Какая последовательность запуска Построителя выражений при составлении запросов?

3. Как связывается бланк запроса с Построителем выражений?

4. Из каких элементов состоит «Выражение?

5. Что обозначают открытая и закрытая квадратные скобки в выражении?

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

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

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

(DISTINCT выбирает записи уникально). Затем убрать все в исходной таблице, и перенести в нее значения из Table2. Тоже, правда не уверен, что быстрее будет - но здесь шансов поболее, что все же пошустрее отработает.



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

Запрос — объект БД, который используется для реализации эффективного поиска и обработки данных.

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

Самый распространенный вид запросов — запрос на выборку. Он предназначен для отбора данных из источника в соответствии с некоторым условием. Условие запроса — это выражение, которое СУБД сравнивает со значениями в полях запроса, чтобы определить, следует ли включать в результат записи, содержащие то или иное значение.

Запрос на выборку позволяет:

1. Просматривать значения только из полей, которые вас интересуют.
2. Просматривать записи, которые отвечают указанным вами условиям.
3. Использовать выражения в качестве полей.

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

Основные режимы работы с запросами в Access:

1. Режим таблицы. Отображает информацию запроса на выборку в режиме таблицы.

2. Конструктор. В этом режиме определяется структура запроса и условия выбора данных (см. Приложение к главе 1).

Создать запрос можно с помощью Мастера запросов либо в Конструкторе (пример 5.2).

Мастер запросов позволяет автоматически создавать запросы на выборку. Однако при использовании мастера не всегда можно контролировать процесс создания запроса, но таким способом запрос создается быстрее. Необходимо просто выполнить последовательность действий, предлагаемых мастером на каждом этапе (пример 5.3).

Основные этапы создания запроса на выборку:

1. Выбор инструмента создания запроса.
2. Определение вида запроса.
3. Выбор источника(ов) данных.
4. Добавление из источника(ов) данных полей, которые должен содержать запрос.
5. Определение условий, которые формируют набор записей в запросе.
6. Добавление группировки, сортировки и вычислений (может отсутствовать).

Действие простых запросов на выборку ограничивается отбором данных по некоторым условиям без их обработки.

Примеры записи условий в запросах:

Действие в запросе

Поля с числовым типом данных

Выбираются записи, у которых значение в этом поле больше 0 и меньше 8.

Выбираются записи, у которых значение в этом поле не равно 0.

Поля с текстовым типом данных

Если значение в поле записи равно Орша, то запись включается в результат запроса.

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

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

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

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

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

Все запросы, которые рассмотрены в примерах 5.3 и 5.4 , содержат конкретные значения названий, имен, времени и т. д. Если требуется повторить такой запрос с другими значениями в условиях отбора, его нужно будет открыть в конструкторе, изменить условие и выполнить. Чтобы не делать многократно этих операций, можно создать запрос с параметрами. При выполнении такого запроса выдается диалоговое окно Введите значение параметра, в котором пользователь может ввести конкретное значение, а затем получить нужный результат. Параметр запроса определяется в строке Условие отбора конструктора для столбца, содержащего запрашиваемые значения. Параметром является слово или фраза, заключенные в квадратные скобки. Параметр будет выдаваться в виде приглашения в диалоговом окне при выполнении запроса (пример 5.5).

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

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

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


Пример 5.1. Режимы работы с запросами.


Режим SQL позволяет создавать и просматривать запросы с помощью инструкций языка SQL.

SQL (англ. structured query language — язык структурированных запросов). Применяется для создания, редактирования и управления данными в реляционной базе данных.

Пример 5.2. Группа инструментов Запросы вкладки Создание.


Пример 5.3. Создание запроса на выборку с помощью Мастера запросов.


1. Выбрать инструмент .

2. Выбрать вид запроса.


3. Выбрать источник данных.


4. Задать поле, содержащее повторяющееся значение.


5. Выбрать поля для отображения вместе с повторяющимися значениями.


6. Просмотреть и/или сохранить запрос.


Пример 5.4. Создание простых запросов на выборку с помощью Конструктора запросов.

1. Выбрать инструмент


2. Выбрать источник данных.


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


4. Записать условие формирования набора записей в запросе.

4.1. Выбор по полю с текстовым типом данных.





4.2. Выбор по полю с числовым типом данных.



4.3. Использование составного условия.





5. Сохранить запросы.

Пример 5.5. Создание запроса с параметрами.

1. Открыть один из запросов, созданных в примере 5.4 в конструкторе.

2. Изменить условия отбора на:


3. Сохранить с новым именем и открыть в режиме таблицы.

4. В диалоговом окне набрать одно из названий кинотеатра.


5. Просмотреть запрос.


Пример 5.6. Создание итогового запроса.

Создать итоговый запрос, определяющий, сколько мальчиков и сколько девочек посещают факультатив по математике.




4. Добавить вычисляемое поле (в строке нового поля Групповая операция в списке выбрать функцию Count).

Читайте также: