SELECT [Купил билет].Номер, [Номер поезда].[Номер поезда], [Дата отправления].Дата, Пассажир.ФИО, [Купил билет].Цена
FROM Пассажир INNER JOIN ([Номер поезда] INNER JOIN ([Дата отправления] INNER JOIN [Купил билет] ON [Дата отправления].Код = [Купил билет].Дата) ON [Номер поезда].Код = [Купил билет].[Номер поезда]) ON Пассажир.Код = [Купил билет].Пассажир
ORDER BY [Купил билет].Номер;
Запрос предназначен для выборки из четырех таблиц номера билета, номера поезда, даты отправления, ФИО пассажира и цены билета. Также запрос производит сортировку по возрастанию по полю «Номер билета». Из формы можно удалить любой существующий билет.
Форма «Билет» (Приложение 12) содержит три кнопки. При нажатии на кнопку «ОК» выполняется макрос «КнОК_Билет», который закрывает форму «Новый пассажир» и отчет «ОБилет». В случае если билет сформирован правильно, макрос заносит в цену билета подсчитанную его стоимость. Если в бланк билета не было занесено никакой информации, то макрос закрывает форму «Билет», открывает форму «Билеты» и прекращает свою работу. После этого макрос открывает запрос «ЗУ1».
DELETE Т1.Мест
FROM Т1;
Этот запрос очищает таблицу «Т1». Потом открывается запрос «З1».
INSERT INTO Т1 ( Мест )
SELECT [Количество вагонов]*[Количество мест] AS Мест
FROM [Тип вагона] INNER JOIN [Количество вагонов] ON [Тип вагона].Код = [Количество вагонов].[Тип вагона]
GROUP BY [Количество вагонов]*[Количество мест], [Количество вагонов].[Номер поезда], [Тип вагона].Код
HAVING ((([Количество вагонов].[Номер поезда])=[Forms]![Билет]![Номер поезда]) AND (([Тип вагона].Код)=[Forms]![Билет]![Тип вагона]));
Этот запрос вычисляет и заносит в таблицу «Т1» количество существующих мест в данном поезде в данном типе вагона. После этого невидимо для пользователя открывается форма «Ф1». Из формы «Ф1» заносится поле «Мест» в форму «Билет» в невидимое поле «Поле30». Потом форма «Ф1» закрывается. Далее снова открывается запрос «ЗУ1» и после этого запрос «З2».
INSERT INTO Т1 ( Мест )
SELECT Count(З3.Номер) AS [Count-Номер]
FROM З3;
Этот запрос подсчитывает и заносит в таблицу «Т1» количество записей в запросе «З3».
SELECT [Купил билет].Номер
FROM [Купил билет]
GROUP BY [Купил билет].Номер, [Купил билет].[Номер поезда], [Купил билет].[Тип вагона], [Купил билет].Дата
HAVING ((([Купил билет].Номер)<>[Forms]![Билет]![Номер]) AND (([Купил билет].[Номер поезда])=[Forms]![Билет]![Номер поезда]) AND (([Купил билет].[Тип вагона])=[Forms]![Билет]![Тип вагона]) AND (([Купил билет].Дата)=[Forms]![Билет]![Дата]));
Запрос «З3» подсчитывает количество уже проданных билетов на данный поезд на данную дату отправления в данный тип вагона. Причем текущий билет в этом подсчете не учитывается. После этого невидимо для пользователя снова открывается форма «Ф1». Из формы «Ф1» заносится поле «Мест» в форму «Билет» в невидимое поле «Поле32». Потом форма «Ф1» закрывается. В случае если содержание поля «Поле30» больше поля «Поле32», макрос закрывает форму «Билет» и открывает форму «Билеты». В противном случае на экране появляется сообщение «Мест нет». При нажатии на кнопку «Новый пассажир» выполняется макрос «КнНовый пассажир_Билет», который открывает форму «Новый пассажир». При нажатии на кнопку «Отчет» выполняется макрос «КнОтчет_Билет», который открывает для просмотра отчет «ОБилет». Также на форме расположены восемь полей: номер билета, пассажир, дата отправления, номер поезда, стоимость, тип вагона, скидка, до станции. Поля «Номер поезда», «Тип вагона», «До станции», «Пассажир», «Дата отправления» являются полями со списком. Источником строк поля «Номер поезда» является запрос «ЗНомер поезда».
SELECT [Номер поезда].Код, [Номер поезда].[Номер поезда], [Номер поезда].[Вид поезда]
FROM [Номер поезда]
ORDER BY [Номер поезда].[Номер поезда];
Этот запрос реализует сортировку номеров поездов по возрастанию. Источником строк поля «Тип вагона» является запрос «ЗТип вагона». Источником строк поля «До станции» является запрос «ЗСтанция2».
SELECT Станция.Код, Станция.Станция, Станция.Расстояние, [Следует через].[Номер поезда]
FROM Станция INNER JOIN [Следует через] ON Станция.Код = [Следует через].Станция
WHERE ((([Следует через].[Номер поезда])=[Forms]![Билет]![Номер поезда]))
ORDER BY Станция.Станция;
Этот запрос выдает только те станции, через которые проходит данный поезд. Станции отсортированы в алфавитном порядке. Источником строк для поля «Пассажир» является запрос «ЗПассажир». Источником строк для поля «Дата отправления» является запрос «ЗДата отправления».
SELECT [Дата отправления].Код, [Дата отправления].Дата
FROM [Дата отправления]
ORDER BY [Дата отправления].Дата DESC;
Этот запрос сортирует в порядке убывания даты отправления поездов. Поле «Скидка» недоступно для редактирования пользователем, оно принимает значение в зависимости от выбранного пассажира. Поле «Стоимость» также недоступно для редактирования, оно принимает вычисляемое значение. Источником формы является запрос «ЗБилет».
SELECT [Купил билет].Номер, [Купил билет].Дата, [Купил билет].[Номер поезда], [Купил билет].[Тип вагона], [Купил билет].Станция, [Купил билет].Пассажир, [Купил билет].Цена, Скидка.Льгота, [Расстояние]*[Стоимость км]*[Коэффициент класса]*(100-[Льгота])/100 AS Стоимость
FROM [Тип вагона] INNER JOIN (Станция INNER JOIN (Скидка INNER JOIN (Пассажир INNER JOIN (([Вид поезда] INNER JOIN [Номер поезда] ON [Вид поезда].Код = [Номер поезда].[Вид поезда]) INNER JOIN [Купил билет] ON [Номер поезда].Код = [Купил билет].[Номер поезда]) ON Пассажир.Код = [Купил билет].Пассажир) ON Скидка.Код = Пассажир.Скидка) ON Станция.Код = [Купил билет].Станция) ON [Тип вагона].Код = [Купил билет].[Тип вагона];
Запрос предназначен для выборки всех полей из таблицы «Купил билет» и поля «Скидка» из таблицы «Скидка». Также в запросе определяется вычисляемое поле «Стоимость». В форме можно установить любые параметры текущего билета.
Форма «Новый пассажир» (Приложение 13) содержит одну кнопку «ОК», при нажатии на которую выполняется макрос «КнОК_Новый пассажир», который закрывает форму «Новый пассажир». Также на форме расположены простое поле «ФИО» и поле со списком «Скидка». Источником строк для поля «Скидка» является запрос «ЗСкидка».
SELECT Скидка.Код, Скидка.Льгота
FROM Скидка
ORDER BY Скидка.Льгота;
Запрос сортирует процент скидки по возрастанию. Источником формы является таблица «Пассажир». В форму можно ввести ФИО нового пассажира и процент скидки предоставляемый ему. Если нажать кнопку «ОК» и при этом ничего не ввести, то новый пассажир не будет добавлен.
Форма «Сервис» (Приложение 14) является основным меню выбора предоставляемых программным приложением сервисных услуг. При нажатии на кнопку «Назад» выполняется макрос «КнНазад_Сервис», который закрывает форму «Сервис» и открывает форму «Главная». При нажатии на кнопку «Сколько пассажиров ездило до заданной станции в указанную дату» выполняется макрос «КнПассажиры до станции_Сервис», который закрывает форму «Сервис» и открывает форму «Пассажиры до станции». При нажатии на кнопку «На каких поездах можно доехать до указанной станции» выполняется макрос «КнПоезда до станции_Сервис», который закрывает форму «Сервис» и открывает форму «Поезда до станции». При нажатии на кнопку «Сколько стоили все билеты на заданный поезд на заданную дату» выполняется макрос «КнПриход_Сервис», который закрывает форму «Сервис» и открывает форму «Приход».
Форма «Поезда до станции» (Приложение 15) содержит две кнопки. При нажатии на кнопку «Назад» выполняется макрос «КнНазад_Поезда до станции», который закрывает форму «Поезда до станции» и отчет «ОПоезда до станции». После этого макрос открывает форму «Сервис». При нажатии на кнопку «Отчет» выполняется макрос «КнОтчет_Поезда до станции», который открывает для просмотра отчет «ОПоезда до станции». После открытия формы автоматически запускается макрос «ОткрПоезда до станции», который задает полю со списком «До станции» значение первого элемента списка. На форме расположены три поля: номер поезда, тип поезда, до станции. Поля «Номер поезда» и «Тип поезда» недоступны для редактирования пользователем. Поле «До станции» является, как уже говорилось, полем со списком. В качестве источника строк используется запрос «ЗСтанция». После изменения значения поля «До станции» выполняется макрос «ИзмВСтанция_Поезда до станции», который устанавливает фильтр, для того чтобы на экран выводились только те поезда, которые проходят через станцию, указанную в поле «До станции». Источником формы является запрос «ЗПоезда до станции».
SELECT [Номер поезда].[Номер поезда], [Вид поезда].[Вид поезда], [Следует через].Станция
FROM ([Вид поезда] INNER JOIN [Номер поезда] ON [Вид поезда].Код = [Номер поезда].[Вид поезда]) INNER JOIN [Следует через] ON [Номер поезда].Код = [Следует через].[Номер поезда]
ORDER BY [Номер поезда].[Номер поезда];
Запрос предназначен для выборки из трех таблиц номера поезда, типа поезда и станций, через которые этот поезд проезжает. Также запрос производит сортировку по возрастанию по полю «Номер поезда».
Форма «Пассажиры до станции» (Приложение 16) содержит две кнопки. При нажатии на кнопку «Назад» выполняется макрос «КнНазад_Пассажиры до станции», который закрывает форму «Пассажиры до станции» и отчет «ОПассажиры до станции». После этого макрос открывает форму «Сервис». При нажатии на кнопку «Отчет» выполняется макрос «КнОтчет_Пассажиры до станции», который открывает для просмотра отчет «ОПассажиры до станции». После открытия формы автоматически запускается макрос «ОткрПассажиры до станции», который задает полям со списком «До станции» и «Дата» значения первого элемента списка. На форме расположены пять полей: дата, количество пассажиров, скидка, всего, до станции. Поля «Скидка», «Всего» и «Количество пассажиров» недоступны для редактирования пользователем. Поля «До станции» и «Дата» являются, как уже говорилось, полями со списком. В качестве источника строк для поля «До станции» используется запрос «ЗСтанция». В качестве источника строк для поля «Дата» используется запрос «ЗДата отправления». После изменения значения одного из полей «До станции» или «Дата» выполняется макрос «ИзмВ_Пассажиры до станции», который устанавливает фильтр, для того чтобы на экран выводилось количество только тех пассажиров, которые купили билеты до станции, указанной в поле «До станции», и на дату, указанную в поле «Дата». Источником формы является запрос «ЗПассажиры до станции».