Алгоритм перетворення

У його побудові беруть участь:

  • • збережені процедури;
  • • види серверної частини;
  • • форми, пов'язані з клієнтською частиною.

Збережені процедури дозволяють значною мірою знизити обсяги інформації, що передаються по мережі (трафік). До них у БД відноситься Grup_Sum, яка здійснює підрахунок числа "платних", "частково платних" і "безкоштовних" студентів, що навчаються у кожній конкретній групі, а також здійснює підрахунок числа юнаків і дівчат у групі.

Створення видів (View) таблиць служить для підвищення швидкодії системи запитів. Наведемо команди по створенню образу EKZAMVIEW з РБД "Навчальний процес":

Г View: EKZAMVIEW, Owner: SYSDBA * /

CREATE VIEW EKZAMVIEW (NZK, OTCHET, SEMESTR, SH_SPEC, POSL_SES, FIO, KURS) AS

SELECT

uspevaem.nzk, otchet, uspevaem.semestr, gruppa.sh_spec, posl_ses, student.fio,

gruppa.kurs

from uspevaem, gruppa, student

where uspevaem.ng = gruppa.ng and

uspevaem.nzk = student.nzk and semestr <> 12

group uspevaem.nzk, otchet, uspevaem.semestr, sh_spec, posl_ses, student.fio, gruppa.kurs by having otchet-'екз ';

Як видно з прикладу, вибірку даних можна здійснювати одночасно з необмеженого числа зв'язаних таблиць. Так, даний вид здійснює вибірку записів з трьох зв'язаних таблиць, після чого групує отриману інформацію по полях nzk, otchet, semestr, sh spec, posl_ses, fio, kurs. Цей вид використовується при генерації звіту по успішності студентів у поточному семестрі. Інформація, отримана з цього виду, надалі переробляється інтерфейсної частиною і використовується для генерації звітів типу:

  • • студенти, які не склали .сессію;
  • • студенти, котрі складали сесію на всі п'ятірки;
  • • студенти, котрі складали сесію на п'ятірки і одну четвірку;
  • • студенти, котрі складали сесію на п'ятірки і дві четвірки.

У програмі є наступні види, які використовуються:

  • • EkzamView - для генерації звітів про здачу студентами сесії;
  • • GruppaView - для прискорення доступу до пов'язаних полях;
  • • StudentView - для прискорення доступу до пов'язаних полях;
  • • ZadolgView - для генерації звітів про здачу студентами сесії.

Програма містить велику кількість алгоритмів, необхідних для обробки тих чи інших дій користувача, генерації складних звітів, взаємодії з РБД і переробки інформації. Багато хто з цих алгоритмів було практично неможливо реалізувати, використовуючи лише стандартні конструкції Object Pascal, тому в них поряд з Pascal використовувався також і мова SQL. Такий симбіоз мов дозволяє значною мірою прискорити виконання даних алгоритмів. Як приклад програмного коду, що містить як Pascal, так і SQL, наведемо фрагмент процедури генеруючої "залікову (екзаменаційну) відомість".

procedure TForml 1 .Button5Click (Sender: TObject);

var

t1: string [10];

begin

t1: = datamodule2.izuchenie.fieldbyname ('otchet'). asstring;

Завантаження в змінну tl поточного значення колонки otchet таблиці izuchenie

if t1 = 'зач' then form) 2.QRLabel1 .сарбоп: = 'Залікова відомість';

Якщо tl = зач, то вивести в звіт 'Залікова відомість'

if t1 = 'аттес' then form12.QRLabel1.caption: = 'Атестаційна відомість';

if t1 = 'прим' then form12.QRLabel1.caption: = 'Екзаменаційна відомість';

if t1 = 'K / np' then form12.QRLabel1, сарбоп: = 'Курсовий проект';

if t1 = "then exit;

datamodule2.queryrep1 .sql.clear;

Скидання поточних SQL-команд, завантажених в запит Qucryrep1

datamodule2.queryrep1 .sql.add ('select * from predmet');

Додавання SQL команди 'select * from predmet' r запит Qucryrep1

datamodule2.queryrep1, sql.add ('where kpred =' +

datamodule2.izuchenie.fieldbyname ('kpred'). asstring);

datamodule2.queryrep1 .open;

Здійснення запиту

form12.QRLabel11 .caption: =

datamodule2.queryrep1.fieldbyname ('predm'). value;

Виводить в звіт назву предмета

datamodule2.queryrep1 .close;

Закриття запиту queryrep)

datamodule2.queryrep1.sql.clear;

datamodute2.queryrep1.sql.add ('select * from prepod');

datamodule2.queryrep1, sql.add ('where kprep =' +

datamodule2.izuchenie.fieldbyname ('kprep'). asstring);

datamodule2.queryrep1 .open;

form12.QRLabel13.caption =

datamodule2.queryrep1.fieldbyname ('fioprep'). value;

Виводить в звіт ПІБ викладача

datamodule2.queryrep1 .close;

datamodule2.queryrep1 .sql.clear;

datamodule2.queryrep1, sql.add ('select ng, sh_specfrom gruppa');

datamodule2.queryrep1, sql.add ('where ng =' + "" +

datamodule2.izuchenie.fieldbyname ('ng'). asstring + "");

datamodule2.queryrep1 .open;

form12.QRLabel5.caption: =

datamodule2.queryrep1.fieldbyname ('sh_spec'). va! ue;

Виводить в звіт шифр спеціальності.

datamodule2.queryrep1 .close;

datamodule2.queryrep1 .sql.clear;

datamodule2.queryrep1 .sql.addf'select * from student ');

datamodule2.queryrep1 .sql.addfwhere student. ng = '+ "" +

datamodule2.izuchenie.fieldbyname ('ng'). asstring + "");

datamodule2.queryrep 1, sql.add ('order by nomer_stud');

datamodule2.queryrep1 .open;

Виводить в звіт список студентів обраної групи. form12.QRLabel7.caption: =

datamodule2.izuchenie.fieldbyname ('semestr'). asstring;

Виводить в звіт номер семестру

Блок-схема процедури, генеруючої

Рис. 14.20. Блок-схема процедури, генеруючої "залікову (екзаменаційну) відомість"

form12.QRLabel9.caption: =

datamodule2.izuchenie.fieldbyname ('ng'). asstring;

Виводить в звіт номер групи

form12.quickrep1 .Preview;

Виводить звіт на попередній перегляд

datamodule2.queryrep1 .close;

end;

Дану процедуру можна представити у вигляді блок-схеми, зображеної на рис. 14.20.

На цьому закінчимо опис розподіленої БД "Навчальний процес".

 
< Попер   ЗМІСТ   Наст >