
- •Содержание
- •5.1 Вопросы для самопроверки. 91
- •6.4 Контрольные вопросы 97
- •7.2 Контрольные вопросы: 102
- •Лабораторная работа № 1. Построение информационно - логической модели «Поставка товаров»
- •1.1Изучение предметной области
- •1.1.1Общие сведения
- •1.1.2Описание предметной области «Склад»
- •1.1.3Список вопросов, на которые должна отвечать информационная система
- •1.1.4Описание первичных документов
- •1.2Определение логической структуры данных
- •1.2.1Объекты справочной и учетной информации
- •1.2.2 Выявление функциональной зависимости
- •1.2.3Требования нормализации
- •1.3Построение связей информационных объектов
- •1.3.1Тип связи информационных объектов
- •1.3.2Определение связей предметной области Склад
- •1.4Построение информационно-логической модели базы данных.
- •1.4.1Матрица смежности илм
- •1.4.2Логическая модель предметной области
- •1.4.3Логическая структура реляционной базы данных
- •1.5Самостоятельная работа
- •1.6Контрольные вопросы:
- •Лабораторная работа № 2.- введение в субд access
- •2.1Создание базы данных
- •2.2Создание таблиц базы данных
- •2.3Создание таблицы товар
- •2.4Создание маски ввода
- •2.5Создание домена
- •2.6Ввод данных в бд "Склад" таблицу товар
- •2.7Использование данных типа Поле объекта ole.
- •2.8Самостоятельная работа
- •Контрольные вопросы
- •Лабораторная работа № 3. Поля со списком, схема данных
- •3.1Использование поля со списком при вводе записей.
- •3.2Использование поля со списком ключевым столбцом.
- •3.3Создание схемы базы данных "Склад".
- •3.4Создание связей между таблицами схемы данных
- •3.5Обеспечение целостности данных
- •3.6Каскадное обновление и удаление связанных записей
- •3.7Проверка поддержания целостности в базе данных
- •3.8Самостоятельная работа
- •3.9Контрольные вопросы
- •Запросы
- •Назначение и виды запросов
- •Конструирование запросов
- •Вычисляемые поля.
- •Использование групповых операций в запросах
- •Запрос с функцией Count
- •Самостоятельная работа
- •Организация запросов на выборку с использованием языка sql
- •Синтаксис оператора select
- •Простейшие запросы Запросы на выборку столбцов
- •Запрос на выборку с упорядочиванием всех полей.
- •Простейшие запросы с условием
- •Групповые функции и агрегирование
- •Подзапрос
- •Вложенный подзапрос
- •Связный подзапрос
- •Самостоятельная работа
- •Вопросы для самопроверки
- •Многотабличные запросы
- •Многотабличный запрос
- •Формирование записей результата при выполнении запроса
- •Параметрические запросы
- •Ссылки на имена полей различных таблиц в условии отбора
- •Решение задач на основе нескольких запросов
- •3.10Самостоятельная работа
- •Контрольные вопросы по запросам на выборку
- •Диалоговый графический интерфейс для работы с базой данных через формы
- •3.11Создание форм с использованием мастера форм
- •3.11.1Однотабличные формы
- •Разработка многотабличной формы
- •Режим конструктора для создания и корректировки форм
- •Вставка в форму элемента ActiveX
- •Извлечение данных из списка в несвязный элемент управления
- •Создание формы с автоматическим подбором кодов товара соответствующего указанному договору
- •Вычисляемые поля формы Вычисляемое поле
- •Вычисление итоговых значений
- •Задание для самостоятельной работы
- •Вопросы для самопроверки.
- •Разработка отчетов
- •Создание отчетов в режиме мастера Однотабличные отчеты
- •Многотабличные отчеты
- •Создание и корректировка отчетов в режиме конструктора Корректировка отчета в режиме конструктора
- •Определение параметров в отчете
- •Задания для самостоятельной работы
- •Отгрузка товара
- •Контрольные вопросы
- •Интерфейс приложений
- •Создание кнопочной формы
- •Контрольные вопросы:
- •Список литературы
Формирование записей результата при выполнении запроса
Сначала рассмотрим, как формируются записи результата запроса, если не заданы условия отбора. В примере для каждой пары таблиц указан способ объединения только тех записей, в которых связанные поля обеих таблиц совпадают (в соответствии с заданным по умолчанию первым способом объединения). При этом, поскольку рассматриваемые пары таблиц находятся в отношении один-ко-многим и в схеме данных для их связи определены - параметры обеспечения целостности, в результате сформируется столько записей, сколько их имеется в подчиненной таблице низшего уровня поставка_план. Обеспечение целостности не позволяет включить в таблицу поставка_план записи, для которых не существует записей в главных таблицах. По сути, записи таблицы поставка_план дополняются данными из таблиц товар и покупатель. Вместо ключевого поля код__тов в запись о плане поставок будет включено наименование товара, а вместо ном_дог – наименование покупателя.
При задании условий отбора основные принципы формирования записей результата остаются прежними. Выполняется только одна дополнительная функция: отбор записей, соответствующих сформулированным условиям. Таблица с результатом запроса будет содержать все записи о поставках товара, наименования которых указаны в условии отбора.
Сохраните запрос под именем "План поставок".
Параметрические запросы
В предыдущем примере для задания наименования товара необходимо было в режиме конструктора корректировать бланк запроса. Чтобы избежать этого, используйте в запросе параметры. Перед выполнением запроса Access выдаст окно ввода и введет их в условия отбора значение указанного параметра.
В условие отбора поля наим_тов вместо конкретных значений введем название параметра (Рисунок 8.4). Название параметра вводится как текст, заключенный в квадратные скобки: [Наименование товара]
Рисунок 8.4. Бланк запроса с параметрами для поля НАИМ_ТОВ
Ссылки на имена полей различных таблиц в условии отбора
В условии отбора в качестве операндов могут использоваться значения из разных полей. Выбрать записи из таблицы отгрузка, в которых стоимость товара не соответствует стоимости, указанной для этого товара в таблице товар, вычислить отклонения. Запрос представленный на рисунке 8.5.
Рисунок 8 5. Бланк запроса с параметрами для поля НАИМ_ТОВ
Вычисляемое поле
заполняется через кнопку Построить
(Рисунок 8.6.)
Рисунок 8 6. Окно построителя для расчета отклонения
Результат представлен на Рисунок 8.7.
Рисунок 7.7. Записи об отгрузки товаров с неверно указанной суммой
Решение задач на основе нескольких запросов
Реализовать алгоритм и сформировать результат на основе входных данных из таблиц базы и параметров задачи одним запросом при решении сложной задачи невозможно. Для решения сложных задач они должны быть разбиты на несколько более простых подзадач выполняемых отдельными запросами. Подзапросы выполняются последовательно. Для представления алгоритмов решения сложных задач целесообразно использовать функционально-технологическую схему, на которой указываются входные и выходные данные каждого из запросов. В простейшем случае выходные данные предшествующего запроса являются входными для следующего построенного на нем запроса и, при выполнении только последнего запроса в цепочке построенных друг на друге запросов вы инициируете последовательное выполнение всех запросов цепочки и полное решение задачи.
Задача: Необходимо произвести анализ выполнения договоров поставки товаров на конец заданного месяца. При решении этой задачи должно быть подсчитано количество товара, запланированного к поставке, отгруженного покупателям в соответствии с договорами, и получена разность поставок.
Данные о плановых поставках хранятся в таблице поставка_план. На ее основе создадим запрос для подсчета суммарного количества товаров, запланированных к поставке на конец заданного месяца (Рисунок 8.8).
Рисунок 7.8. Подсчет плановой поставки товаров
В запросе План производится группировка записей таблицы по полю код_тов. Для операции используются только записи, в которых срок поставки (месяц) имеет значение, меньшее или равное заданному параметром запроса с именем номер месяца. В каждой, группе записей об одном товаре суммируется количество, запланированное к поставке.
Данные о фактически, отгруженных покупателям товаров хранятся в таблице отгрузка. На ее основе может быть выполнен подсчет суммарного количества фактически поставленных товаров. Для отбора поставок выполненных до конца заданного месяца, добавим в запрос таблицу накладная, в которой хранится дата отгрузки товаров (Рисунок 8.9). Таблицы, на которых построен запрос Факт, находятся в отношении один-ко-многим, для их связи по составному ключу установлены параметры обеспечения целостности. В результате объединения этих таблиц формируется таблица запроса с числом записей, равным числу записей в подчиненной таблице отгрузка.
Для отбора только тех накладных, по которым отгружался товар до конца заданного месяца, из даты отгрузки с помощью функции Month выделяется номер месяца, и для этого вычисляемого поля в условие отбора вводится параметр запроса с именем, совпадающим с именем параметра в. предыдущем запросе Номер месяца.
Рисунок 8.9. Подсчет суммарного количества отгруженных товаров
Сравнение количества запланированных к поставке и отгруженных товаров логично произвести в запросе, основанном на двух предыдущих. Однако необходимость учесть, что по некоторым договорам товар мог не отгружаться и в то же время отгружаться покупателям, которые не заключали договоров, требует добавления в запрос таблицы товар, в которой представлена вся номенклатура товаров фирмы. Последнее обстоятельство позволит установить в запросе такие параметры объединения таблиц, которые приведут к формированию в таблице запроса записей не только о товарах, по которым был определен план и факт поставки, но и о запланированных к поставке, но не отгружаемых; отгружаемых, но не планируемых, вообще не планируемых и не отгружаемых товарах (Рисунок 8.10).
В запросе для связей установлен второй способ объединения записей, поэтому в таблицу запроса будут включены и те записи из таблицы товар, для которых нет связанных записей в таблицах план и Факт.
Учитывая, что во всех пустых полях таблицы запроса определено значение Null, для получения разности между запланированным и фактически поставленным количеством товара создадим вычисляемое поле с выражением Nz( [Sum-КОЛ_ПОСТ] )-Nz ( [Sum-КОЛ_ОТГР] ). Присвоим вычисляемому полю имя "Отклонение".
Функция nz (выражение; [значение__если__Null]) возвращает значение, указанное первым аргументом, или для поля со значением Null новое значение, указанное вторым аргументом. Если второй аргумент не указан, по умолчанию для числового поля со значением Null возвращается значение 0, для символьного — пустая строка
Рисунок 8.10. Вычисление разности плановых и фактических поставок
В таблице запроса Анализ выполнения плана (Рисунок 8.11) представлен весь список товаров фирмы. Показано, что не все товары были заказаны в договорах, только по ряду из них выполнялась отгрузка товаров, а некоторые товары отгружались без предварительного оформления договоров. Выполнение запроса Анализ выполнения плана инициирует выполнение запросов План и Факт, поэтому нет необходимости в их предварительном выполнении.
Записав в условие отбора поля кол_пост значение Not Null, можно отобрать только строки, относящиеся к товарам, на которые были заключены договоры. Для того чтобы явно увидеть, в какой последовательности производится объединение таблиц запроса, просмотрите запрос в режиме SQL.
В предложении from указано, что сначала будет производиться левое внешнее объединение таблиц товар и план по полю связи код_тов (товар left join План on товар . код_тов = план. код_тов). Затем будет выполнено левое внешнее объединение таблицы, полученной в результате первого объединения, и таблицы Факт по тому же полю связи.
Объединение таблиц в рассматриваемом запросе дает правильный результат только потому, что в каждой из объединяемых таблиц код_тов является ключом. В таблице товар ключ определен изначально. В таблицах запросов План и Факт поле код_тов также имеет уникальные значения, т. к. они получены в результате группировки по этому полю.