1.  Создадим в ACCESS новую базу данных с названием «Оптовая база».

2.  В созданной базе необходимо будет создать три таблицы: «Товары», «Поставщики» и «Поставки». В таблице «Товары» будет храниться информация о имеющихся товарах на складе, в таблице «Поставщики» - о поставщиках, с которыми работает база, в таблице «Поставки» - о всех поставках от поставщиков.

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

4.  В окне «Конструктора» сформируем структуру таблицы, заполнив список полей с указанием их типов.

В ячейку столбца «Имя поля» введем «Код товара», в столбце «Тип данных» оставим тип «Счетчик». На панели «Свойства поля» оставим все без изменений, так как здесь по умолчанию установлены необходимые параметры. Так же по умолчанию данное поле является ключевым.

В следующую ячейку столбца «Имя поля» введем «Название товара», тип данных выберем «Тестовый». На панели свойств укажем размер поля – 100 знаков, в строчке «Обязательное поле» выберем «Да», в строчке «Пустые строки» – «Нет» (запрещает ввод пустых строк в данное поле).

Далее добавим поле «Кол-во на складе», тип данных «Числовой». Следующее поле – «Единица измерения», тип данных «Текстовый». Размер поля установим равным 50. Далее добавим поле «Стоимость единицы товара», выберем тип данных «Денежный. Последнее поле – «Описание», тип данных «Поле МЕМО» (данный тип данных позволяет ввод больших объемов текста)

НЕ нашли? Не то? Что вы ищете?

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

На рисунке 1 представлена таблица «Товары» в режиме конструктора с заполненным списком полей и указанием их типов и свойств.

Рис. 1. Таблица «Товары» в режиме конструктора.

5.  Далее создадим таблицу «Поставщики», так же перейдем в режим «Конструктор» и заполним столбцы «Имя поля» и «Тип данных», а так же укажем необходимые свойства полей:

-  Поле «Код поставщика», тип «Счетчик», индексированное поле – «Да (Совпадения не допускаются)», ключевое поле

-  Поле «ФИО», тип «Текстовый», размер поля – 70 знаков, обязательное поле – «Да», Пустые строки – «Нет»

-  Поле «Телефон», тип «Текстовый», размер поля – 30 знаков, обязательное поле – «Да», пустые строки – «Нет»

-  Поле «Адрес», тип «Текстовый», размер поля – 100 знаков, обязательное поле – «Да», пустые строки – «Нет»

На рисунке 2 представлена таблица «Заказ» в режиме конструктора с заполненным списком полей и указанием их типов и свойств.

Рис. 2. Таблица «Поставщики» в режиме конструктора.

6.  Далее необходимо создать таблицу «Поставки» и заполнить столбцы «Имя поля» и «Тип данных», а так же укажем необходимые свойства полей:

-  Поле «Номер поставки», тип «Счетчик», индексированное поле – «Да (Совпадения не допускаются)», ключевое поле

-  Поле «Код поставщика», тип «Числовой», обязательное поле – «Да»

-  Поле «Код товара», тип «Числовой», обязательное поле – «Да»

-  Поле «Кол-во товара», тип «Числовой», обязательное поле – «Да»

-  Поле «Цена единицы товара», тип «Денежный», обязательное поле – «Да»

-  Поле «Срок поставки», тип «Дата/время», формат поля – «Краткий формат даты», обязательное поле – «Да»

-  Поле «Номер счета», тип «Текстовый», размер поля – 50 знаков, обязательное поле – «Да», пустые строки – «Нет»

7.  Теперь нужно осуществить подстановку для полей «Код поставщика» и «Код товара» данной таблицы из соответствующих полей таблиц «Поставщики» и «Товары», к данным полям необходимо применить Мастер подстановки, выбрав его из выпадающего списка в столбце Тип данных в режиме Конструктора. Далее следовать указаниям Мастера подстановки.

8.  В поле «Код поставщика» в столбце «Тип данных» выберем «Мастер подстановок». В появившемся диалоговом меню (рис. 3) выберем первый способ подстановки «Объект «столбец подстановки» будет использовать значение из таблицы или запроса», нажимаем «Далее».

Рис. 3. Диалоговое окно «Мастер подстановки»

Выбираем из списка таблиц таблицу «Поставщики», нажимаем «Далее». Добавляем поле «Код поставщика», нажимаем три раза «Далее» и «Готово». Аналогичные действия осуществляем для поля «Код товара». На рисунке 4 представлена таблица «Поставки» в режиме конструктора.

9.  Теперь необходимо реализовать связи между таблицами. В режиме таблицы вызовем «Схему данных». В схеме данных уже установлены нужные нам связи, так как мы использовали «Мастер подстановок» (рис. 5):

-  Свяь 1:∞ (один-ко-многим) между таблицами «Поставщики» (главная таблица) и «Поставки» (подчиненная таблица) по полям «Код поставщика».

-  Свяь 1:∞ (один-ко-многим) между таблицами «Товары» (главная таблица) и «Поставки» (подчиненная таблица) по полям «Код товара».

Рис. 4. Таблица «Поставки» в режиме конструктора.

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

10.  Далее необходимо заполнить таблицы данными, учитывая требования к заданию. В таблицы «Товары» и «Поставщики» добавим по 10 записей. Количество данных в таблицах должно обеспечивать выдачу не менее 3-5 записей по каждому запросу задания. Ориентируясь на это, в таблицу «Поставки» добавим 42 записи. На рисунках 6, 7 и 8 изображены таблицы с введенными данными.

Рис. 6. Таблица «Товары».

Рис. 7. Таблица «Поставщики».

Рис. 8. Таблица «Поставки».

11.  Теперь создадим формы для ввода информации пользователями. На главной панели перейдем на вкладку «Создание» в блоке «Формы» вызовем «Мастер форм». С помощью «Мастер форм» создадим форму для таблицы «Товары» (рис. 9).

Рис. 9. Диалоговое окно «Мастер форм»

В выбранные поля перенесем все доступные поля, так как форма должна содержать все поля таблицы. Нажмем «Далее». Выберем внешний вид формы «В один столбец», нажмем «Далее». Выберем требуемый стиль «Борей», нажмем «Далее». Имя формы оставим заданным по умолчанию - «Товары». Дальнейшие действия – изменить макет формы. Нажмем «Готово». При необходимости редактируем макет для корректного отображения. Аналогично создадим формы «Заказ» и «Состав заказа». Внешний вид и стиль форм сделаем единым. На рисунке 10 представлена форма «Товары».

Рис. 10. Форма «Товары»

12.  Далее необходимо создать запросы на выборку:

-  Выбрать поставщиков, которые поставляют все товары.

-  Определить поставщика, который поставляет товар «коврик для мыши» по самой низкой в среднем цене.

-  Вывести названия товаров, цены на которые никогда не повышались.

-  Определить, на сколько единиц возросли поставки товара «инструмент» в 2001г. по сравнению с предыдущим годом.

13.  Первый запрос «Выбрать поставщиков, которые поставляют все товары» состоит из двух запросов. Сначала делаем запрос, который исключает повторяющиеся записи в столбце «Название товара». На языке SQL запрос выглядит так:

SELECT Поставщики.[Код поставщика], Поставщики. ФИО, Товары.[Название товара], Sum(Поставки.[Кол-во товара]) AS [Sum]

FROM Поставщики INNER JOIN (Товары INNER JOIN Поставки ON Товары.[Код товара] = Поставки.[Код товара]) ON Поставщики.[Код поставщика] = Поставки.[Код поставщика]

GROUP BY Поставщики.[Код поставщика], Поставщики. ФИО, Товары.[Название товара];

При выполнении запроса мы получаем четыре столбца: «Код поставщика», «ФИО», «Название товара» и «Sum». В столбце «Sum» подсчитывается количество каждого товара от каждого поставщика, что позволит исключить повторяющиеся записи.

Далее создаем еще один запрос:

SELECT [все товары сумма].[Код поставщика], [все товары сумма].ФИО

FROM [все товары сумма]

GROUP BY [все товары сумма].[Код поставщика], [все товары сумма].ФИО

HAVING (((Count([все товары сумма].[Название товара]))=(SELECT Count([Название товара]) FROM Товары)));

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

Рис. 11. Запрос «Все товары»

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

SELECT Поставщики.[Код поставщика], Поставщики. ФИО, Avg(Поставки.[Цена единицы товара]) AS [Средняя цена]

FROM Поставщики INNER JOIN (Товары INNER JOIN Поставки ON Товары.[Код товара]=Поставки.[Код товара]) ON Поставщики.[Код поставщика]=Поставки.[Код поставщика]

WHERE (((Товары.[Название товара])="коврик для мыши"))

GROUP BY Поставщики.[Код поставщика], Поставщики. ФИО;

Далее находим минимальную цену из полученных в предыдущем запросе:

SELECT Min([средцена на коврик].[Средняя цена]) AS [Min цена]

FROM [средцена на коврик];

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

SELECT [средцена на коврик].ФИО, [минцена на коврик].[Min цена]

FROM [средцена на коврик], [минцена на коврик]

WHERE ((([средцена на коврик].[Средняя цена])=[минцена на коврик]![Min цена]));

На рисунке 12 представлен итоговый запрос «Поставщик минцены на коврик» в режиме таблицы.

Рис. 12. Запрос «Поставщик минцены на коврик»

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

SELECT Поставки.[Код товара], Товары.[Название товара], Min(Поставки.[Срок поставки]) AS Мин

FROM Товары INNER JOIN Поставки ON Товары.[Код товара]=Поставки.[Код товара]

GROUP BY Поставки.[Код товара], Товары.[Название товара];

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

Теперь создадим запрос, который присвоит цену из таблицы «Поставки» самым ранним датам поставки:

SELECT Поставки.[Код товара], [товары минсрок].[Название товара], Поставки.[Цена единицы товара]

FROM [товары минсрок] INNER JOIN Поставки ON [товары минсрок].[Код товара]=Поставки.[Код товара]

WHERE (((Поставки.[Срок поставки])=[товары минсрок].Мин))

ORDER BY Поставки.[Код товара];

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

На основе последних двух запросов сформируем итоговый запрос по товарам, на которые никогда не повышалась цена. Запрос показывает только те товары, у которых цена в поздний срок поставки меньше либо равна цене в ранний срок поставки.

SELECT [товары цены на макссрок].[Код товара], [товары цены на макссрок].[Название товара]

FROM [товары цены на макссрок] INNER JOIN [товары цены на минсрок] ON [товары цены на макссрок].[Код товара]=[товары цены на минсрок].[Код товара]

WHERE [товары цены на макссрок].[Цена единицы товара]<=[товары цены на минсрок].[Цена единицы товара];

На рисунке 13 представлен итоговый запрос «Товары итоговый» в режиме таблицы.

Рис. 13. Запрос «Товары итоговый»

16.  Теперь необходимо определить, на сколько единиц возросли поставки товара «инструмент» в 2001г. по сравнению с предыдущим годом. Создаем запрос с группировкой. Суммируем количество товара «инструмент» (ставим как условие), группируем по году, который определяем с помощью функции DatePart:

SELECT Sum(Поставки.[Кол-во товара]) AS [Sum], DatePart('yyyy',[Поставки]![Срок поставки]) AS Год

FROM Товары INNER JOIN Поставки ON Товары.[Код товара]=Поставки.[Код товара]

WHERE (((Товары.[Название товара])="Инструмент"))

GROUP BY DatePart('yyyy',[Поставки]![Срок поставки]);

Из предыдущего запроса сделаем запрос на количество инструмента поставленного в 2000 году:

SELECT [инструмент].Sum, [инструмент].Год

FROM инструмент

WHERE ((([инструмент].Год)=2000));

Аналогичный запрос сделаем для 2001 года. И из двух последних запросов делаем итоговый запрос, в котором рассчитывается разность между количеством поставляемого инструмента в 2001 и 2000 годах:

SELECT [Инструмент2001]![Sum]-[Инструмент2000]![Sum] AS Разность

FROM Инструмент2000, Инструмент2001;

На рисунке 14 представлен итоговый запрос «Инструмент разность» в режиме таблицы.

Рис. 14. Запрос «Инструмент разность»