Databázové a informačné systémy - Visual Fox Pro - tvorba SRBD
(informatika pre študentov štvrtého-piateho ročníka Leteckej fakulty, TU KE - 2005 - RNDr. Peter Szabó)

Visual Fox Pro základná charakteristika

Visual Fox Pro
(VFP) je systém typu XBase. Pomocou systému VFP možno vytvárať systémy riadenia bázy dát,  bázu dát a ďalšie objekty databázového informačného systému.


Visual Fox Pro je objektovo-orientovaný vývojový nástroj s vizuálnymi funkciami na tvorbu aplikácií v operačnom systéme Windows. V tomto systéme možno vytvoriť ľubovoľnú aplikáciu, ale systém bol vytvorený na vývoj databázových systémov. Po spustení systému a po aktualizácií nového objektu , môžeme sa rozhodnúť aký nový objekt chceme vytvoriť.

Môžeme vytvárať nasledovné objekty :

Projekt  = relačný databázový systém ( pozn: v systéme aplikácie majú koncovku .app, a nie každá aplikácia musí nutne vytvárať relačný databázový systém, v rámci systému možno vytvárať aj iné aplikácie, projekty  )
Database = báza dát
Table = tabuľka, relácia v rámci bázy dát
Query = dotazy - relácie
Connection = spojenie
View = pohľad
Program = systém riadenia bázy dát

V rámci systému riadenia bázy dát, možno vytvoriť aj programy, programové triedy, výstupné zostavy - reporty alebo vstupno-výstupné formuláre.
Po aktualizácii VFP, systém otvorí príkazové okno (Command window), kde možno zadávať príkazy do systému. ( CTRL-F2 slúži na otvorenie okna)


Visual Fox Pro - demo projekt SOLUTION

Systém obsahuje niekoľko vzorových projektov ( Solutinon, Tasmanian Traders, Client/Server). Každý projekt rieší určitý okruh problémov, napr. Client/Server - technológiu tvorby klient/server aplikácií v tomto prostredí, Tasmanian Traders, ako možno  zabezpečiť bezpečnosť bázy dát v rámci SRBD. Silu vývojového nástroja dobre demonštruje aj  vzorový projekt Solution, ktorý obsahuje veľké množstvo funkcií a objektov. Tento projekt môžeme otvoriť v príkazovom okne, po zadaní príkazu  :
DO (HOME() + 'samples\solution\solution')

Tak v rámci vývojového prostredia spustíme aplikáciu SOLUTION :


Úvodná obrazovka aplikácie SOLUTION.

V tejto aplikácií existujú rôzne objekty ActiveX,  riadiacie prvky, reporty,   Windows API aplikácie aj databázové objekty ako Báza dát (Database)
Príklady základných databázových objektov sa nachádzajú pod voľbou Database.
Sú to tieto objekty :
Indexy - relácie, tabuľky často krát potrebujeme usporiadať na základe daného kritéria, takéto kritéria, sa nachádzajú v indexových súboroch.
Tabuľky - relácie,  základné  prvky

relačného databázového systému, obsahujú atribúty (stĺpce) nad nejakou doménou  a n-tice (riadky)
Transakcie - operácie medzi reláciami
častokrát majú veľkú časovú náročnosť. SRBD podporuje transakčné spracovanie, keď môže potvrdiť, či daná operácia bola vykonaná korektne ( nedošlo k chybe počas spracovania) alebo nie. Commit - transakcia prebiehla v poriadku. Rollback - vznikla chyba počas spracovania, treba obnoviť stav pred spracovaním.
Dotazy, pohľady - relačný model umožňuje  položiť dotaz v rámci bázy dát .



Visual Fox PRO a jazyk SQL

V ďalšej časti tejto stránky budeme sa zaoberať len s tvorbou databázovej aplikácie a s jazykom SQL vo Visual Fox PRO.
Systém  obsahuje tieto SQL príkazy :  

CREATE DATABASE, CREATE TABLE - na vytvorenie bázy dát,  tabuľky, relácie.
Príklad :
CREATE DATABASE Student
CREATE TABLE Student;
    (StudentID i PRIMARY KEY, ;
    Priezvisko C(20), ;
    Meno C(20))
ALTER - príkaz na modifikáciu atribútov relácie

INSERT
- vloženie nových údajov do tabuľky
Príklad :
USE employee  &&  poznámka v systéme : pred použitím relácie je potrebné "otvoriť" reláciu pomocou USE
INSERT INTO employee (emp_no, fname, lname, officeno) ;
     VALUES (3022, "John", "Smith", 2101)
UPDATE - modifikácia údajov v báze dát
Príklad :
UPDATE employee SET officeno = 25
BROWSE FIELDS fname,officeno  && listovanie atribútov fname a officeno relácie employee
DELETE - výmaz údajov z bázy dát
Príklad:
DELETE FROM employee WHERE lname = "Paul"  
SELECT - dotazovanie bázy dát
Príklad :
SELECT country, postalcode, company ;
    FROM customer ;
    ORDER BY country, postalcode, company
Tento príkaz má veľa parametrov, syntaktické pravidlá a presné použitie príkazov možno nájsť v HELP súbore, v kapitole SQL Commands Overview

Projektovanie vo Visual Fox Pro

V nasledujúcom jednoduchom príklade popíšem základné pojmy databázovej terminológie použitej vo Visual Fox Pro.

Zadanie úlohy : Z predmetu Databázové a informačné systémy máme k dispozícií zoznam študentov a zoznam skúšobných otázok. Navrhneme aplikáciu  vo Visual Fox Pro, ktorá náhodne vygeneruje 20 otázok  zo zoznamu skúšobných otázok pre každého študenta.

Identifikácia úlohy (1. časť ) : Aplikácia (databázový systém) Proj1 pracuje so vstupnými tabuľkami (reláciami) študentov - studenti.dbf (50 n-tíc) a skúšobných otázok otazky.dbf (50 n-tíc). Výstupom aplikácie bude relácia test.dbf (50 x 20 n-tic) - náhodne vygenerované otázky, ktorú vytvorí špeciálny program prirad_otazky.  Ďalším výstupom je  dotaz_priradenie ( relácia typu 1:1, ktorá priradí meno a priezvisko k náhodne vygenerovaným otázkam podľa tabuľky študentov).

Relácia studenti má nasledovné atribúty :
skupinaid - num(3)
predmetid - num(3)
studentid - num(3) - primárny kľúč
priezvisko - char(20)
meno - char(20)
Relácia otázky má nasledovné atribúty:
otazkaid - num(3) - primárny kľúč
otazka - char(90)
Relácia test má atribúty :
testid - num(5) - primárny kľúč
studentid - num(3)
datum - date
otazka - char(90)
Relácia priradenie_dotaz má atribúty
testid - num(5)
datum - date
priezvisko - char(20)
meno - char(20)
otazka - char(90)
Program prirad_otazky pre každého študenta náhodne vygeneruje poradové číslo skúšobnej otázky zo zoznamu skúšobných otázok. Program zapisuje dátum, vygenerované otázky  a identifikačné číslo študenta do relácie test. Pre každého študenta program generovanie otázok opakuje M krát (M = 20).
Poznámky : Takúto špeciálnu funkciu - náhodný výber M- n-tíc obyčajne neobsahujú SRBD, preto je potrebné to naprogramovať. Počet všetkých možností výberu (výber 20 otázok z 50 otázok ) je  961 820 658 040, cca 1012.

Relácia test neobsahuje meno a priezvisko študenta, len jeho identifikačné číslo. Preto vytvoríme dotaz - dotaz_priradenie v ktorom spojíme reláciu studenti s reláciou test podľa identifikačného čísla študenta - studentid a do výstupu zaradíme atribúty - testid, datum, priezvisko, meno, otazka.

Realizácia projektu (1. časť):
1) V adresári C:\skuska (to bude adresár dát pre náš databázový systém ) otvoríme nový projekt Proj1. (databázový systém )
2) Data - database - new otvoríme novú bázu dát - skuska.dbc.
3)  Objaví sa Database - designer -aktualizujeme tabuľky : studenti, otazky a test (student, test - new, otazky - add )
4) Vo voľbe Code- programs - new - vytvoríme nový program prirad_otazky
5) Vo voľbe Queries - new vytvoríme dotaz dotaz_priradenie

Zdrojový kód programu prirad_otazky

* Program prirad_otazky - Visual Fox Pro
* Predpokladame, ze mame vytvoreny databazovy system Proj1.prj
* Tento system ma adresar dat "C:\skuska", obsahuje bazu dat "skuska.dbc"
* Baza dat obsahuje relacie OTAZKY.DBF, STUDENTI.DBF, TEST.DBF
*
* Generovanie otazok na skusku (aktualizacia relacie TEST.DBF)
* Vstupne parametre :
* O_POC - celkovy pocet otazok (Pocet n-tic relacie OTAZKY.DBF )
* S_POC - celkovy pocet studentov (Pocet n-tic relacie STUDENTI.DBF)
* M = 20 - pocet otazok pre jedneho studenta
* k,i,j,n,OK - pomocne premenne, indexy
*
* 4.12.2004,Peter Szabo, Ustav aeronautiky, TUKE


CLOSE DATABASES   && zatvorenie vsetkych databaz
CLEAR             && uvolnenie pamati

* lokalne premenne, ktore su potrebne pre vypocet
local O_POC,S_POC,M,k,i,j,n,OK
* pomocna premenna pre test duplicitnych otazok
DIMENSION cisla_otazok(20)


* Otvorenie bazy dat "skuska.dbc" v adersari dat "C:\skuska"
OPEN DATABASE ("C:\Skuska\skuska.dbc")

* Zistenie poctu n-tic v relacii STUDENTI a OTAZKY
USE studenti      && otvorenie relacie
S_POC=RECCOUNT()  
* RECCCOUNT je funkcia, ktora zisti pocet n-tic akt. relacie


USE otazky
O_POC=RECCOUNT()


* Vytvorenie novej relacie, noveho testu TEST.DBF
* Vymaz relacie TEST.DBF, pouzitie SQL prikazu DELETE
* prikaz DELETE sa vztahuje pre celu relaciu, nie len pre 1 n-ticu


USE test
IF RECCOUNT()>0 THEN
  DELETE FOR studentid<>0  && vymaz n-tic, ked studentid<>0
  PACK                      
ENDIF  


k=0
M=20        && Pocet otazok pre jedneho studenta
USE otazky

DO WHILE k < S_POC  
  k=k+1                && Generovanie otazok pre k-teho studenta

   FOR n=1 To M                     && n - poradove cislo otazky
     STORE 0 TO cisla_otazok(n)   && nulovanie zoznamu otazok
   ENDFOR


  FOR i=1 TO M                    && generovanie i-tej otazky      
    OK=.F.
    DO WHILE NOT OK    && Generovanie cisla otazky, kym nenajdeme cislo, ktore nie je v zozname
      OK=.T.
      j=INT(1+O_POC*RAND())      && generovanie nahodneho cisla pre i - tu otazku 
      FOR n=1 TO i               && test ci dana otazka nie je v zozname otazok
       IF j = cisla_otazok(n)
        OK=.F.
       ENDIF
      ENDFOR
 
    ENDDO 
   
    STORE j TO cisla_otazok(i)     
  

    GOTO j

    INSERT INTO TEST(otazkaid, studentid, otazka,datum) value (j,k, otazky.otazka,date())
  ENDFOR
ENDDO 

CLEAR

Identifikácia úlohy (2. časť - vstupné a výstupné objekty systému) :  Vstupné relácie studenti.dbf, otazky.dbf je potrebné aktualizovať. Na aktualizáciu vstupných relácií v databázových systémoch slúžia formuláre. Na aktualizáciu relácie studenti.dbf  formulár studenti.scx a na aktualizáciu relácie otazky.dbf , otazky.scx. Na tvorbu výstupov slúžia reporty. Výstupy databázového systému proj1 sú nasledovné : skúšobné otázky (otazky.frx), protokol o skúške (protokol.frx),  priradenie otázok k študentom (priradenie.frx).
Realizácia projektu (2. časť):
6) Vo voľbe Documents - Forms - new  vytvoríme formulár studenti.scx a otazky.scx  ( možno tu použiť voľbu Form Wizard )
7) Vo voľbe Documents - Reports - new vytvoríme report otazky.frx , protokol.frx a priradenie.frx. (pri návrhu reportu možno deklarovať hlavičku a pracovnú oblasť, v hlavičke sa nacházajú statické objekty (napr. nadpis), v pracovnej oblasti tabuľky, relácie )


Príklad návrhu reportu
Page header - hlavičkové informácie
Detail - spojenie relácie dotaz_priradenie s reportom, pričom hodnoty atribútu otazka sú opakované
Page footer - spodná časť stránky výstupu

Každý objekt reportu možno vizuálne definovať.


Identifikácia úlohy (3. časť - hlavný formulár, hlavný program systému) : Databázové systémy, aplikácie obyčajne majú jednú halvnú obrazovku, hlavný formulár z ktorého možno spúšťať jednotlivé funkcie systému. Pre náš projekt má to byť formulár main.scx, tento formulár má obsahovať funkcie na aktualizáciu skúšobných otázok, na aktualizáciu zoznamu študentov, na spustenie programu, ktorý náhodne vygeneruje pre každého študenta stanovený počet otázok a výstupy ako skúšobné otázky, protokol o skúške a  priradenie otázok k študentom. Hlavný program systému bude main_prog.prg - tento program bude volať hlavný formulár systému.

Vo voľbe Documents - Forms - new možno navrhnúť takýto formulár (main.scx - scx je koncovka pre preložený objekt, zdrojový kód je v súbore main.sct). K príkazovým klávesom (Command button - Otázky, Študenti, Priradenie otázok, Skúšobné otázky, Študenti - otázky, Protokol o skúške možno priradiť udalosť po kliknutí (Click Event), to sú kódy programov, ktoré systém má vykonať po kliknutí na príkazový kláves, príklady :

* aktualizácia otázok
DO FORM otazky

* spustenie programu na generovanie otazok
DO prirad_otazky

* spustenie protokolu o skúške
DO REPORT protokol




Realizácia projektu (3. časť):
  9) Vo voľbe Documents - Forms - new  vytvoríme formulár main.scx podľa zadania.
10) Vo voľbe Code- programs - new - napíšeme nový program main_prog.prg. (Tento program bude obsahovať len jeden riadok : DO FORM main, pozor na cesty )
11) Programy systému prirad_otazky , main_prog.prg preložíme, voľba Program - compile. Preložené programy prirad_otazky.fxp , main_prog.fxp; pre-kódy možno spustiť v prostredí Visual Fox Pro.(tieto kódy majú tú vlastnosť, že užívatelia programu, nemôžu modifikovať zdrojové texty, lebo sú kódované a sú spustiteľné len v rámci runtime systému, nie v rámci operačného systému. Ostatné objekty systému  (formuláre, reporty program automaticky preloží)

naspäť
1.12.2004