Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

asoi

.pdf
Скачиваний:
7
Добавлен:
01.04.2015
Размер:
1.91 Mб
Скачать

На экране появится диалоговое окно Изменение связей, в котором выводятся имена связываемых полей обеих таблиц. При необходимости их можно заменить.

Установите опцию Обеспечение целостности данных.

При этом будет установлено отношение типа Один-ко-многим, что отразится в области Тип связи. Это означает, что одной записи главной или первичной таблицы Адреса могут быть поставлены в соответствие несколько блоков данных связанной (подчиненной) таблицы Торговля.

Установите флажок Каскадное удаление связанных за-

писей.

В заключение нажмите кнопку Создать. В окне связи будет графически показана связь между таблицами 1 к (рис. 59).

Рис. 59. Схема данных

Задание. Создайте запрос с именем Продажи за май 2012 при помощи добавления в запрос Условия отбора на основании связанных таблиц Адреса и Торговля. Примерный набор полей для данного запроса представлен на рис. 60. Не забудьте поставить ограничение на дату (только продажи за май 2012 г.)

Поле Фамилия в таблице Адреса подразумевает, что это фамилия покупателя. Переименуем в запросе заголовок столбца –

Фамилия в Покупатель:

51

В конструкторе запроса, в строке Поле колонки Фамилия

вQBE-областидобавивпередназваниемполяФамилияновыйза-

головок Покупатель:.

Рис. 60. Конструирование запроса «Продажи за май 2012»

3.5. Вычисления внутри запроса

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

Создайте новый запрос, основываясь на таблицах: Торговля и Адреса при помощи конструктора запросов, как показано на рис. 61.

Озаглавьте поле Фамилия таблицы Адреса Покупатель,

добавив перед названием поля Фамилия новый заголовок Поку-

патель:.

Нажмите кнопку Итоги со знаком суммы на вклад-

ке Конструктор. В спецификации появится новая строка с име-

нем Групповая операция.

■ Активизируйте поле строки Групповая операция колон-

ки Объем операции в QBE-области.

52

Рис. 61. Использование функции суммы в запросе

Откройте список функций и выберите операцию суммирования Sum (рис. 61).

Установите сортировку поля Объем операции По возрас-

танию.

Выполните запрос (для этого можно воспользоваться

кнопкой Выполнить с восклицательным знаком

на

вкладке Конструктор).

 

В результате выполнения запроса Dynaset показывает все суммы оборотов отдельных продавцов, приходящиеся на одного клиента (Покупателя). Так, суммируется объем торговых операций продавца Иванова с клиентом Шариковым: 453,00 р. – от

14.01.2003, 34,89 р. – от03.02.2003, итоговсумме– 577,89 р. Такое упорядочениеявляетсярезультатомвыполненияфункцииГруппировка для содержимого полей Продавец и Покупатель (рис. 62).

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

Содержимое поля Объем операции в каждом таком сгруппированном блоке было получено как сумма соответствующих

53

полей, вошедших в группу. Результат помещен в столбец с назва-

нием SumОбъем операций.

Рис. 62. Результат вычисления

Задание. Сохраните созданный запрос с именем Sum-

Объектов.

Внимание. Функция Группировка применяется по умолчанию. Она служит для объединения идентичных записей и исключения дублирования. Если в таблице используется поле счетчика, то все записи будут различными, так как каждая из этих записей содержит свой собственный оригинальный номер.

Задания. Путем комбинаций критериев и функций вычислений внутриодногозапросасформируйтезапросынаследующиевопросы:

1-йзапрос. КаковобъемторговыхоперацийпродавцаИванова?

Поле

Продавец

Объем операций

Покупатель

Функция

Группировка

Sum (Сумма)

Count

(Количество)

 

 

 

Критерий

«Иванов»

 

 

Сохраните запрос с именем «Объем торговых операций продавца Иванова» (рис. 63).

Рис. 63. Запрос «Объем торговых операций продавца Иванова»

54

2-й запрос. Какой оборот дал каждый клиент?

Поле

Продавец

Объем операций

Покупатель

Функция

Count

Sum (Сумма)

Группировка

Сохраните запрос с именем «Оборот каждого клиента»

(рис. 64).

Рис. 64. Запрос «Оборот каждого клиента»

3-й запрос. Какова величина полного оборота?

Поле

Продавец

Объем операций

Покупатель

Функция

Count

Sum (Сумма)

Count

Сохраните запрос с именем «Полный оборот» (рис. 65).

Рис. 65. Запрос «Полный оборот»

3.6. Запросы, обращающиеся к нескольким связанным таблицам

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

цы: Адреса и Торговля.

Внутри запроса будут использоваться следующие поля:

55

Таблица

Поле

Поле

Адреса

Фамилия

Телефон

Торговля

Продавец

Объем операций

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

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

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

Создайте новый запрос с помощью Конструктора за-

просов.

В результате двойного щелчка на имени первичной таблицы Адреса в диалоговом окне Добавление таблицы она помещается в QBE-область.

Ту же операцию повторите для связанной таблицы Торговля. Диалоговое окно Добавление таблицы закройте при помо-

щи кнопки Закрыть. Поля Фамилия, Телефон, Объем операции и Продавец включаются в запрос.

В ячейке Поле первого столбца (рис. 66) вместо имени поля Фамилия введите текст Покупатель (ФИО) :[Фамилия]+

«»+[Имя], тем самым в одном столбце запроса будут объедине-

ны Фамилия и Имя покупателя, разделенные пробелом.

■ Выполните запрос и сохраните с именем Информация о продавцах.

Благодаря однозначности отношения осуществляется корректное сопоставление блоков данных из разных таблиц (рис. 66), идентифицируемых посредством поля Код_Кон-

такта.

56

Рис. 66. Графическое представление связи между таблицами в окне конструктора запроса

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

3.7. Итоговый запрос

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

Создайте запрос с помощью Конструктора запросов.

В открывшемся окне выделите таблицу Адреса и щелкните по кнопке Добавить.

Выделите таблицу Список и щелкните по кнопке Добавить, затем по кнопке Закрыть. Список полей двух таблиц, соединенных линией связи, появится в окне конструктора.

57

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

Перетащите поле Фамилия в ячейку Поле первого столбца конструктора.

В такую же ячейку второго столбца перетащите поле Имя таблицы Адреса.

В третий, четвертый и пятый столбцы бланка запроса перетащите поле Дата таблицы Список (рис. 67).

Рис. 67. Запрос с групповыми операциями

В раскрывшемся списке ячейки Групповая операция третьего столбца бланка запроса выберите Min.

В той же ячейке четвертого столбца выберите пункт Max.

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

Щелкните по кнопке Вид, чтобы выполнить запрос. Единственный недостаток данного запроса – это непонятные имена 3, 4 и 5-го столбцов. Скорректируем их. Для этого перейдите в режим конструктора запроса, щелкнув по кнопке Выполнить.

В ячейке Поле третьего столбца (рис. 68) перед именем

Дата введите текст Дата первого контакта:.

58

Рис. 68. Переименование столбцов в запросе

В ячейке Поле четвертого столбца перед именем Дата

введите текст Дата последнего контакта: Дата.

ВячейкеПолепятогостолбцапередименемДатавведите текст Число контактов: Дата.

Снова щелкните по кнопке Выполнить. Окончательный результат показан на рис. 69.

Рис. 69. Запрос с итоговыми значениями

■ Сохраните данный запрос с именем «Сумма контактов».

3.8. Запрос действия

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

С помощью Конструктора запросов вкладки Создание

создайте новый запрос.

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

ПеретащитевбланкзапросаполеДата, значениякоторого нужно обновлять.

На вкладке Конструктор, палитре Тип запроса выберите кнопку Запрос обновление . В бланке выбранного запроса

59

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

Введите в ячейку Обновление формулу [Дата] + 58.

Чтобыпоявилисьтолькодаты, относящиесякянварю2012 года, введите в ячейку Условие отбора формулу Between DateValue (“1.01.2012”) And DateValue (“31.01.2012”).

Закройте запрос (рис. 70), сохранив его под именем Об-

новление.

Рис. 70. Запрос «Обновление»

Откройте таблицу Список. В ней есть три записи, относящиеся к январю 2012 года.

В левой части окна найдите запрос «Обновление»

и дважды щелкните на его значке.

Ответьте Да на вопрос о необходимости запуска запроса действия.

Щелкните по кнопке Да и изучите все изменения, произошедшие с данными таблицы Список.

4. ФИЛЬТРЫ

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

4.1. С помощью фильтра выделите несколько записей в та-

блице Адреса.

60

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