
- •Часть 2
- •Часть 2
- •Содержание
- •1. Конструктор запросов 4
- •2. Запрос на выборку. 13
- •1. Конструктор запросов
- •Создание выражений с помощью Построителя выражений
- •2. Запрос на выборку.
- •2.1. Запрос, основанный на одной таблице и использующий простое условие
- •2.2. Простая выборка из двух связанных таблиц.
- •2.3. Запрос, использующий вычисляемые поля
- •2.4. Запрос с группировкой
- •2.5. Запрос, использующий связь таблицы с самой собой (рекурсивное соединение)
- •2.6. Запрос, использующий две ссылки на одну таблицу
- •2.7. Выборка повторяющихся записей
- •2.8. Поиск несовпадающих записей
- •2.9. Другие сведения, полезные при разработке запросов
- •3. Запрос на удаление записей.
- •3.1. Запрос на удаление всех записей из таблицы (очистка таблицы)
- •3.2. Запрос на удаление с ограничением числа удаляемых записей
- •3.3. Запрос на удаление с применением внешнего объединения таблиц
- •4. Запрос на добавление записей в существующую таблицу
- •4.1. Запрос на добавление записей во временную таблицу текущей базы данных
- •4.2. Запрос на добавление записей во временную таблицу внешней базы данных
- •5. Запрос на обновление записей в таблице.
- •5.1. Простой запрос на обновление записей
- •5.2. Запрос на обновление полей нескольких связанных таблиц.
- •6. Запросы на объединение.
- •6.1. Запрос на объединение, связывающий воедино однотипные таблицы из различных баз данных.
- •7. Перекрестные запросы
- •7.1. Создание перекрестного запроса при помощи мастера
- •7.2. Сознание перекрестного запроса при помощи конструктора запросов
- •8. Запросы с параметрами
- •9. Подчиненные запросы
- •9.1. Использование подчиненных запросов в выражениях для условий отбора записей
- •9.2. Использование подчиненных запросов в определении полей основного запроса.
- •10. Свойства полей запросов
- •11. Свойства запросов
4.2. Запрос на добавление записей во временную таблицу внешней базы данных
Создадим запрос, аналогичный приведенному в предыдущем примере, за исключением того, что записи будут добавляться во временную таблицу не текущей базы данных, а внешней. Внешняя база данных может быть расположена где-либо на локальном или сетевом диске.
Для начала создайте новую базу данных (например — dbl.mdb) и в ней временную таблицу Клиенты (вспомогательная), описанную в предыдущем примере. Затем скопируйте запрос из предыдущего примера под другим именем и откройте его в режиме конструктора. Измените тип запроса на запрос на выборку. Еще раз измените тип запроса на запрос на добавление. Появится диалоговое окно Добавление для выбора таблицы-приемника и базы данных-приемника. Установите значение переключателя в значение в другой базе данных и в поле ввода имя файла введите полный путь и имя файла базы данных. После выбора файла внешней базы данных нажмите кнопку раскрытия комбинированного списка имя таблицы. После некоторой паузы, обусловленной подключением Microsoft Access к указанному файлу базы данных, появится список всех ее таблиц. В данном случае это будет всего одна таблица Клиенты (вспомогательная), которую и нужно выбрать и нажать ОК (см. рис. 4.3). Поскольку имена полей исходной и целевой таблиц совпадают, то конструктор запросов автоматически заполнит строку Добавление бланка запроса. Если этого не произошло, придется указать необходимые поля вручную. Полученный запрос приведен на рис. 4.4.
Рис. 4.3. Добавление записей в таблицу внешней базы данных.
Рис. 4.4. Запрос на добавление записей во временную таблицу внешней базы данных в режиме SQL.
Пояснения
а). Двукратное переключение типа запроса (сначала в запрос на выборку, затем – обратно в запрос на добавление) необходимо для получения доступа к диалоговому окну Добавление, в котором можно изменить название таблицы-приемника и базы данных-приемника. Однако те же действия можно проделать и в окне свойств запроса, соответствующим образом изменив свойства Таблица-получатель и База данных-получатель. Этот вариант менее удобен.
б). Инструкция SQL. Единственное изменение в операторе SQL по сравнению с предыдущим примером – к предложению INSERT добавилась конструкция IN. Вслед за ключевым словом IN расположено строковое выражение (заключенное в одинарные кавычки), содержащее полный путь и имя внешнего файла базы данных.
5. Запрос на обновление записей в таблице.
Запрос на обновление записей является выполняемым запросом и предназначен для внесения изменений в группу записей одной или нескольких таблиц за одну операцию. При помощи такого запроса можно, например, увеличить зарплату служащим определенной категории на 10%, изменить цены на товары какой-либо группы с учетом курса евро и т.д.
Общая схема построения запросов на обновление такова:
В макет запроса добавляются все нужные таблицы и между ними устанавливаются необходимые связи.
Тип запроса устанавливается в запрос на обновление.
В бланк запроса добавляются из таблиц те поля, которые необходимо обновить. В строке Обновление указываются выражения, значения которых будут присвоены выбранным полям.
В последнюю очередь добавляются поля, для которых предполагается указать условия отбора.
Примеры допустимых для обновления выражений приведены в таблице 5.1.
Таблица 5.1. Примеры допустимых выражений для обновления полей таблицы.
Выражение |
Результат |
"Днепропетровск" |
Заменяет значения текстового поля записей, удовлетворяющих условиям отбора, на строку "Днепропетровск" |
#8/10/99# |
Задает новое значение для поля типа дата/время - 10-авг-99 |
Да (или Yes) |
Задает значение Да для поля логического типа |
"PN" & [Код] |
Для каждой записи, подлежащей обновлению, значением поля будет комбинация префикса "PN" и строки из поля Код той же записи |
[Цена]*[Количество] |
Значением поля каждой записи, подлежащей обновлению, будет произведение полей Цена и Количество той же записи |
Зарплата]* 1.1 |
Если задано для поля Зарплата, то увеличивает зарплату на 10% в записях, удовлетворяющих условиям отбора |
DSum("[Количество]*[Цена]", 'Заказано", "[КодТовара]=" & Код Товара]) |
Для каждого товара в исходной таблице выбираются значения полей [Количество] и [Цена] из таблицы Заказано и затем суммируется их произведение. Полученное значение итоговых продаж по каждому товару обновляет соответствующее поле исходной таблицы |
Фамилия] & " " Left([Имя],1) & "." Left([Отчество],1) & "." |
Значением поля будет фамилия сотрудника и его инициалы, например, Иванов И.И. |
В целом, принципы построения запросов на обновление во многом похожи на способы создания описанных выше типов запросов. Однако следует сделать несколько замечаний.