Опубликован: 13.09.2006 | Уровень: для всех | Доступ: свободно
Лекция 4:

Excel и базы данных

Построение запросов

Частью БД Access является совокупность "стандартных" запросов на поиск данных в базе. Запросы к базе данных могут возникать динамически в процессе работы пользователя и определяться его сиюминутными требованиями. Однако большое число запросов являются "стандартными" и их можно спроектировать заранее.

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

Конструирование запроса "Список Заказчиков"

Рис. 4.7. Конструирование запроса "Список Заказчиков"

А так выглядит результат его выполнения:

Результат выполнения запроса

Рис. 4.8. Результат выполнения запроса

Поскольку Access транслирует создаваемые запросы в SQL форму, то предоставляется возможность просматривать и корректировать запросы и в этой форме. Результат трансляции нашего запроса:

SELECT Заказчики.Название
FROM Заказчики
ORDER BY Заказчики.Название;

Приведу примеры еще нескольких запросов. Запрос "Список книг", построенный по таблице "Книги", позволяет для всех книг, данные о которых содержит таблица, создать список из двух полей, - автора и название книги. Список упорядочен по авторам. Приведу SQL-форму этого запроса:

SELECT Книги.Автор, Книги.Название
FROM Книги
ORDER BY Книги.Автор;

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

Конструирование запроса с фильтром

Рис. 4.9. Конструирование запроса с фильтром

SQL-форма этого запроса имеет вид:

SELECT Заказчики.Название
FROM Заказчики
WHERE (((Заказчики.Город)="Тверь"))
ORDER BY Заказчики.Название;

Построенный только что запрос позволяет выбрать среди всех заказчиков тех, кто живет в Твери. Такой запрос является частным случаем общего запроса. Значительно чаще в подобных ситуациях строится запрос с параметром, в котором код города является параметром, задаваемым динамически в момент вызова запроса. Визуально запросы с параметрами строятся, как обычные. Чтобы предыдущий запрос превратить в запрос с параметрами, в поле запроса, где задавался город (" Тверь "), достаточно записать в квадратных скобках строку, запрашивающую имя параметра, например: [ город?] или [ Town ]. Скобки - признак того, что задается параметр запроса, они сигнализируют о необходимости добавления элемента в коллекцию Parameters, связанную с запросом. Аналогично создаются запросы с несколькими параметрами.

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

Запрос с двумя параметрами

Рис. 4.10. Запрос с двумя параметрами

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

SELECT Заказчики.Название
FROM Заказчики
WHERE (((Заказчики.Город)=[город?]) AND ((Заказчики.Директор)=[директор?]))
ORDER BY Заказчики.Название;

Заметьте, хотя в явном виде предложение Parameters в операторе SELECT не отображается, но соответствующая коллекция Parameters, связанная с запросом формируется.

Ольга Гафарова
Ольга Гафарова
Непонятен ход решения задачи
Серегй Лушников
Серегй Лушников
Может ли объект Recordset быть потомком объекта Record?
Геннадий Шестаков
Геннадий Шестаков
Беларусь, Орша
Светлана Ведяева
Светлана Ведяева
Россия, Саратов