База данных должна содержать следующие элементы:
Таблица «Суда»: номер судна; название; водоизмещение; скорость хода.
Таблица «Грузы»: код груза; груз; единица измерения.
Таблица «Рейсы»: код рейса; номер судна; код груза; количество груза; порт отправления; дата отправления; порт назначения; дата прибытия; доход за рейс, р.; затраты за рейс, р.
Запросы на выборку:
- Перевозки из Мурманска во Владивосток.
- Перевозки в Мурманск грузов в количестве более 500 кг.
- Перевозки во Владивосток, совершенные не позднее 01.05.2009.
Запрос с вычисляемым полем:
Прибыль за рейс, выполненный судном.
Прибыль за рейс, выполненный судном.
Групповой запрос:
Количество рейсов, выполненных каждым судном.
Количество рейсов, выполненных каждым судном.
Запрос с параметром:
Рейсы, совершенные судном N.
Рейсы, совершенные судном N.
Отчет по рейсам, сгруппированный по названиям судов, сортировка по названию груза.
Форма для внесения записей в таблицу Суда.
Главная форма с макросами.
Проанализируем предметную область решаемой задачи и разработаем логическую структуру базы данных. Совокупность таблиц представлена на следующем рисунке. (сделано в MS Visio, но можно и прямо в Word делать).
Все названия, конечно, придуманы «от балды». Совпадения с реально существующими объектами считать случайными. Цифры тоже с потолка.На основе полученной совокупности таблиц составим логическую структурную схему проектируемой базы данных «Морские перевозки» (рис. 2).
База данных получилась очень простая, в некоторых вариантах есть задания посложнее.
По структуре таблиц базы данных. Таблицы Суда и Грузы – это справочники, являются главными по отношению к таблице Рейсы (поля связи Номер судна и Код груза). Таблица Рейсы содержит сведения о грузоперевозках, то есть в ней будет храниться большая часть информации. Ключевые поля в логической схеме выделены курсивом.
Дальше нужно описать каждое поле всех таблиц, показать ключевые поля и поля связи в подчиненной таблице.
Затем привести таблицы с типами данных каждого поля, размерами, обязательностью, полями подстановки, условиями на значение и сообщениями об ошибках. Поля подстановки указаны в задании, кстати. Я не стал их приводить. Это просто описательные действия. Не думаю, что возникнут сложности. Все делается по методичке.
И в заключение отчета составляем таблицу межтабличных связей.
Идем в программу MS Access и создаем базу данных.
В таблице Рейсы делаем поля подстановки Номер судна и Код груза. Причем, для подстановки лучше выбирать поля с названиями (чтобы было легче выбирать из списка), а ключевой столбец спрятать. Но в базе сохраняться все равно будут значения ключевого поля.
После создания таблиц идем в схему данных и настраиваем связи. Кликаем на каждую связь (они там уже должны быть, поскольку мы делали столбцы подстановки, Access уже сам связал таблицы) и ставим галочки на Обеспечение целостности данных, Каскадное удаление и Каскадное обновление. Получается вот такая схема:
Вносим в каждую таблицу по три записи, сохраняемся, заканчиваем отчет. Первая часть контрольной работы закончена.
Для второй части дополняем записи. Нужно, чтобы в таблице «Рейсы» было не менее 20 записей.
Затем идем в конструктор запросов и выбираем следующие данные из таблиц:
В условии отбора в пункте отправления ставим Мурманск, а в пункте назначения – Владик. Жмем на кнопку Выполнить, отбираются только записи по рейсам из Мурманска до Владивостока. Сохраняем под осмысленным именем.
Для второго запроса выбираем три таблицы (таблица Грузы нужна для единицы измерения, если уж следовать заданию буквально), в условии отбора ставим:
Для третьего запроса опять три таблицы, условия отбора:
Считаем, что рейс совершен, если судно прибыло в пункт назначения, поэтому отбираем по дате прибытия, а не по дате отправления.
Вычисляемый запрос:
Включим две таблицы (Рейсы и Суда), выберем поля Код рейса, Название судна, Доходы и Затраты. Остальное можно включить по желанию. Сохраняем запрос. Затем делаем вычисляемое поле – правая кнопка мыши, выбираем Построить, затем
Жмем ОК. В заголовке поля вместо Выражение 1 пишем Прибыль за рейс. Выполняем:
Появилось вычисляемое поле с результатом.
Запрос с групповыми операциями – нужно вывести количество рейсов, совершенных каждым судном.
В конструкторе запросов выбираем две таблицы (Рейсы и Суда), поля – Номер судна и Название из первой, Код рейса – из второй.
Затем нажимаем большую кнопку
(Итоги).
Под всеми полями в строке «Групповая операция» появилось слово «Группировка». У поля Код рейса меняем его на «Count» (количество). Что получается – строки в таблице Рейсы будут группироваться по номеру и названию судна (можно было бы оставить только номер или только название, оба выбраны для удобства). Если бы, к примеру, нужно было посчитать доходы на все рейсы каждого судна, то вместо Count следовало бы поставить Sum, причем выбрать не поле Код рейса, а поле Доходы за рейс.
В общем, получается такая картинка:
Запрос с параметром. Нужно вывести рейсы, совершенные судном N. Это может быть и номер, и название судна. Допустим, название.
В конструкторе выбираем две таблицы – Рейсы и Суда, поля – номер и название судна, что-нибудь по рейсам, например, код, пункты назначения и отправления, даты. Если добавить таблицу Грузы, то можно еще указать какой груз везли. Короче, как больше нравится.
Для установки параметра нажмем кнопку Параметры и введем в поле Параметр слово «Название» (или как вам удобнее, это просто название параметра). Тип данных в данном случае оставляем текстовый, поскольку у поля Название судна как раз текстовый тип.
Сохраняем параметр. У поля Название судна в строке Условие отбора пишем наш параметр в квадратных скобках: [Название]. Выполняем запрос. Появилось окно с просьбой ввести название, вводим «1 судно» (или какие у вас названия судов, мне было лень придумывать). Отобрались рейсы по этому судну.
Вроде бы все работает. Но… Попробуйте ввести несколько первых букв вместо названия. Не отберется ничего. А если название, допустим, «Адмирал Иван Федорович Крузенштерн – Человек и пароход»? Замучаешься вводить полностью. Какой выход? Можно сделать отбор по числовому параметру Номер судна. Его вводить проще. А можно в условии отбора просто написать такое выражение:
Like ([Название]+"*")
Это значит, что будут отбираться те записи, которые начинаются с символов, указанных в параметре плюс любое количество любых символов.
Вот что получается
Отчет по рейсам, сгруппированным по названию судна, с сортировкой по грузу.
Первым делом создаем и сохраняем многотабличный запрос.
Затем идем в Мастер отчетов, в раскрывающемся списке Таблицы и запросы выбираем наш многотабличный запрос, затем выбираем все его поля и переходим далее. Вид представления данных.
Видим, что Access уже сам выбрал Вид представления данных по таблице Суда (нам это и надо). Идем дальше.
Уровни группировки
Как раз выбрана группировка по названию. Если нужно что-то другое, то можно изменить, кликая на левый или правый столбец. Уровень группировки будет добавляться или убираться.
Далее выбираем сортировку. По заданию нужно сортировать по грузу. Его и выбираем:
Если нужны итоги, например, количество груза по всем рейсам и всем судам или доходы с затратами, то есть кнопка Итоги, там и выбираем.
А дальше идут настройки отчета. Выбираем, что понравилось. Потом задаем имя отчета (на забываем, как оно должно быть записано по заданию). Выбираем посмотреть отчет или изменить макет. И жмем Готово.
С первого раза получается страшненько, но все исправимо. Идем в конструктор, настраиваем ширину полей, их расположение. И, наконец, добиваемся хотя бы приемлемой красоты.
Что там еще осталось? Одна форма для таблицы Рейсы и главная форма с макросами.
Встаем на таблицу Рейсы. Открываем вкладку Создание, нажимаем Форма, Разделенная форма, Несколько элементов или идем в Мастер форм и делаем все по подсказкам. Вот, например, разделенная форма.
Можно настроить внешний вид.
Дальше создаем пустую форму, оформляем по цвету, размеру, пишем надписи-названия. Помещаем на нее кнопки. Для каждой выбираем свое действие – для открытия форм Работа с формой – Открыть форму. Для запросов – Разное – Выполнить запрос. Для отчетов – Работа с отчетом – Просмотр отчета. Для выхода из приложения – Приложение – Выход из приложения. Затем выбираем рисунок и обзываем эту кнопку своей фамилией.
Для того, чтобы показать таблицы, создаем для каждой из них табличную форму и дальше уже открываем форму.
Если кнопки не срабатывают (слишком длинные или некорректные имена запросов, отчетов и прочих объектов), то есть появляется такое вот предупреждение
Идем в конструктор нашей главной формы, кликаем правой мышей на нужную кнопку, выбираем свойства.
Там, где Внедренный макрос, нажимаем на кнопку с многоточием.
В нижней части, там, где имя запроса, выбираем из списка нужное, сохраняем. Возвращаемся в форму. Все работает.
Вот, кажется, и все. Объяснил подробно. В других вариантах буду рассматривать только таблицы, запросы и отчеты. Остальное у всех вариантов одинаковое.
Всем удачи!
