Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД_Поясн_записка_пример.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

3.3 Разработка отчетов

Решение задачи построения отчетных форм состоит из двух этапов:

  • выбор данных из базы данных;

  • формирование на основании выбранных данных отчетов.

Для решения первой подзадачи оптимальным является использование представлений (Local View). При разработке представлений может быть использован язык SQL. Для построения отчетных форм на основании разработанных представлений, использован стандартный визуальный инструментарий Visual FoxPro по созданию отчетов.

Для формирования отчета «Среднее число баллов абитуриентов 10 наиболее встречающихся школ» разработан запрос RepoA1 (рисунок 3.17).

SELECT TOP 10 E.school, AVG(E.result) AS avgresult, COUNT(1) AS _cnt;

FROM ;

Enrollee E;

WHERE ( result ) IS NOT NULL;

AND ( result ) > ( 0 );

GROUP BY E.school;

ORDER BY 3 DESC

Рисунок 3.17 – Запрос RepoA1

Для формирования отчета «Наиболее успешные школы» разработан запрос RepoA2 (рисунок 3.18). Среднее число баллов наиболее успешных школ по городу в целом. Находим студентов с наиболее высокими баллами и ищем их школу. Выбираются все студенты, баллы, школы, выполняется группировка по школе, определяется максимальный балл среди студентов школы. Результат сортируется по баллам.

SELECT E.school, MAX(E.result) AS avgresult;

FROM ;

Enrollee E;

WHERE ( result ) IS NOT NULL;

AND ( result ) > ( 0 );

GROUP BY E.school;

ORDER BY 2 DESC

Рисунок 3.18 – Запрос RepoA2

Для формирования отчета «Средний балл поступивших абитуриентов, поступивших по каждой специальности каждого факультета» разработан запрос RepoB (рисунок 3.19).

SELECT f.Id AS FacultyId , f.Name AS FacultyName , s.Id AS SpecialityId , s.Name AS SpecialityName , x.Middle FROM ( SELECT e.SpecialityId , SUM(e.Middle)/COUNT(1) AS Middle FROM Enrollee AS e JOIN Student AS s ON s.EnrolleeId = e.Id GROUP BY e.SpecialityId WHERE s.TypeId IS NOT NULL AND s.TypeId > 0 ) AS x JOIN Speciality AS s ON s.Id = x.SpecialityId JOIN Faculty AS f ON f.Id = s.FacultyId

Рисунок 3.19 – Запрос RepoB

3.4 Разработка меню

Для разработки меню использован мастер среды Visual FoxPro (рисунок 3.20).

Рисунок 3.20 – Разработка меню с использованием мастер среды Visual FoxPro

При выборе команд меню выполняется вызов соответствующих методов из модуля Guide. Подключение меню выполняется в модуле _Curs.

3.5 Обеспечение многопользовательской работы

При решении задачи обеспечения многопользовательской работы приложения необходимо реализовать выполнение следующих требований:

  • обеспечение целостности данных;

  • масштабируемость;

  • высокая скорость работы.

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

  • транзакции;

  • модификация данных с использованием команд с применением синтаксиса SQL;

  • обработка исключений.

Транзакции обеспечивают наибольшую защиту существующим данным. Visual FoxPro предоставляет три команды, которые обеспечивают контроль за транзакциями:

  • BEGIN TRANSACTION – команда предназначена для инициализации транзакции;

  • ROLLBACK – выполняет откат всех изменений, сделанных после последней команды BEGIN TRANSACTION;

  • END TRANSACTION – блокирует записи, записывает на диск все изменения, сделанные после ближайшей команды BEGIN TRANSACTION, затем снимает блокировку с записей.

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

Для модификации данных в программе используются команды SQL (таблица 3.3).

Таблица 3.3 – Команды модификации данных

Команда

Описание

Что блокируется

Блокировка

UPDATE FROM

Изменение записей

Вся таблица

Автоматическая

INSERT INTO

Добавление записей

Заголовок таблицы

Автоматическая

DELETE FROM

Удаление записей

Текущая запись

Автоматическая

Возможны два подхода к обработке возможных ошибок при совместном доступе к данным:

  • программная блокировка/разблокировка записей или таблицы перед началом выполнения модификации данных с обработкой результата операции блокировки (команды FLOCK, RLOCK);

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

В реализуемом программном продукте выбран второй способ работы при модификации данных. Для обработки ошибки выполнения используется механизм структурированного управления ошибок исполнения с помощью команды TRY ... CATCH ... FINALLY. Используя эту команду, можно анализировать выполнение отдельных команд (TRY-блок) программы как на этапе отладки, так и во время коммерческой эксплуатации программы. Причем FINALLY-блок позволяет восстанавливать состояние системы после обработки (средствами САТСН-блока) возникшей в TRY-блоке ошибки.