Sunteți pe pagina 1din 87

 Baze de date n Visual FoxPro




Baze de date n Visual FoxPro

1. Tabele de date

FoxPro este un mediu de dezvoltare integrat, care, pe lng


instrumentele de programare, ofer i un sistem de tabele de date
relaionale care simplific procesele de gestionare i organizare
eficient a datelor. Datele sunt organizate tabelar, pe linii (records,
articole nregistrri) i coloane (fields, cmpuri), mai multe tabele,
ntre care exist legturi, alctuind o baz de date relaional.

1.1. Crearea unui tabel de date definirea structurii

Crearea unui tabel de date implic specificarea numelui


tabelului (fiier cu extensia implicit DBF) i este iniiat prin
comanda
CREATE [<fiier>]
sau prin alegerea opiunii File, New (n acest caz n caseta New se
selecteaz Table i New file). Ca urmare pe ecran este deschis
fereastra

constructorului

de

tabele,

care

vor

fi

precizate

caracteristicile noului tabel (nume, tip, lungime, etc.) i a indecilor


folosii la ordonarea datelor din list.
Fiecare cmp (field, coloan) al unui tabel este caracterizat prin:

nume (Name);

tip (Type) - ir de caractere, numeric, dat calendaristic sau


moment de timp, logic, memo;

 Baze de date n Visual FoxPro

lime (Width) - numrul de caractere pe care l ocup fiecare


dat memorat n acel cmp;

numrul de zecimale (Decimal) - pentru datele de tip numeric;

fanionul de indexare (Index) - indic dac se stabilete un


index pe cmpul respectiv (indecii reprezint o tehnologie cu
ajutorul creia datele din tabele sunt vzute ntr-o anumit
ordine, dat de un anumit criteriu numit criteriu de indexare);

fanionul de valoare nul (NULL) - arat dac n cmpul


respectiv poate fi memorat o valoare nul, pentru a se face
diferenierea ntre un cmp lsat necompletat i unul completat
cu valoarea 0.

1.2. Deschiderea (activarea) tabelelor de date

Pentru iniierea unei sesiuni de lucru cu un tabel de date, acesta


trebuie s fie activat (deschis). Deschiderea unui tabel de date se poate
realiza prin meniu (File, Open, Files of type: Table (*.dbf)) sau prin
comanda USE:
USE [<fiier>] [IN <zona de lucru>] [TAG <nume etichet>]
[ASCENDING DESCENDING]
[ALIAS <alias>] [EXCLUSIVE] [NOUPDATE]

 Baze de date n Visual FoxPro

o <fiier> - numele tabelului de date care va fi deschis


(extensia implicit DBF);
o IN - permite deschiderea unui tabel de date ntr-o alt zon
de lucru dect cea curent;
o TAG - face precizarea unei variante de indexare;
o ASCENDING

DESCENDING

precizeaz

tipul

ordonrii

(implicit ascendent) atunci cnd se folosete indexarea;


o ALIAS - stabilete un nou alias;
o EXCLUSIVE - asigur exclusivitatea folosirii unui tabel de date
atunci cnd se lucreaz ntr-o reea de calcul;
o NOUPDATE - protejeaz tabelul de date la scriere (este
deschis doar pentru consultare).

 Observaii

Derularea unei sesiuni de lucru n FoxPro se realizeaz n


directorul de lucru implicit. Acest director poate fi schimbat
prin comanda:

SET DEFAULT TO <path>

unde path definete noul director.

Lista tabelelor de date aflate n directorul de lucru poate fi


obinut prin lansarea comenzii:

DIR

Se poate limita, temporar, accesul la nregistrrile tabelului de


date prin folosirea comenzii:

SET FILTER TO <cond>

 Baze de date n Visual FoxPro

 Zone de lucru
Pentru manipularea simultan a mai multor tabele de date,
FoxPro folosete zone speciale de memorie numite zone de lucru, n
care depune informaiile necesare efecturii operaiilor cu tabelele de
date respective.
Pentru identificarea unei zone de lucru se folosesc alias-uri
(literele A, B, C sau cifrele 1, 2, 3, ) care permit identificarea
tabelelor de date i altfel dect prin numele lor. n afar de aceste
alias-uri utilizatorul poate defini i propriile sale alias-uri.

 Observaii

La pornirea FoxPro-ului zona de lucru implicit va fi zona 1 (cu


alias 1 sau A). Aceasta se poate schimba prin comanda :

SELECT <expN> <expC>


Comanda este urmat de o cifr, liter sau de un alias definit
de utilizator. Dac alias-ul este 0 se va selecta prima zon de
lucru neselectat.

Pentru a obine informaii despre zonele de lucru folosite i


tabelele de date deschise se pot folosi dou funcii:

USED([<alias>])

DBF([<alias>])

Funcia USED returneaz .T. sau .F. dac, n zona de lucru


curent sau precizat prin alias, este sau nu prelucrat un tabel de
date. Funcia DBF returneaz numele tabelului de date deschis n
zona de lucru.

 Baze de date n Visual FoxPro

Exemple:
use personal in 1
use nomenclator in B alias nomen
select nomen
?dbf()
C:\PROGRAM
FILES\DEVSTUDIO\VFP\JOB\NOMENCLATOR.DBF
?used(1)
.T.

1.3. Modificarea structurii unui tabel de date

Modificarea caracteristicilor unui tabel de date poate fi fcut prin


comanda:
MODIFY STRUCTURE
Aceast comand permite modificarea structurii tabelului de date
activ prin deschiderea unei ferestre de dialog, aceeai ca la crearea
tabelului de date. Modificrile care pot fi aduse structurii unui tabel de
date sunt :

schimbarea numelor, tipurilor i limii cmpurilor deja


existente;

tergeri, inserri de cmpuri, prin plasarea cursorului pe zona


de modificare (prima coloan din fereastra de dialog) i
acionarea butoanelor Delete i Insert.

Dup efectuarea modificrilor, FoxPro copiaz coninutul tabelului


de date vechi n tabelul de date nou, cu efectuarea schimbrilor
respective.
Caracteristicile unui tabel de date (structura) pot fi vizualizate
prin comanda:
DISPLAY STRUCTURE

 Baze de date n Visual FoxPro

1.4. nchiderea prelucrrii tabelelor de date

Finalizarea operaiei de prelucrare a tabelelor se poate face prin


comenzile:
USE

sau

CLOSE ALL

Prima comanda nchide prelucrarea tabelului de date din zona


de lucru curent iar a doua nchide i elibereaz toate zonele de lucru
(n acest caz zona curent devine zona de lucru 1).

1.5. Editarea coninutului unui tabel de date

 Prelucrarea nregistrrilor. nregistrarea curent.


Un grup de nregistrri (domeniu) poate fi:

All semnific toate nregistrrile tabelei;

Next urmtoarele nregistrri;

Record - nregistrarea cu numrul de ordine specificat;

Rest restul nregistrrilor din poziia curent pn la sfritul


tabelului.

Prelucrarea tabelelor de date se realizeaz la nivel de


nregistrare. La un moment dat este activ un singur tabel de date i o
singur nregistrare din acest tabel. Fiecare nregistrare are un numr
de ordine, asociat acesteia la introducerea ei n tabelul de date.
Numrul de ordine al nregistrrii curente poate fi modificat prin
comenzile:
GOTO TOP | BOTTOM | RECORD <expN>
(salt la prima, ultima sau nregistrarea precizat din tabel);

 Baze de date n Visual FoxPro

SKIP [<expN>]
(salt nainte sau napoi cu un numr de nregistrri);
LOCATE [<domeniu>] [FOR <cond1>] [WHILE <cond2>]
(cut prima nregistrare care respect condiia <cond1>,
domeniul nregistrrilor fiind dat de clauzele <domeniu> i
WHILE).
Poziia curent n tabelul de date poate fi stabilit cu ajutorul
funciilor:

EOF() returneaz .T. sau .F. dup cum este detectat sau nu
marcajul de sfrit de fiier (aflat dup ultima nregistrare);

BOF() returneaz .T. sau .F. pentru nceput de fiier;

RECNO() furnizeaz numrul de ordine al nregistrrii


curente.

Exemple:
use personal
?recno()
1
goto record 7
?recno()
7
goto top
?recno()
1
skip 1
?bof()
.T.
skip 3
?recno()
3
go bottom
skip
?eof()
.T.
locate for nume=ALEX

 Baze de date n Visual FoxPro

 Introducerea nregistrrilor noi ntr-un tabel de date


Numrul de nregistrri dintr-o baz de date, furnizat de funcia
RECCOUNT(), poate fi modificat, prin introducerea unor nregistrri
vide (adugri, inserri):
APPEND BLANK

sau

INSERT BLANK [BEFORE]

Inserarea se execut implicit dup nregistrarea curent, dac nu


se folosete opiunea BEFORE, iar urmtoarele nregistrri sunt
translatate spre sfritul tabelului de date i renumerotate.

 tergerea nregistrrilor dintr-un tabel


Eliminarea unor nregistrri din tabelele de date se efectueaz la
nivel logic sau fizic prin utilizarea comenzilor DELETE, RECALL, PACK,
ZAP.
a) tergerea logic (marcare pentru tergere). Prin marcarea
pentru tergere nregistrrile din tabelele de date nu sunt
eliminate

definitiv.

Pentru

tergerea

logic

este

utilizat

comanda:
DELETE [<domeniu>] [FOR <cond1>] [WHILE <cond2>]
Aceast comand (precum i altele) folosete clauza FOR pentru
selectarea tuturor nregistrrilor care corespund condiiei logice
<cond1>. Clauza WHILE ntrerupe testarea nregistrrilor cnd
gsete o nregistrare ce nu respect condiia dat, <cond2>.
Accesul la nregistrrile marcate pentru tergere este controlat de
comanda:
SET DELETED ON OFF

 Baze de date n Visual FoxPro

Cnd se alege opiunea ON, nregistrrile marcate pentru


tergere nu vor fi accesibile celorlalte comenzi, iar cnd se
selecteaz opiunea OFF, nregistrrile sunt accesibile indiferent
de marcajul de tergere (starea implicit este OFF). Aceast
comand este util atunci cnd se lucreaz pe grupuri de
nregistrri.
b) Demarcarea tergerii logice. Marcajele de tergere logic pot
fi anulate prin folosirea comenzii:
RECALL [<domeniu>] [FOR <cond1>] [WHILE <cond2>]
c) tergerea fizic. Prin folosirea acestui tip de tergere
nregistrrile sunt eliminate definitiv din tabelul de date
(tergerile fizice nu mai pot fi refcute). tergerile fizice au
efect asupra nregistrrilor marcate logic sau asupra tuturor
nregistrrilor din tabelul de date prelucrat prin utilizarea uneia
din comenzile:
PACK

sau

ZAP

 Modificarea coninutului nregistrrilor


Modificarea coninutului nregistrrilor dintr-un tabel de date
presupune nlocuirea valorilor din unul sau mai multe cmpuri cu altele
noi. Comanda REPLACE permite actualizarea tabelelor de date cu valori
precizate n comand i are urmtoarea sintax:
REPLACE <cmp1> WITH <exp1> [, <cmp2> WITH <exp2> ...]
[<domeniu>] [FOR <cond1>] [WHILE <cond2>]
REPLACE nlocuiete vechea valoare din cmpul <cmp1> cu
valoarea expresiei <exp1>, valoarea din cmpul <cmp2> cu
<exp2> i aa mai departe.

 Baze de date n Visual FoxPro

10

Exemple:
use personal
?reccount()
25
append blank
?reccount()
26
goto 7
insert blank before
?recno()
7
dele next 3
skip -1
recall
pack
?reccount()
24
replace for nume=ALEX nume with ALEXANDRU

 Fereastra BROWSE
Principala

comand,

pentru

realizarea

diferitelor

operaiuni

asupra tabelelor de date, prin deschiderea unei ferestre de lucru, este


comanda BROWSE care poate fi editat n urmtoarea sintax:
BROWSE [FIELDS <list de cmpuri>] [FOR <cond>]
[FREEZE <cmp>]
[NOAPPEND] [NODELETE] [NOEDIT NOMODIFY]
o FIELDS - permite ca numai cmpurile precizate s intre n editare
(selecie pe vertical);
o FOR precizeaz condiiile conform crora nregistrrilor vor fi
afiate n fereastra BROWSE;
o FREEZE - permite modificri doar pe cmpul precizat;
o NOAPPEND invalideaz posibilitatea efecturii adugrilor;
o NODELETE elimin marcarile pentru tergere;
o NOEDIT NOMODIFY - interzice modificrile.

 Baze de date n Visual FoxPro

11

Ca efect al lansrii comenzii BROWSE, n meniul principal, apare


o nou opiune, Table, care permite:

adugarea unei noi nregistrri la un tabel de date: Append New


Record (Ctrl+Y);

stabilirea nregistrrii curente: Go to Record;

precizarea unor criterii de poziionare, Locate, la fel ca prin


folosirea comenzii cu acelai nume:

Domeniul
Clauza FOR
Clauza WHILE

 Baze de date n Visual FoxPro

12

tergerea datelor din tabele:


o marcare (demarcare) pentru tergere: Toggle Deletion
Mark (Ctrl+T) sau clic cu mouse-ul pe fanionul de
tergere din dreptul nregistrrii:
Fanionul de tergere

o tergere fizic: Remove Deleted Records;


o tergeri conform sintaxei comenzilor DELETE i RECALL:
Delete Records, Recall Records;

modificri

ale

valorilor

nscrise

cmpurile

tabelelor

conform sintaxei comenzii REPLACE: Replace Field.

 Cmpuri MEMO
Cmpurile MEMO definesc cmpuri de lungime variabil de
tip text. Un tabel de date, cu cel puin un cmp MEMO, are asociat un
fiier suplimentar n care sunt depuse informaiile legate de acest
cmp. Pentru a putea identifica datele din fiierul MEMO asociat, care

Tabelul de date

Fiierul MEMO
asociat

 Baze de date n Visual FoxPro

13

aparin unei anumite nregistrri, n tabelul de date, pe poziia


corespunztoare a nregistrrii, se memoreaz o adres spre fiierul
MEMO (poziia primului caracter al cmpului respectiv).
Modificarea cmpurilor MEMO se poate face n fereastra Browse
sau prin comenzi specifice:
MODIFY MEMO <cmp memo1>[,<cmp memo2>,....]
- se deschide cte o fereastr de editare pentru fiecare cmp
memo;
CLOSE MEMO <cmp memo1>[,<cmp memo2>,....] ALL
- se vor nchide ferestrele de editare corespunztoare cmpurilor
memo specificate n list (sau toate - ALL);
APPEND MEMO <cmp memo> FROM <fiier> [OVERWRITE]
- coninutul unui fiier extern, de tip text, va fi adugat la
sfritul cmpului memo precizat (dac se folosete clauza
OVERWRITE vechiul coninut al cmpului se pierde);
COPY MEMO <cmp memo> TO <fiier> [ADDITIVE]
-coninutul unui cmp memo se copiaz ntr-un fiier extern de
tip text. Dac se folosete clauza ADDITIVE copierea se va face la
sfritul unui fiier deja existent.

1.6. Ordonarea i actualizarea tabelelor de date

nregistrrile apar, n tabelul de date, n ordinea n care au fost


introduse, dar nu ntotdeauna aceasta este i ordinea lor de utilizare.
Ordonarea unui tabel presupune stabilirea unui criteriu dup care s fie
parcurse nregistrrile acestuia. Acest criteriu poate fi un cmp sau o
combinaie de cmpuri ale tabelului de date numit cheie de ordonare.

14

 Baze de date n Visual FoxPro

O cheie de ordonare este o expresie, alctuit din cmpuri ale tabelului,


care este evaluat pentru fiecare nregistrare, ordinea de prelucrare a
nregistrrilor fiind dat de valorile acestei expresii. Se folosesc dou
metode de ordonare a bazelor de date: fizic i logic.

 Ordonarea fizic (sortarea)


Sortarea const n rearanjarea fizic a datelor din tabel ntr-o alt
ordine, dat de criteriul de sortare. Astfel rezult un tabel de date nou
cu aceleai informaii ca i cel original, dar ordinea fizic (natural) a
nregistrrilor este schimbat.
SORT TO <fiier> ON <cmp1> [/A /D] [/C]
[, <cmp2>[/A /D] [/C] ...]
[ASCENDING DESCENDING]
[<domeniu>] [FOR <cond>] [WHILE <cond>]
[FIELDS <list de cmpuri>]
o <fiier> - numele tabelului de date nou creat;
o <cmp1>,<cmp2>,.... - lista cheilor de sortare;
o /A , /D - sortare ascendent, descendent, relativ la cmpul
asociat;
o /C - sortare n ordine alfabetic, necontnd literele mari sau mici;
o ASCENDING DESCENDING - ordonare ascendent sau descendent
cu specificarea ordinii pentru toate cmpurile;
o FIELDS - selecie pe vertical (filtrare).

 Ordonarea logic (indexarea)


Indexarea este o metod mult mai eficient de ordonare a
tabelelor de date, care permite ca operaiile de consultare i cutare a
datelor n tabel s fie rapide. Prin indexare se creeaz un fiier index,
asociat bazei de date, de dimensiuni mult mai mici dect dimensiunea
bazei de date. Fr a detalia structura fiierului index, trebuie
menionat c fiierul index este o list simplu nlnuit a numerelor
articolelor din baza de date aflate n ordinea lor natural.

 Baze de date n Visual FoxPro

15

La definirea structurii bazei de date (prin CREATE sau MODIFY


STRUCTURE), n coloana Index, se pot defini unul sau mai multe criterii
de indexare care sunt identificate prin etichete (numele unei etichete
este acelai, n acest caz, cu numele cmpului). Activarea unuia sau
altuia din criteriile de indexare se realizeaz n dou moduri:
a) la deschiderea tabelului de date:
USE <fiier> ORDER <nume etichet>
b) n timpul lucrului prin comanda:
SET ORDER TO TAG <nume etichet>
Stabilirea altor criterii de indexare, diferite de cele definite n
structura tabelului de date, se poate face prin comanda:
INDEX ON <exp> TAG <nume etichet>
[FOR <cond>]
[ASCENDING DESCENDING]
[UNIQUE]
o TAG - identific un criteriu de indexare;
o UNIQUE - clauz care nu admite dubluri pe cmpul de
indexare
tergerea unei etichete (criteriu) de indexare se realizeaz
utiliznd comanda:
DELETE TAG <nume etichet> ALL
Principalul avantaj al indexrii rezult din posibilitatea localizrii
rapide a unor nregistrri, mult mai eficient dect cea furnizat prin
LOCATE. Acest lucru este realizat prin comanda:
SEEK <exp>

 Baze de date n Visual FoxPro

16

Comanda SEEK caut prima nregistrare pentru care valoarea


expresiei calculate cu valori din cmpurile acesteia este egal cu
<exp>, pe criteriul de indexare selectat.

 Observaii

la un moment dat poate fi activ un singur criteriu de indexare,


numele etichetei corespunztoare fiind furnizat de funcia
TAG();
efectul unei comenzi de cutare (SEEK sau LOCATE) poate fi
prelungit prin folosirea comenzii CONTINUE;
funcia FOUND() determin (.T. sau .F.) dac s-a reuit sau
nu localizarea.
Comanda:
SET EXACT ON OFF

stabilete modalitatea de cutarea pe subiruri de caractere.


Clauza implicit este OFF.
Dac <exp> este un ir de caractere, acesta trebuie pus ntre
apostrofuri.

1.7. Introducerea formatat a datelor

FoxPro ofer posibilitatea introducerii datelor sub forma unor


machete sau formate prin asocierea la clauza GET a clauzelor
PICTURE i FUNCTION:
@<linie, coloan> [GET<variabil>]
[PICTURE <expC>] [FUNCTION <expC>]
[READ]

@ plaseaz cursorul pe poziia specificat a ecranului.


GET stabilete poriunea de pe ecran unde vor fi introduse
valorile ce vor fi atribuite variabilei <variabil>.

 Baze de date n Visual FoxPro

17

PICTURE i FUNCTION permit formatarea afirii datelor.


Ambele clauze sunt urmate de un ir de caractere care conine
coduri referitoare la modul de afiare.
Codurile PICTURE se refer doar la un anumit caracter din
formatul de afiare i anume la cel de pe aceeai poziie cu
cea a codului.
Codurile FUNCTION acioneaz asupra tuturor caracterelor din
formatul de afiare.
Clauzele PICTURE i FUNCTION pot aciona mpreun, dar
FUNCTION este prioritar.
READ determin citirea coninutelor zonelor de editare pentru
introducerea valorilor de la tastatur, create prin GET.

Codurile de formatare PICTURE


X
Permite orice caracter
9
Cifre i semnele + - . E (date numerice)
#
Cifre, spatii i semnele + - . E
A
Numai litere
W
Numai date logice
N
Numai litere i cifre
Y
Permite doar caracterele logice Y, y, N i n
!
Literele sunt convertite n majuscule
*
Afieaz asterix-uri n locul zerourilor iniiale
.
Specific poziia punctului zecimal.
Codurile de formatare FUNCTION
A
Permit numai caractere alfabetice (litere)
B
Aliniere la stnga
I
Centrare
J
Aliniere la dreapta
C
Dup un numr pozitiv se afieaz CR (credit)
D
Format dat calendaristic stabilit de SET DATE
E
Format dat calendaristic european (britanic)
T
Elimin spatiile de nceput i sfrit
X
Dup un numr negativ se afieaz DB (debit)
Z
Afieaz spatii dac valoarea cmpului este 0
(
Numerele negative sunt incluse ntre paranteze
!
Literele sunt convertite n majuscule.

 Baze de date n Visual FoxPro

18

Exemple:
* citirea unui numr cu dou zecimale pe cmp de 7
caractere:
a=0
@10,10 GET a PICTURE '9999.99'
READ
* citirea oricror caractere pe cmp de lungime 10:
b=space(10)
@10,10 GET b PICTURE REPLICATE ('X',10)
READ
* introducere cu majuscule:
b=space(10)
@10,10 GET b PICTURE REPLICATE ('!',10)
READ
* introducerea unei majuscule i a dou cifre cu centrare:
.....PICTURE 'A99' FUNCTION 'I!'
* urmtoarele machete de editare sunt echivalente:
..... PICTURE 'AAAAA' FUNCTION '!'
..... PICTURE 'XXXXX' FUNCTION 'A!'

1.8. Actualizarea tabelelor de date

Actualizarea tabelelor de date nseamn modificarea


structurii tabelelor de date (vezi comanda MODIFY STRUCTURE) sau
modificarea coninutului acestora. n ceea ce privete modificarea
coninutului unui tabel de date se au n vedere posibilitile de
tergere sau adugare a unor nregistrri precum i modificarea
coninutului celor existente (vezi comenzile DELETE, PACK, RECALL,
REPLACE). Pentru editarea de la tastatur a tabelelor de date se
poate utiliza comanda BROWSE sau se pot alctui secvene program.
Exemplu.
Fie fiierul Agenda.dbf, avnd structura:
Nume
Data_N
Telefon

Caracter
Date
Caracter

30
8
10

 Baze de date n Visual FoxPro

19

Pentru introducerea, de la tastatur, a unor date n acest fiier


se poate concepe urmtoarea procedur:
procedure introducere
clear
@10,10 say 'Numele' get nume function '!'
@12,10 say 'Data nasterii' get data_n
@14,10 say 'Telefonul' get telefon
read
endproc

Folosind aceast procedur se poate edita urmtoarea secven


pentru consultarea i actualizarea fiierului Agenda.dbf:
clear
use agenda
TEXT
Alegeti optiunea:
1. Afisare
2. Adaugare
3. Modificare
0. Terminare
ENDTEXT
opt=0
@10,20 say 'Optiunea:' get opt picture '9' range 0,3
read
clear
do case
case opt=1
do afisare
case opt=2
do adaugare
case opt=3
do modificare
case opt=0
cancel
endcase
cancel
procedure afisare
browse
endproc
procedure adaugare
append blank

 Baze de date n Visual FoxPro

20

do introducere
endproc
procedure modificare
numele = space(30)
@10,0 say 'Numele cautat' get numele function '!'
read
locate for nume=numele
if found()
do introducere
else
WAIT 'Nume negasit!'
endif
endproc

 Observaii
o Pentru afiarea meniului de opiuni s-a utilizat instruciunea
TEXT ENDTEXT
o Pentru afiarea mesajului de eroare Nume negasit! s-a
utilizat instruciunea WAIT.

1.9. Ciclul SCAN

Ciclul SCAN este un ciclu cu numr finit de pai, specializat n


lucrul cu tabele de date. Aceast structur repetitiv realizeaz
parcurgerea tabelului i executarea unui grup de instruciuni pentru
fiecare nregistrare care ndeplinete condiiile specificate. Ciclul este
utilizat, deseori, pentru actualizarea coninutului tabelelor de date,
conform unor anumite condiii, sau pentru obinerea informaiilor
statistice.
Sintaxa este:
SCAN [<domeniu>] [FOR <cond1>] [WHILE <cond2>]
[<instruciuni>]
[LOOP]
[EXIT]
ENDSCAN

 Baze de date n Visual FoxPro

21

1.10. Extragerea unor informaii statistice

Comenzile care permit extragerea unor informaii din tabelele


de date se aplic asupra unor cmpuri sau asupra unor expresii care
conin numele unor cmpuri.
COUNT [TO <var>]
[FOR <cond>] [<domeniu>] [WHILE <cond>]
- numr nregistrrile din tabelul de date, numrul
nregistrri putnd fi memorat ntr-o variabil de lucru;

de

SUM <list exp>[TO<list var>]


[FOR <cond>] [<domeniu>] [WHILE <cond>]
- nsumeaz valorile expresiilor din lista de expresii(<list exp>)
i le atribuie, eventual, unei liste de variabile (<list var>);
AVERAGE <list exp>[TO <list var>]
[FOR <cond>] [<domeniu>] [WHILE cond>]
- la fel ca SUM avnd ca rezultat media aritmetic.
CALCULATE <list funct>[TO<list var>]
[FOR <cond>] [<domeniu>] [WHILE <cond>]
- calculeaz anumite expresii folosind urmtoarele funcii (<list
funct>):
SUM(<expN>)
- suma;
AVG(<expN>)
media aritmetic;
STD(<expN>)
deviaia standard;
VAR(<expN>)
abaterea medie ptratic;
MAX(<exp>)
val maxim, nu neaprat numeric;
MIN(<exp>)
val minim, nu neaprat numeric;
NPV(<expN1>,<expN2>)[,<expN3>])
valoarea prezent net a unei investiii (vezi
funcia de calcul financiar);
CNT()
numrul de nregistrri din tabelul de date.

 Baze de date n Visual FoxPro

22

Aplicaii
10

Se creaz tabelul (fiierul) de date Personal.dbf avnd

structura:
Cmp
nume
marca
functia
salariu
datanast
sex
adresa
20 Se introduc n

Semnificaie
Tip de dat
Numele angajatului
ir de caractere
Cod numeric angajat ir de caractere
Funcia angajatului
ir de caractere
Salariul brut
Numeric
Data naterii
Dat calendaristic
Sex
Logic
Adresa angajatului
Memo
tabel urmtoarele nregistrri:

)
-

n cmpul sex se nscriu valorile .T. (masculin) i .F. (feminin)

valorile din cmpul adresa (text de lungime variabil) nu pot fi nscrise


direct n tabel, dar sunt stocate ntr-un fiier asociat tabelului de date
numit fiier memo. Trimiterea spre acest fiier se poate face printr-un
dublu clic, cu mouse-ul pe cmpul memo corespunztor

30 Informaii privind:

fiierele tabel de date prezente pe disc, n directorul de lucru:


dir

numrul de nregistrri ale tabelului de date i numrul de


ordine al nregistrrii curente:
?reccount()
?recno()

 Baze de date n Visual FoxPro

23

40 Operaii asupra tabelului de date:

limitarea accesului n tabel la nregistrrile care conin angajai


de sex masculin:
set filter to sex=.T.
browse

anularea filtrrii:
set filter to
browse

localizarea nregistrrii cu marca 177 :


locate for marca=177
browse

marcarea pentru tergere a nregistrrilor 2 i 4:


delete record 2
delete record 4
browse

marcarea pentru tergere a nregistrrilor corespunztoare


persoanelor cu vrste mai mari de 40 ani:
delete all for (year(date())-year(datanast))>40
browse

demarcarea tuturor nregistrrilor:


recall all
browse

tergerea fizic a nregistrrilor pentru care salariul este


cuprins ntre 3500000 i 12000000:

dele all for salariu >=3500000 and salariu <=12000000


pack
browse

nlocuirea, n cmpul nume, a literelor mici cu litere mari:


replace all nume with upper(nume)

 Baze de date n Visual FoxPro

24

browse

nlocuirea valoric a salariului, la toi salariaii, cu 12%:


replace all salariu with salariu*1.12
browse

50 Editarea tabelului de date selectiv (selecii pe orizontal i pe


vertical) utiliznd comanda BROWSE:

afiarea pe cmpurile nume, functia, salariu :


browse fields nume, functia, salariu

editarea nregistrrilor corespunztoare persoanelor de sex


masculin i a cmpurilor nume, salariu:
browse fields nume, salariu for sex=.T.

editarea tabelului de date doar pe cmpul salariu:


brow freeze salariu

60 Introducerea adresei persoanelor avnd marca 204 i 161 :


locate for marca='204'
modify memo adresa
locate for marca='161'
modify memo adresa
70 Se creaz, prin sortare, un tabel de date Persoane.dbf,
ordonarea fcndu-se dup cmpurile Functia (cheie primar) i
Salariu (cheie secundar), ascendent:
sort on functia, salariu to Persoane
use Persoane
browse
80 Se definesc urmtoarele criterii de indexare:
criteriul nume+functia, num:
index on nume+functia tag num
criteriul functia+salariu, func:
index on functia+str(salariu,8) tag func
criteriul salariu, descendent:
index on salariu tag salariu descending
criteriul marca
index on marca tag marca

 Baze de date n Visual FoxPro

25

90 Vizualizarea tabelului de date conform celor patru criterii de


indexare definite anterior:
set order to tag num
browse
set order to tag func
browse
set order to tag salariu
browse
?tag()
set order to tag marca
browse
100 Folosind criteriul marca, se localizeaz nregistrarea de cod
204 i se face, pentru aceasta, o mrire de salariu de 8%:
set order to tag marca
seek '204'
replace salariu with salariu*1.08
110 Informaii despre tabelul de date:
numrul total de nregistrri:
count to tot
?tot
numrul de angajai Secretara:
count for functia='Secretara' to a
?a
sau (prin program):
a=0
scan for functia='Secretara'
a=a+1
endscan
?a
media salarial pentru funcia Secretara:
average salariu for functia='Secretara' to b
sau:
calculate avg(salariu) for functia='Secretara' to b
?b
salariul maxim:
calculate max(salariu) to m
?m

 Baze de date n Visual FoxPro

26

sau (prin program):


maxim= salariu
scan
if salariu >maxim
maxim=salariu
endif
endscan
?maxim

2. Utilizarea bazelor de date i a vederilor

2.1. Crearea unei baze de date (Database)

Prin crearea unei baze de date mai multe tabele de date sunt
reunite ntr-o singur colecie. Fiecare baz de date are asociat un
dicionar de date care ofer mai mult flexibilitate n proiectarea i
modificarea bazei de date i reduce sarcina programatorului de a
scrie cod pentru validrile la nivel de cmp i de nregistrare sau
pentru a asigura unicitatea valorilor din cmpurile reprezentnd chei
primare. Fiierele baz de date, coninnd tabele de date i
informaiile asociate lor sunt fiiere avnd extensia implicit dbc.
Dicionarul de date Visual FoxPro permite crearea sau
specificarea unor elemente cum ar fi:
Cheile primare i secundare;
Relaiile dintre tabelele bazelor de date;
Valorile implicite ale cmpurilor;
Mtile de intrare i a formatelor de afiare a cmpurilor;
Regulile la nivel de cmp i de nregistrare;
Procedurile stocate.

Crearea unei baze de date poate fi iniiat prin comanda:


MODIFY DATABASE [<fiier>]

 Baze de date n Visual FoxPro

27

sau prin alegerea opiunii File, New din meniu (n acest caz n caseta
New se selecteaz Database i New file). Cnd se creeaz o nou
baz de date, aceasta nu conine nimic (tabele asociate sau alte
obiecte).
Pentru iniierea unei sesiuni de lucru cu o baz de date,
aceasta trebuie s fie activat (deschis). Deschiderea unei baze de
date se poate realiza prin meniu (File, Open, Files of type: Database
(*.dbc)) sau prin comanda MODIFY DATABASE.

 Observaie

Lucrul cu bazele de date se realizeaz utiliznd Constructorul


bazei de date n fereastra Database Designer, in meniul
principal fiind activat opiunea Database care ofer
instrumentele de lucru cu bazele de date.

Sfat

Lucrai cu bara de instrumente Database Designer. Dac


aceasta
nu
este
afiat
utilizai
meniul:
View,
ToolbarsDatabase Designer.
Remove Table
New Local View
Browse Table
Add Table
Modify Table

New Table

Bara de instrumente Database Designer permite efectuarea unor


operaiuni asupra bazelor de date cum ar fi:
New Table Crearea unui nou tabel de date i includerea lui
n baza de date;
Add Table Includerea unui tabel deja creat n baza de date;
Remove Table Eliminarea unui tabel de date din baza de
date;
Modify Table Modificarea structurii unui tabel;
Browse Table Deschiderea ferestrei de vizualizarea pentru
un tabel;
New Local View Crearea unei vederi (View).

 Baze de date n Visual FoxPro

28

2.2. Adugarea tabelelor la baza de date

Fiecare tabel Visual FoxPro poate exista n una din urmtoarele


dou stri: ca tabel liber, adic sub form de fiier .dbf neasociat
vreunei baze de date, sau ca tabel dintr-o baz de date, adic sub
form de tabel asociat unei baze de date. Tabelele asociate unei
baze de date au unele proprieti specifice, care nu exist n cadrul
tabelelor externe, cum ar fi regulile la nivel de cmp i de
nregistrare, declanatoarele i relaiile permanente.
Tabelele pot fi asociate cu o baz de date prin crearea lor n
cadrul unei baze de date deschise n fundal sau prin adugarea
tabelelor existente la o baz de date.

 Observaie

Un tabel existent poate fi asociat cu o singur baz de


date.

2.3. Eliminarea tabelelor din baza de date

Prin adugarea unui tabel la o baz de date, Visual FoxPro


modific nregistrarea din antetul fiierului corespunztor tabelului
pentru a actualiza calea i numele fiierului asociat bazei de date care
include acum tabelul. Procesul de eliminare a unui tabel dintr-o baz
de date (Remove Table) nu numai c terge tabelul i dicionarele de
date din fiierul bazei de date, ci actualizeaz informaia de relaie
pentru a reflecta noul statut al tabelului, cel de tabel liber. Eliminarea
unui tabel dintr-o baz de date nu determin tergerea automat a
fiierului asociat tabelului. Pentru tergerea fiierului .dbf se poate
utiliza comanda DELETE.

2.4. Crearea relaiilor permanente ntre tabele

Pentru stabilirea unor relaii ntre tabele, trebuie inut cont c


acestea nu sunt relaii de egalitate, ci de subordonare. Unul dintre
tabele va fi printe (Parent Table), iar cellalt copil (Child Table).

 Baze de date n Visual FoxPro

29

n Visual FoxPro, sunt utilizai indecii pentru a stabili relaii


permanente ntre tabelele bazei de date. Indecii sunt constituii pe
baza unor expresii (n particular indecii pot fi nume de cmpuri ale
tabelelor) prin utilizarea procedeului de indexare. Tipul etichetei de
index sau al cheii determin tipul de relaie permanent care se poate
crea. Este necesar folosirea unei chei primare (Primary) pentru
relaii una la mai multe. Pentru partea mai multe, cheile de
indexare sunt chei obinuite (Regular).

Baza

Exemplu
de

date

Furnizor.dbc

include

tabelele

clienti.dbf,

comenzi.dbf, produse.dbf. Aceste tabele de date sunt indexate dup


cmpurile codc (cod client) i codp (cod produs). Tabelele clienti.dbf
i produse.dbf sunt tabele printe iar tabelul comenzi.dbf este tabel
copil, stabilindu-se relaii una la mai multe: clienti.dbf comenzi.dbf

Figura 2.1

i produse.dbf comenzi.dbf. n tabelul clienti.dbf respectiv


produse.dbf cheile codc, codp sunt primare (unice), valorile
corespunztoare acestora neputnd fi scrise dect o singur dat n
tabel nu pot exista mai muli clieni sau mai multe produse cu
acelai cod:

30

 Baze de date n Visual FoxPro

Figura2.2

n tabela copil, comenzi.dbf, pot apare de mai multe ori acelai


coduri de clieni sau produse. Se impune stabilirea cheilor codc i
codp drept chei normale:

Figura 2.3

Crearea unei relaii permanente ntre tabele:


n fereastra Database Designer, se alege numele indexului
primar (cum ar fi codc) i apoi se trage spre numele indexului din
tabela legata (cum ar fi codc din comenzi.dbf).
tergerea unei relaii permanente dintre tabele:
n fereastra Database Designer, se execut clic pe linia de
relaie dintre dou tabele. Ca urmare, limea liniei de relaie crete
pentru a indica faptul c s-a selectat relaia respectiv. Pentru
eliminarea relaiei se apas tasta DELETE.

 Baze de date n Visual FoxPro

31

 Crearea integritii refereniale


Generatorul de Integritate Referenial (Referential
Integrity Builder) se lanseaz prin meniu: Database, Edit Referetial
Integrity. Generarea integritii refereniale presupune crearea unui
set de reguli care s pstreze relaiile definite ntre tabele atunci cnd
se insereaz sau se terg nregistrri.

Figura2.4

Prin ntrirea integritii refereniale, Visual FoxPro nu permite:


S se adauge nregistrri la un tabel copil atunci cnd nu exist
nici o nregistrare asociat n tabelul printe.
S se modifice valori n tabelul printe care ar duce la apariia
de nregistrri orfane n tabelul copil.
S se tearg nregistrri din tabelul printe atunci cnd exist
nregistrri asociate n tabelul copil.
Generatorul de integritate referenial gestioneaz mai multe
niveluri de tergere i actualizri n cascad i este instrumentul cel
mai potrivit pentru generarea integritii refereniale.

 Baze de date n Visual FoxPro

32

 Observaii

Se

recomand

lansarea

generatorului

de

integritate

referenial imediat dup includerea unui nou tabel i


stabilirea relaiilor cu alte tabele deja incluse.
Se recomand realizarea relaiilor de integritate n
cascad.
Dac se intervine n arhitectura bazei de date, de pild, prin
modificarea tabelelor sau a indecilor folosii ntr-o relaie
permanent, se impune relansarea generatorului nainte de
a se folosi baza de date astfel nct acesta s reflecte noua
arhitectur. Altfel, pot fi generate rezultate imprevizibile.

 2.5. nchiderea unei baze de date


nchiderea unei baze de date se poate realiza prin comenzile:
CLOSE DATABASE

-sau-

CLOSE ALL

 2.6. Crearea unei vederi (View)


Vederile reprezint un tip special de tabele, construite pe baza
datelor din una sau mai multe tabele sau vederi legate ntre ele prin
relaii. Vederile sunt folosite atunci cnd se dorete o alt structur a
tabelelor (bazelor de date), structur construit pe baza unor tabele
i vederi deja existente.

 Observaii

Vederile sunt incluse n bazele de date, ele neputnd fi


folosite dect atunci cnd baza de date care le conine este
deschis. Chiar memorarea efectiv a vederilor se face n
fiierul bazei de date (.dbc).
Vederile sunt vzute i prelucrate ca orice alt tabel.
Vederile sunt tabele logice, nestocnd fizic date.

 Baze de date n Visual FoxPro

33

Crearea unei vederi n cadrul unei baze de date se poate realiza


prin meniu, File, New (n acest caz n caseta New se selecteaz
View i New file), sau folosind butonul New Local View din bara
de instrumente Database Designer. n meniul principal este activat
opiunea Query care ofer instrumentele de lucru pentru vederi i
interogri. Pentru construirea vederilor se folosete un utilitar special
al SGBD-ului Visual FoxPro numit View Designer (Constructorul de
vederi).
Modul de utilizare a acestui utilitar este asemntor celui
folosit pentru construirea interogrilor (Query Designer).
Construirea unei vederi implic parcurgerea urmtoarelor etape
principale:
dac baza de date care urmeaz s conin vederea nu
este deschis, se deschide, eventual se creeaz;
apoi se pornete Constructorul de vederi;
urmeaz precizarea sursei de date, adic a tabelelor din
care se preiau datele pentru construirea vederii respective:

Figura 2.5

 Baze de date n Visual FoxPro

34

apoi se stabilesc cmpurile care vor intra n componena


vederii, cmpuri selectate dintre cele ale tabelelor surs
precizate anterior;
n continuare, se specific o serie de parametri precum:
legturile ntre tabelele specificate, eventualele condiii de
filtrare (selecie), ordonare, grupare a datelor n vedere,
modul de actualizare a datelor surs pe baza datelor din
vedere etc.

Aplicaii
10 Pentru evidena produselor livrate de un furnizor se creeaz
baza de date Furnizor.dbc, avnd n componen urmtoarele tabele
de date:
a) clienti.dbf (Client C, 35 / Codc C, 4 / Adresa - memo)

b) comenzi.dbf (Data D / Cantitate N, 10 / Codc C, 4 /


Codp C, 5)

c) produse.dbf (Denumire C, 35 / Pret N, 10 /Um C, 6 /


Codp C, 5 / Stoc N, 12)

 Baze de date n Visual FoxPro

35

unde Codc este codul atribuit firmei, iar Codp este codul produsului i
vor constituii cheile de legtur ntre tabele.
20 S se indexeze tabelele de date:
clienti.dbf dup cmpul Codc, cruia i se va atribuii statutul de
cheie primar (vezi figura 2.2);
comenzi.dbf dup cmpurile Codc i Codp crora li se va
atribuii statutul de chei normale (vezi figura 2.3);
produse.dbf dup cmpul Codp - cheie primar.
30 S se realizeze relaiile de tip una la mai multe (vezi figura 2.1):
a) ntre tabelele de date
clienti.dbf i comenzi.dbf (clic cu
mouse-ul pe cheia Codc din tabelul clienti.dbf i tragere peste
cheia Codc din tabelul comenzi.dbf).
b) ntre tabelele de date produse.dbf i comenzi.dbf.
40 S se lanseze Generatorul de Integritate Referenial (prin
meniu: Database, Edit Referetial Integrity) pentru realizarea relaiilor
de integritate n cascad (Cascade) vezi figura 2.4. S se verifice
stabilirea integritii refereniale n urmtoarele situaii:
o tergere logic (DELETE) n tabelul printe, clienti.dbf, se
reflect ca tergere logic n tabelul copil comenzi.dbf.
orice modificare a cheii primare din tabelul printe, clienti.dbf,
se reflect ca modificare n tabelul copil comenzi.dbf.
50 S se includ n baza de date un tabel vedere, livrari:

 Baze de date n Visual FoxPro

36

) Indicaie
Se va aciona butonul New Local View din bara de instrumente
Database Designer i se vor include n vedere cele trei tabele de date (vezi
figura 2.5), precum i cmpurile necesare. La nchiderea ferestrei View
Designer, acestei vederi, i se va asocia numele livrari.

60 S se obin situaia livrrilor, afind coninutul tabelului livrari


(Browse):

3. Interogarea bazelor de date

O interogare a unei baze de date reprezint extragerea - n


funcie de anumite criterii i ntr-un anumit format - unor date din
tabele de date care alctuiesc baze de date. Componenta Visual
FoxPro-ului care realizeaz acest obiectiv se numete Query
Designer
(Constructorul
de
interogri),
component
asemntoarea cu View Designer (Constructorul de vederi).
Datele extrase printr-o interogare pot fi prezentate sub diverse forme
(Browse, rapoarte, grafice, etc,).

 3.1. Crearea, deschiderea i rularea unei interogri


Crearea unei interogri (fiier cu extensia implicit
QPR) poate fi iniiat prin comanda:
MODIFY QUERY [<nume interogare>]

 Baze de date n Visual FoxPro

37

sau prin alegerea opiunii File, New din meniu (n acest caz n caseta
New se selecteaz Form i New file).

Activarea (deschiderea) unui formular se poate realiza prin


meniu (File, Open, Files of type: Query (*.qpr)) sau prin comanda
MODIFY QUERY.
O interogare este o secven executabil care poate fi
rulat n urmtoarele moduri:

din meniul principal (Query, Run Query),

prin acionarea butonului

prin comanda

 Observaie

din linia de instrumente standard,

DO <nume interogare>.

Prin lansarea Constructorului de interogri, n fereastra


Query Designer, meniul principal va include opiunea Query
care ofer instrumentele de lucru necesare.

Sfat

Lucrai cu bara de instrumente Query Designer. Dac aceasta


nu este afiat utilizai meniul: View, ToolbarsQuery
Designer.
Remove Table
Add Table

Add Join
Show the SQL window
Query Destination
Maximize the table
i

Bara de instrumente Query Designer permite efectuarea unor


operaiuni cum ar fi:
Add Table Includerea unui tabel de date n interogare;
Remove Table Eliminarea unui tabel;
Add Join Stabilirea sau modificarea unor legturi ntre
tabelele de date incluse n interogare;
Show the SQL window transpunerea secvenei de
interogare n instruciuni SQL;

 Baze de date n Visual FoxPro

38

Query Destination stabilirea destinaiei unei interogri: o


fereastr Browse, un tabel permanent, o list la imprimant
(report), un grafic, etc.
Maximize the table View modificarea formei de afiare a
coninutului ferestrei Query Designer.
Fereastra Query Designer (figura 3.1) este constituit din dou
zone, n care sunt afiate tabelele surse de date (mpreun cu legturile
dintre ele), respectiv paginile n care se vor preciza parametrii de
definire a interogrii i anume:
Fields (cmpuri) specificarea cmpurilor surs ce vor fi incluse
n tabelul destinaie;
Join (legtur) legturile ntre tabelele surs;
Filter (filtru) condiiile de selecie (filtrare) a datelor din tabelele
de date;
Order By (ordonare) specific ordinea de prelucrare;
Group By (grupare) criteriile de grupare a datelor;
Miscellaneous (altele).

Figura 3.1

 Baze de date n Visual FoxPro

39

 3.2. Fereastra Query Designer


 Specificarea cmpurilor interogrii
Pentru ca un cmp s fie preluat ntr-o interogare se activeaz
pagina Fields, dup care acesta se selecteaz din lista Availabile
fields (cmpuri disponibile) i se acioneaz butonul Add. Ca urmare
numele cmpului va fi copiat n lista Selected fields (vezi figura 3.1).
Dac se dorete introducerea unui cmp calculat se va introduce
formula de calcul corespunztoare n caseta Functions and
expresions.

 Specificarea legturilor ntre tabelele de date


Modelul relaional al bazelor de date permite stabilirea unor
legturi ntre tabelele de date. Aceste relaii pot fi permanente,
memorate n fiierul bazei de date, sau stabilite dinamic n cadrul
unor secvene program. Stabilirea legturilor dinamice se poate
realiza cu ajutorul comenzii:
SET RELATION TO
<etichet1> INTO <tabel1>,
<etichet2> INTO <tabel2>,
unde:
- tabelul printe este cel activ;
- TO stabilete criteriile de ordonare;
- INTO precizeaz tabelele copil.
La fel ca n cazul definirii unei vederi (cu View Designer), pentru
stabilirea unei legturi ntre dou tabele de date, este necesar ca cele
dou tabele s aib cel puin un cmp comun prin intermediul cruia
se realizeaz corespondena. Relaia stabilit ntre dou tabele legate
este o relaie de subordonare: unul din tabele va fi tabelul printe,
iar cellalt va fi tabelul copil. Mutarea indicatorului de nregistrri al
tabelului printe pe o anumit nregistrare determin mutarea
indicatorului de nregistrri al tabelului copil pe nregistrarea
corespunztoare, dar nu i invers.

 Baze de date n Visual FoxPro

40

 Observaii:

Este obligatorie indexarea tabelului copil dup criteriul care


stabilete legtura (de obicei acesta este un cmp comun cu
al tabelului printe, dar poate fi i o expresie oarecare).
Se pot stabilii dou tipuri de legturi ntre tabelul printe i
tabelul copil:
o legturi unu la unu, cnd n tabelul copil valorile
cheii de indexare sunt unice;

o legturi unu la mai multe, cnd nregistrrile


tabelului copil pot lua i valori egale pe cheia de
indexare.
Legturile permanente necesare pentru stabilirea unei
interogri se aleg folosind pagina Join (figura 3.2), prin specificarea
cmpurilor care fac obiectul legturii i a tipului de legtur:
Inner Join legtur interioar, ntre nregistrrile din tabelul
printe care au corespondent n tabelul copil i invers;
Left Join legtura la stnga, cnd vor fi luate n considerare
i nregistrrile din tabelul printe (din stnga) care nu au
corespondent n tabelul copil;
Right Join legtura la dreapta,
cnd vor fi luate n
considerare i nregistrrile din tabelul copil (din dreapta) care
nu au corespondent n tabelul printe;
Full Join vor fi considerate toate legturile.

Figura 3.2

 Baze de date n Visual FoxPro




41

Condiiile de selecie a nregistrrilor

Principala funcie a unei interogri este aceea de selecie.


Criteriile de selecie sunt precizate n pagina Filter.

Figura 3.3

Ordonarea afirii rezultatelor interogrii

Specificarea ordinii de afiare se face cu ajutorul paginii Order


By. n figura 3.4 s-a selectat ordonarea dup cmpul nume din
tabelul Studenti.dbf:

Figura 3.4

Gruparea datelor

42

 Baze de date n Visual FoxPro

Query Designer (pagina Group By) permite ca mai multe


nregistrri s fie cumulate dup mai multe criterii, pentru fiecare
grup de nregistrri fiind furnizat n tabelul de destinaie o singur
nregistrare. Gruparea poate fi realizat dup unul sau mai multe
cmpuri care vor forma cheia de grupare. nregistrrile avnd
aceleai chei de grupare vor furniza n tabela de destinaie o singur
nregistrare (cmpurile numerice pentru un grup vor conine valori
obinute prin nsumarea valorilor corespunztoare din grup).

 Destinaia interogrii

Figura3.5

Datele extrase prin interogare pot fi trimise spre o anumit


destinaie (folosind butonul Query Destination din bara de butoane a
Constructorului de interogri) cum ar fi:
fereastra Browse - implicit;
un tabel permanent (Table) acesta putnd fi folosit ntr-o nou
prelucrare;
ecranul (Screen);
o list la imprimant (Report);
un grafic (Graph) construit cu ajutorul componentei Microsoft
Graph.

 Baze de date n Visual FoxPro

43

Aplicaii
10 S se creeze urmtoarele tabele de date:

Studenti.dbf (nume C, 30 / matricola N,4 /grupa C,4)


Discipline.dbf (materia C, 30 / cod C,4)
Note.dbf (nota N,2 / matricola N, 4 / cod C,4):

20 S se indexeze tabelele de date Studenti.dbf, Discipline.dbf


dup cmpurile Matricola respectiv Cod.
30 S se creeze i s se ruleze fiierul de interogare a tabelelor de
date Studenti.dbf, Discipline.dbf, Note.dbf, pentru afiarea notelor
studenilor inclui n baza de date (vezi figura 3.1 i figura 3.2). S se
stabileasc ca destinaie a interogrii fiierul Catalog.dbf (vezi figura
3.5) i s se vizualizeze coninutul acestui tabel.
40 S se realizeze interogarea bazei de date pentru afiarea notelor
n ordinea alfabetic a numelor studenilor (vezi figura 3.4).
50
S se ruleze fiierul de interogri pentru afiarea notelor
studenilor din grupa FC01 (vezi figura 3.3).
60 S se ruleze fiierul de interogri pentru toate cele patru tipuri de
legturi (Inner Join, Left Join, Right Join, Full Join) vezi figura 3.2.

 Baze de date n Visual FoxPro

44

4. Utilizarea formularelor

Formularul
(forma)
reprezint
o
fereastr
pentru
introducerea sau extragerea datelor utilizatorului, n mod interactiv,
cu ajutorul unor obiecte de interfa crora le sunt asociate
proprieti i metode (secvene de instruciuni secvene de cod).
Definirea unui formular se realizeaz prin utilizarea tehnologiei POO
(Programare Orientat Obiect) care permite modificare proprietilor
obiectelor incluse n formular, ceea ce se reflect n aspectul
formularului i a comportamentului acesteia n diferite situaii.
Form Designer (Constructorul de formulare) este o
component a Visual FoxPro - ului dedicat crerii i modificrii
formularelor precum i generrii secvenei de cod necesare pentru
execuia acestora (fiierele corespunztoare au extensia implicit
scx).

 4.1. Crearea, deschiderea i rularea unui formular


Crearea unui formular (fiier cu extensia implicit SCX)
poate fi iniiat prin comanda:
MODIFY FORM [<nume formular>]
sau prin alegerea opiunii File, New din meniu (n acest caz n caseta
New se selecteaz Form i New file).

Activarea (deschiderea) unui formular se poate realiza prin


meniu (File, Open, Files of type: Form (*.scx)) sau prin comanda
MODIFY FORM.
Scopul crerii unui formular este obinerea unei secvene
executabile care poate fi rulat n urmtoarele moduri:

 Baze de date n Visual FoxPro

45

din meniul principal (Form, Run Form),

prin acionarea butonului

prin comanda

din linia de instrumente standard,

DO FORM <nume formular>.

 Observaie

Prin lansarea Constructorului de formulare, n fereastra


Form Designer, meniul principal va include opiunea Form
care ofer instrumentele de lucru necesare.

 4.2. Elementele constructorului de formulare


Ferestrele de lucru

Form Designer fereastra principal care conine obiectele


formularului.
Properties fereastra de proprieti avnd ca rol
modificarea proprietilor obiectelor formularului (metode,
nume, titluri, dimensiuni, fonturi, culori, etc.).
Data Environment mediul de date al formularului,
fereastra pentru precizarea tabelelor de date care vor fi
deschise automat n momentul rulrii formularului.
Ferestrele pentru cod succesiunile de instruciuni care
urmeaz a fi executate la apariia diferitelor evenimente din
cadrul formularului cum ar fi: acionare unui buton, selectare
unui obiect, etc.

Barele utilitare

Form Designer Toolbar - bara de butoane standard a


formularului:
Data Environment

Layout Toolbar

Properties Window
Code Window

Color Palette Toolbar


Form Controls Toolbar

 Baze de date n Visual FoxPro

46

Butoanele
din
aceast
bar
de
instrumente
permit
deschiderea/nchiderea ferestrelor: Data Environment, Properties,
Code (afiarea secvenei de cod) sau a barelor de lucru:
Form Control Toolbar butoanele de control;
Color Palette Toolbar stabilirea atributelor de culoare;
Layout
Toolbar alinierea obiectelor n formular,
suprapunerea obiectelor, etc.

Form Controls Toolbar

Lista obiectelor din formular


Form Designer Toolbar

Valoarea
proprietii

Proprietate
FORMULARUL

Obiect

Sfat

Lucrai cu barele de instrumente. Dac acestea nu sunt


afiate utilizai meniul: View, Toolbars

 Baze de date n Visual FoxPro

47

 4.3. Mediul de date al formularului (Data Environment)


Constructorul de formulare permite configurarea mediului de
date n care lucreaz formularul, adic a zonelor de lucru i a
tabelelor de date deschise n ele. Tabelele de date sunt deschise
automat (fr comenzi speciale), dac acestea sunt incluse n Data
Environment, nainte de execuia formularului (este de la sine neles
c aceste tabele de date au fost deja create).

 Observaii

Deschiderea ferestrei Data Environment poate fi fcut


prin meniu (View, Data Environment) sau folosind butonul
corespunztor din bara de butoane Form Designer. Astfel n
meniul principal este inclus opiunea DataEnvironment.
Includerea (Add) unui tabel n Data Environment este
realizat prin meniu: DataEnvironment, Add sau prin clic cu
butonul dreapta al mouse-ului.

Mediul de date al formularului este considerat un obiect, deci


are asociate metode i proprieti. Cele mai importante metode,
legate de folosirea datelor sunt:
Metoda OpenTables este folosit la deschiderea tabelelor de
date necesare (dac nu este utilizat, tabelele asociate sunt
deschise automat).
Metoda Load Event poate fi folosit, de asemenea, la
deschiderea tabelelor. Aceasta este iniiat dup metoda
OpenTables.
Metoda Init Event este o metod apelat dup metoda Load,
i face anumite iniializri ale obiectelor din formular, inclusiv cu
datele din tabelele care sunt deja deschise.
Metoda CloseTables are ca scop nchiderea tabelelor de date
din mediul de date al formularului la iniiativa utilizatorului.
Metodele Unload (descrcare) i Destroy (distrugere a
formularului) acioneaz asupra mediului de date i sunt
activate dup metoda CloseTables.

 Baze de date n Visual FoxPro

48

 4.4. Utilizarea controalelor


Includerea controalelor n cadrul unui formular se realizeaz
prin introducerea unor obiecte (Label, Text Box, etc.) n acest
formular. Pentru aceasta, se acioneaz butonul corespunztor din
Form Controls Toolbar i se stabilete poriunea dreptunghiular
(zona) din formular unde va fi afiat obiectul. Practic, obiectul va fi
desenat (se poziioneaz cursorul mouse-ului n colul stnga-sus al
zonei de afiare, se ine apsat butonul stng i se trage cursorul
spre colul dreapta-jos).

Proprieti i metode

Un formular poate conine mai multe obiecte, el nsui fiind


considerat un obiect. Fereastra
Properties permite alegerea
obiectului i a proprietii a crei valoare se schimb, ca de exemplu:
Proprietatea Caption este destinat stabilirii unui titlu
(denumire) pentru formular sau obiect.
Proprietatea Name permite atribuirea unor nume
obiectelor. Visual FoxPro stabilete valori implicite
proprietilor Caption i Name cum ar fi:
o Form1, Form2
pentru formulare
o Label1, Label2...
pentru obiectele Label
o Command1, Command2 pentru butoane
o Text1, Text2
pentru obiectele Text Box
o Edit1, Edit2
pentru obiectele Edit Box
Aceste nume ale obiectelor pot fi folosite aa cum au fost
definite de Visual FoxPro ns utilizatorul are posibilitatea
stabilirii unor denumiri proprii.
Proprietatea FontSize stabilete atributele de scriere
privind dimensiunea fontului folosit.
Proprietatea FontBold permite scrierea bold.
Proprietatea BorderStyle ofer posibilitatea stabilirii
atributelor de bordare.

 Baze de date n Visual FoxPro

49

Proprietatea Format permite introducerea formatat a


datelor conform codurilor Function.
Proprietatea Input Mask permite introducerea formatat
a datelor conform codurilor Picture.

 Observaie

O categorie special de proprieti o reprezint metodele.


Metodele sunt secvene de cod (instruciuni)
diferitelor obiecte la activarea/dezactivarea acestora.

asociate

Form Designer ofer posibilitatea modificrii unei proprieti


prin comenzi de atribuire, referirea la proprietatea respectiv
fcndu-se prin construcia:
<nume formular>.<nume proprietate>
Referirea la un obiect din cadrul unei formulare se realizeaz
printr-o construcie asemntoare, adic:
<nume formular>.<nume obiect>.<nume proprietate>
Exist construcii speciale, mai scurte, cum ar fi:
o This
- care se refer la obiectul curent;
o ThisForm
- care indic formularul ce conine
obiectul curent;
o Parent
- care se refer la obiectul care conine
obiectul curent.

Exemple
Form1.Caption=Actualizare
modific proprietatea Caption (titlu) a formularului
Form1
Form1.Vizualizare
execut metoda Vizualizare ataat formularului
Form1.Label1.Caption=Numele persoanei
modific proprietatea Caption (titlu) a obiectului
Label1
ThisForm.Caption=Adugare

 Baze de date n Visual FoxPro

50

modific proprietatea Caption (titlu) a formularului


curent
ThisForm.Vizualizare
execut metoda Vizualizare ataat formularului
curent
This.Caption=Numele persoanei
modific proprietatea Caption (titlu) a obiectului

 Obiecte din formular


 Obiecte simple
Label afieaz un text informativ

Text Box definete un cmp de editare n care utilizatorul


poate introduce un text.
Edit Box pentru editarea variabilelor ir de caractere,
tablou, cmpuri ale tabelelor de date, cmpuri memo.
Command

Button

este

tipic

pentru

startul

evenimentelor, pentru cutarea i nchiderea formularelor, mutarea


diferitelor nregistrri, imprimarea rapoartelor, etc.

Check Box (casete de validare). Obiectele Check Box


permit utilizatorului s specifice o stare de tip logic (true sau false),
astfel nct la executarea formularului s se poat alege ntre dou
stri. Principalele proprieti care le sunt asociate sunt:
Proprietatea Value furnizeaz valorile numerice 0 sau 1
dup cum caseta este neselectat sau selectat (bifat).
Proprietatea Style schimb stilul de afiare, avnd
valoarea 0Standard sau 1-Graphical, caseta de validare
primind aspectul unui buton neapsat/apsat:

 Baze de date n Visual FoxPro

51

Standard

Spinner

(casete

Graphical

de

incrementare/decrementare).

Obiectele Spinner permit utilizatorului s-i stabileasc opiunile


parcurgnd incremental o plaj de valori sau introducnd direct
valorile n caset. Pentru aceasta, cmpul de editare al casetei are n
dreapta sa dou butoane: unul pentru incrementare i altul pentru
decrementare:

Proprieti principale:
Proprietatea Value stabilete valoarea iniial nscris n
caset i furnizeaz valorile editate la execuia formularului.
Proprietile KeyboardHighValue i KeyboardLowValue
stabilesc limita superioar i inferioar a valorilor introduse
n cmpul de editare direct de la tastatur (depirea acestor
limite genereaz mesaj de eroare).
Proprietile SpinnerHighValue i SpinnerLowValue
stabilesc limita superioar i inferioar a valorilor introduse
cu ajutorul butoanelor de incrementare/decrementare
(depirea acestor limite nu conduce la eroare dar valoarea
aflat n editare nu mai este mrit/micorat).
Combo Box - List Box (casete cu list - list
derulant). Listele sunt obiecte care ofer utilizatorului posibilitatea
selectrii unor elemente dintr-o mulime finit, afiat total sau
parial pe ecran. Se utilizeaz dou tipuri de liste: liste simple - List
Box i liste derulante sau expandabile - ComboBox care afieaz doar
elementul curent al listei.

52

 Baze de date n Visual FoxPro

Listele simple, List Box afieaz la un moment dat mai multe


elemente (nu neaprat pe toate):

Listele expandabile, Combo Box, afieaz, n stare neactivat,


doar un element al listei:

Proprieti ale listelor:


Proprietatea RowSourceType stabilete sursa de date a
elementelor unei liste cum ar fi:
o 0 None (surs nespecificat), cnd specificarea
elementelor listei se face n mod dinamic, la rularea
formularului;
o 1 Value (valoare), care presupune c elementele
listei sunt enumerate manual n proprietatea
RowSource (list de elemente separate prin virgul);
o 2 Alias, cnd elementele listei sunt preluate dintr-o
tabel de date specificat n proprietatea RowSource;
o 3 SQL Statement (instruciuni SQL);
o 4 - Query (interogare);
o 5 Array (tablou) elementele listei sunt preluate
dintr-un tablou;
o etc.

 Baze de date n Visual FoxPro

53

Proprietatea RowSource specific sursa efectiv de date.

Numrul implicit de coloane dintr-o list este 1 ns pot fi


construite i liste multicoloan. O variant simpl de a obine o list
multicoloan
dintr-o
list
unicoloan
o
ofer
proprietile
RowSourceType i RowSource. De exemplu, dac proprietatea
RowSourceType este 2 Alias proprietatea RowSource poate avea
valoarea Personal.Marca+Personal.Nume (pentru baza de date
Personal.dbf) astfel nct rezult o list de forma:

 Obiecte compuse (container)


Obiectele compuse sunt constituite ca un grup de obiecte
simple. Construirea (Builder) unui obiect container (de exemplu
includerea unor obiecte simple) sau editarea (Edit) unui obiect inclus
ntr-un
container
presupune
acionarea
butonului drept al
mouse-ului:

 Baze de date n Visual FoxPro

54

Option Group (butoane radio). Butoanele radio sunt un


tip special de obiecte de interfa care ofer posibilitatea alegerii unei
singure opiuni din mai multe posibile (sunt obiecte container).
Proprietile cele mai utilizate ale butoanelor radio sunt:
Proprietatea
ButtonCount
stabilete
numrul
de
componente ale obiectului.
Proprietatea AutoSize determin calcularea automat a
dimensiunii grupului de butoane n funcie de coninut, dac
are valoarea .T. True.
Proprietatea Value furnizeaz valorile numerice 1, 2, 3,
reprezentnd numrul de ordine al butonului selectat

(implicit 1).
Proprietatea Style a fiecrui obiect din container
schimb stilul de afiare, avnd valoarea 0Standard sau 1Graphical :
Standard

Graphical

Command Group (butoane de comand). Grupurile de


butoane de comanda au roluri asemntoare cu ale butoanelor simple
(Command Button) doar c ele sunt constituite ca obiecte container,
deci pot fi construite i editate ca acest tip de obiecte. Cele mai
importante proprieti (ButtonCount,
AutoSize, Value) sunt
identice cu ale butoanelor radio.

Grid (Grile). Grila este un obiect container, variant


mbuntit a ferestrei Browse, care conine mai multe obiecte de
interfa, plasate matricial, cum ar fi: coloane, antete (header),
cmpuri de editare, fiecare cu propriul set de proprieti i metode.

 Baze de date n Visual FoxPro

55

Elementele componente ale unei grile sunt cele prezente i n


mediul ferestrei Browse:
liniile, coloanele i celulele;
barele de derulare folosite atunci cnd dimensiunea grilei
depete dimensiune zonei vizibile;
antetul (header) capul de tabel;
coloana de marcare a liniilor;
coloana de tergere a liniilor.
Obiectul Grid are o organizare intern arborescent, fiind dispus
pe nivele: la primul nivel sunt situate coloanele apoi antetele coloanelor
i obiectele de interfa:
Grid

Grila
Column1

Coloana1

Header1

Antet1

Text1

Cmp1

Column2

Coloana2

Header2

Antet2

Text2

Cmp2

Grila i elementele din gril au anumite proprieti cum ar fi:


Proprietatea RecordSourceType stabilete sursa de date
a grilei:
o 0 Table i 1 Alias, sursa de date este un tabel de
date care va fi deschis automat la iniializarea grilei. n
acest caz, nregistrrile tabelei vor fi linii n gril, iar
cmpurile tabelului de date vor fi coloane;
o 2 Prompt sursa de date (tabelul de date) se
specific la execuia formularului;
o 3 - Query (interogare);
o 4 SQL Statement (instruciuni SQL).
Proprietatea RecordSource specific denumirea exact a
sursei de date.

 Baze de date n Visual FoxPro

56

Aplicaii
10 S se editeze urmtorul formular:

Indicaii

Se lanseaz Constructorul de formulare.

Se stabilesc proprietile obiectelor n felul urmtor:


Obiect
Tip
Proprietate
Valoare
Observaii
proprietate
Form
Caption
Calcule
financiare
Form1
Button
Caption
Calculeaz
Color Pallete : Verde
Command
Command1
Label1

Label

FontBold
Caption

.T. -True
Funcia:

Optiongroup

Name

Opt

Caption
Caption

FV
PV

Color Pallete : Rou


Color Pallete : Rou

Payment
.T. -True
a1

Color Pallete : Rou

Text Box

Caption
FontBold
Name

Text Box

FontSize
FontBold
Name

11
.T. -True
a2

FontSize
FontBold

11
.T. -True

FV
PV
Payment

a1

a2

Color Pallete : Rou

Color
Pallete
Albastru
Primul argument
Color
Pallete
Albastru
Al doilea argument

 Baze de date n Visual FoxPro

57

Text Box

Name

a3

Text Box

FontSize
FontBold
Name

11
.T. -True
Rezultat

FontSize

12

FontBold

.T. -True

a3

Color
Pallete
Albastru

Al treilea argument
Color Pallete : Rou

rezultat

Obiect

Afieaz rezultatul

Se stabilesc metodele (secvenele de cod) folosind pagina Method


din fereastra Properties:
Metoda
Secvena de cod
Click Event
a1=val(ThisForm.a1.Value)

Calculeaz

(se poate
executa i
dublu click pe
obiect)

a2=val(ThisForm.a2.Value)
a3=val(ThisForm.a3.Value)
Opt=ThisForm.Opt.Value
do case
case Opt=1
ThisForm.rezultat.Value=FV(a1,a2,a3)
case Opt=2
ThisForm.rezultat.Value=PV(a1,a2,a3)
case Opt=3
ThisForm.rezultat.Value=Payment(a1,a2,a3)
endcase

Observaie: Deoarece valorile introduse n Text Box-uri sunt


de tip ir de caractere, este necesar convertirea lor n valori
numerice, utiliznd funcia val.

Se salveaz i se execut formularul astfel creat.

20 S se editeze un formular pentru actualizarea datelor din tabelul de


date Personal.dbf.

) Indicaii

Se include n mediul de date al formularului, Data Environment,


tabelul Personal.dbf i se import n formular, ca obiecte, cmpurile
tabelului de date, prin tragere, cu mouse-ul n zona de editare a
formularului. Aceste obiecte vor fi considerate de Constructorul de
formulare

ca

fiind

de

tip

Text

Box

(txtNume,

txtMarca,

txtFunctia, txtSalariu, txtDatanast), de tip Edit Box (pentru


cmpul Adresa care este Memo) sau de tip Check Box (pentru
cmpul Sex).

 Baze de date n Visual FoxPro

58

Se eticheteaz denumirile cmpurilor din tabelul de date (Numele,


Marca, etc.) folosind obiecte de tip Label.

Se stabilesc proprietile obiectelor n felul urmtor:

Obiect

Tip

Proprietate

Valoare

Observaii

proprietate

Form1
Command1
Command2
Command3
Command4
M

Contor

Form

Caption

Actualizare

Button

Caption

Vizualizare

Color Pallete : Mov

Caption

Adaug

Color Pallete : Verde

Caption

terge

Color Pallete : Albastru

Caption

Stop

Color Pallete : Rou

Name

Poziionare pe o anumit

Command
Button
Command
Button
Command
Button
Command
Text Box

marc

Spinner

FontBold

.T. -True

Name

Contor

Value

FontBold

.T. -True

Contorul nregistrrilor

 Baze de date n Visual FoxPro

59

Se stabilesc metodele (secvenele de cod) folosind pagina Method


din fereastra Properties:

Obiect

Metoda

Secvena de cod

Click
Event

browse

Click
Event

append blank
ThisForm.Refresh
ThisForm.Contor.Value=recno()

Click
Event

delete
pack
ThisForm.Refresh
ThisForm.Contor.Value=recno()
ThisForm.Release

Vizualizare

Adaug

terge
Click
Event

Stop
M

Lost Focus
Event

LostFocus
Event

Contor

locate for This.Value=Marca


if found()
ThisForm.Refresh
ThisForm.Contor.Value=recno()
endif

Metoda Lost Focus permite ca la ieirea din cmpul de editare s


se execute secvena care permite:
- poziionare pe cmpul Marca
- introducerea, n Text Box-uri, a valorilor din tabelul de date
(refresh)
- afiarea numrului nregistrrii curente - recno()
s=This.Value
if s>=1 and s=<reccount()
goto s
ThisForm.Refresh
else
ThisForm.Contor.Value=recno()
endif
- poziionare pe valoarea nscris (goto s)

DownClick
Event

- la fel ca la Contor.LostFocus

UpClick
Event

- la fel ca la Contor.LostFocus

Se stabilete ordinea de activare a obiectelor prin acionarea


butonului Set Tab Order.

Se salveaz i se execut formularul astfel creat.

 Baze de date n Visual FoxPro

60

30 S se editeze un formular pentru evidena unor calificative. n


mediul de date al formularului se vor introduce (n aceast ordine!)
tabelele de date:
a) Tabelul de date Calificative.dbf, avnd structura:
Nume
Nota1
Nota2
Media

Character
Numeric
Numeric
Numeric

30
2
2
5,2

b) Tabelul de date Personal.dbf.

Indicaii
Obiectul GrdCalificative poate fi creat n formular prin tragerea
tabelului Calificative.dbf, cu mouse-ul, din fereastra Data
Environment.

Se stabilesc proprietile obiectelor active n felul urmtor:

Obiect

Tip

Proprietate

Form

Caption

Button
Command

Caption

Valoare
proprietate
Acordare
calificative
Adaug

FontBold

.T. -True

Form1

Adaug

Observaii

 Baze de date n Visual FoxPro


Button
Command

Stop

Caption

Stop

FontBold
FontBold

.T. -True
.T. -True

RowSourceType
RowSource

2 - Alias
Personal.marca+
Personal.nume

Grid

FontSize

10

Header1

Caption
Alignment

Numele persoanei
2 Middle Center

Enabled

.F. - False

Combo
Box

Combo1

61

Permite
selectarea unei
componente din
fiierul

Personal.dbf

GrdCalificative

Text1

Afiarea listei se
face pe dou
coloane
Liniile listei se
adaug prin
acionarea
butonului
Adaug
La fel i pentru
celelalte cmpuri
La fel pentru
coloana 4

Se stabilesc metodele (secvenele de cod) folosind pagina


Method din fereastra Properties:

Obiect

Metoda
Lost
Focus

GrdCalificative,
Column2,
Text1

Adaug

Click
Event

Stop

Click
Event

Secvena de cod
repl media with (nota1+nota2)/2

-cmpul media rezult din calcul


- la fel pentru GrdCalificative, Column3, Text1

append blank
repl nume with personal.marca+personal.nume
thisform.refresh
-introduce n list marca i numele persoanei
ThisForm.Release
-dezactiveaz (nchide formularul)

Se stabilete ordinea de activare a obiectelor prin acionarea


butonului Set Tab Order.

Se salveaz i se execut formularul astfel creat.

 Baze de date n Visual FoxPro

62

5. Proiectarea meniurilor

Meniurile sunt obiecte de interfa care pun la dispoziia


utilizatorului o serie de opiuni care permit alegerea i declanarea
unor operaii de prelucrare. Aproape orice interfa grafic conine,
ntr-o form sau alta, un meniu. Un meniu apare, de obicei, n partea
superioar a ferestrelor de aplicaii i are o structur standard, iar n
general, orice operaie care poate fi executat n cadrul unei aplicaii
trebuie s aib un corespondent n meniul acesteia, pentru a putea fi
executat. Utilizatorul i construiete un model mental al structurii
aplicaiei prin simpla examinare a meniurilor i a articolelor de meniu,
meniul reprezentnd un mijloc prin care utilizatorul comunic
sistemului ce operaie s efectueze la un moment dat.
Meniu orizontal
(Meniu Bar)

Opiune selectat din meniul orizontal


Opiune selectat din submeniu

Submeniu Vertical
(Submenu)

Un meniu este format, n general, dintr-o bar (sau un


submeniu orizontal) care conine mai multe opiuni. Fiecare dintre
acestea are asociat un submeniu vertical, care este activat numai la
alegerea opiunii respective. Alegerea de ctre utilizator a opiunilor
meniurilor verticale poate declana o operaie de prelucrare sau poate
determina afiarea unui nou submeniu vertical.

 5.1. Crearea i deschiderea unui meniu


Crearea unui meniu (fiier cu extensia implicit MNX)
poate fi iniiat prin comanda:

 Baze de date n Visual FoxPro

63

MODIFY MENU [<nume meniu>]


sau prin alegerea opiunii File, New din meniu (n acest caz n caseta
New se selecteaz Menu i New file). Din fereastra deschis pe
ecran se alege butonul Menu (meniu), dac se dorete crearea unui
meniu cu bar i submeniuri verticale, respectiv butonul Shortcut
(scurttur), dac se dorete construirea unui submeniu vertical,
avnd subordonate alte meniuri verticale. Astfel va fi lansat n lucru
Constructorul de meniuri.

Activarea (deschiderea) unui meniu care a fost deja


generat se poate realiza prin selectarea acestuia (File, Open, Files of
type: Menu (*.mxx)) sau prin comanda MODIFY MENU.

Sfat
nainte de a stabili componentele unui meniu i caracteristicile
acestora trebuie precizate o serie de opiuni, cum ar fi poziia
fa de meniul sistemului Visual FoxPro. Opiunile generale ale
unui meniu pot fi precizate n fereastra de dialog General
Options (opiuni generale): View, General Options din meniul
Visual FoxPro-ului.

 5.2. Definirea componentelor unui meniu


Butoanele din seciunea Location (locaie) stabilesc poziia
noului meniu fa de meniul sistem:

Replace nlocuirea meniului sistem;


Append adugare;
Before - plasarea noului meniu naintea submeniului sistemului
specificat n lista derulant alturat (care este afiat numai la
selectarea butonului);
After noul meniu va fi plasat dup submeniul specificat.

64

 Baze de date n Visual FoxPro

Se pot specifica secvene de cod (Meniu code) la iniializarea


meniului (crearea sa) i tergerea meniului (eliminarea sa din
memorie). Secvenele de cod respective se specific n ferestre
deschise prin activarea comutatoarelor Setup (iniializare) i
Cleanup (tergere), urmat de acionarea butonului OK.
n fereastra Meniu Designer sunt enumerate i descrise
opiunile meniului creat i o serie de obiecte de interfa folosite la

manipularea acestor opiuni. La un moment dat, n fereastra de lucru,


este afiat numai grupul de opiuni al unui subsistem (orizontal sau
vertical) al meniului proiectat. O opiune poate fi folosit pentru
accesul la un alt submeniu sau poate fi dedicat declanrii unei
aciuni. Pentru a reveni la meniul imediat superior se folosete lista

 Baze de date n Visual FoxPro

65

derulant Menu level (nivel meniu), n care sunt disponibile toate


meniurile superioare ierarhic meniului curent.
n fereastra Constructorului de meniuri, pe coloane, se specific
caracteristicile opiunilor, astfel:
1. Coloana Prompt cuprinde textele informative ale opiunilor n
care se pot introduce i combinaii speciale, prin intermediul
crora se obin diferite efecte:
Combinaia
\<

\-

Efect
Dac este plasat naintea unuia dintre caracterele irului
face ca acel caracter s fie folosit ca o tast pentru
selectarea direct a opiunii respective, atunci cnd
meniul este activat. Caracterul respectiv apare subliniat
n textul opiunii
Determin dezactivarea opiunii respective. Aceasta
apare pe ecran n culori terse, iar alegerea sa nu
declaneaz nici o aciune (chiar dac n cazul su au fost
specificate operaii de executat)
Trasarea unei bare delimitatoare ntre mai multe grupuri
de opiuni ale aceluiai submeniu

2. Coloana Result este destinat precizrii operaiunilor care


vor fi executate la selectarea acestora:
Submenu - activarea unui nou submeniu coninnd
propriul grup de opiuni. Coloana a treia va conine un
buton (Create sau Edit) la a crei acionare se va intra n
editarea submeniului respectiv;
Command - permite lansarea unei comenzi FoxPro
specificat n cmpul de editare din dreapta listei (coloana
a treia);
Procedure - executarea mai multor comenzi grupate
ntr-o procedur. Butonul din dreapta listei permite
intrarea n editarea procedurii respective.
3. Coloana a treia specific operaiunea de executat la alegerea
opiunii.
4. Coloana Options (opiuni) este utilizat pentru deschiderea
ferestrei de dialog Prompt Options, pentru specificarea unor
parametri suplimentari ai opiunii respective cum ar fi:

 Baze de date n Visual FoxPro

66

Shortcut (scurttur) - cale direct de alegere. Un


Shortcut conine:

o Cmpul de editare Key Label (etichet tast),


pentru a indica faptul c opiunea poate fi aleas
direct prin utilizarea unei combinaii de taste.
Combinaia de taste dorit este introdus n caseta
Key Label prin apsarea combinaiei de taste
respective.
o Cmpul Key Text (text tast) este un text
suplimentar ce poate fi ataat opiunii. n mod
implicit Visual FoxPro repet tastele de comand
rapid din caseta Key Label n caseta Key Text, dar
acesta poate fi modificat (de exemplu combinaia
CTRL+L poate fi modificat n ^L).
Skip For (srit cnd...) - permite impunerea unei
condiii prin care s se controleze accesul la o opiune. n
acest cmp este introdus o expresie logic. Dac
valoarea ei este adevrat, atunci opiunea va fi
dezactivat, deci nu va fi disponibila pentru utilizator (ea
apare cu culori terse, pentru a indica aceast stare).
Dac valoarea expresiei este fals, opiunea va putea fi
aleas de utilizator. De exemplu, pentru ca o opiune s

 Baze de date n Visual FoxPro

67

fie accesibil numai dac un fiier exist pe disc condiia


introdus poate fi: NOT(FILF(Furnizor.dbf)).
Message (mesaj) - are ca efect apariia unui mesaj
explicativ n bara de stare a Visual FoxPro-ului (plasat n
partea inferioar a ferestrei mediului de programare).

 5.3. Previzualizarea meniului


Este recomandabil ca, n faza de editare a unui meniu, s se
fac afiarea de prob a acestuia, chiar dac el nu a fost salvat sau
programul corespunztor nu a fost nc generat. Acest procedeu se
numete previzualizare. La previzualizare, alegerea unei opiuni a
meniului nu este nsoit de execuia comenzii corespunztoare, ci
doar de afiarea acesteia. Previzualizarea meniului n curs de editare
se realizeaz prin acionarea butonului de meniuri sau utiliznd
meniul principal al sistemului: Menu, Preview. n starea de
previzualizare, meniul sistemului este nlocuit de meniul n curs de
editare, iar pe ecran este afiat o fereastr care indic opiunea
selectat din acest meniu.

 5.4. Generarea i rularea meniurilor


Un meniu editat poate fi salvat ca un fiier cu extensia implicit
.MNX. Pentru a putea folosi meniul, trebuie generat un program la a
crui rulare meniul s fie activat. Aceast operaie poate fi realizat
din mediul Visual FoxPro: Menu, Generate... n fereastra deschis pe
ecran se precizeaz numele fiierului ce va fi generat:

n mod implicit, acesta are acelai nume cu cel al fiierului n


care este memorat meniul, dar extensia .MPR.
O dat generat meniul, acesta poate fi rulat printr-o comand

 Baze de date n Visual FoxPro

68

DO. Deoarece comanda DO presupune extensia implicit PRG (de la


programe), este necesar specificarea extensiei .MPR:
DO <meniu>.MPR

 Observaie

Revenirea la meniul standard al mediului de programare Visual


FoxPro se realizeaz prin comanda:
SET SYSMENU TO DEFAULT

Aplicaie
S se editeze un meniu pentru crearea i modificarea
structurii unui fiier ct i pentru editarea coninutului lui:

Indicaii

Se lanseaz Menu Designer.

Se editeaz opiunile meniului principal.

Opiunea Stop are asociat urmtoarea procedur:


Procedure
close all
set sysmenu to default

Se editeaz opiunea Fisier din meniu.

Se previzualizeaz, se genereaz i se ruleaz meniul creat.

 Baze de date n Visual FoxPro

69

6. Generarea rapoartelor

Raportul reprezint un set de informaii, constituite pe baza


datelor introduse anterior n bazele de date, care urmeaz a fi tiprit
la imprimant sau afiat pe display-ul calculatorului. Definirea unui
raport se realizeaz, ca i n cazul formularelor, prin utilizarea
tehnologiei POO (Programare Orientat Obiect) care permite
definirea i modificare proprietilor obiectelor introduse n raport.
Componenta Visual FoxPro-ului care permite crearea i
modificarea rapoartelor precum i generarea secvenei de cod
necesare pentru execuia acestora este Report Designer.

 6.1. Crearea i deschiderea unui raport


Crearea unui raport (fiier cu extensia implicit .FRX)
poate fi iniiat prin comanda:
CREATE REPORT [< nume raport>]
sau prin alegerea opiunii File, New din meniu (n acest caz n caseta
New se selecteaz Report i New file).

Activarea (deschiderea) unui raport se poate realiza prin


meniu (File, Open, Files of type: Report (*.frx)) sau prin comanda:
MODIFY REPORT < nume raport>

 Observaie

Prin lansarea Constructorului de rapoarte, n fereastra

 Baze de date n Visual FoxPro

70

Report Designer, meniul principal va include opiunea Report


care conine opiuni referitoare la diferite operaii.

 6.2. Imprimarea i afiarea rapoartelor


Un raport este un fiier n care sunt memorate elementele sale
precum i caracteristicile acestora. Imprimarea (Print) unui raport
poate fi realizat n unul din urmtoarele moduri:
din meniul principal (Report, Run Report),
prin acionarea butonului
de instrumente,

sau a butonului

din linia

prin comanda:

REPORT FORM <nume raport> TO PRINTER [PROMPT]


(clauza PROMPT este folosit pentru specificarea parametrilor
de tiprire)
Pentru afiarea sau previzualizarea (Preview) pe ecran se
poate utiliza:

butonul

din linia de instrumente standard,

comanda:
REPORT FORM <nume raport> PREVIEW

Vizualizarea informaiilor din raport se realizeaz utiliznd bara


utilitar de mai jos:
Pagina anterioar

Pagina urmtoare
Tiprire

Prima pagin

Ultima pagin

Selectare pagin

nchidere afiare

Scala de afiare

 Observaie
Se poate obine trimiterea raportului spre un fiier (n loc de
imprimant) cu ajutorul clauzei TO FILE a comenzii REPORT
FORM:
REPORT FORM <nume raport> TO FILE <fiier> [ASCII]

 Baze de date n Visual FoxPro

71

Clauza ASCII determin modul de scriere n fiier: n prezena


clauzei formatul fiierului va fi text, iar n absena acesteia formatul
va fi unul specific imprimantei (informaiile se depoziteaz n fiierul
respectiv, exact cum s-ar trimite la imprimant).

 6.3. Constructorul de rapoarte

Report Designer fereastra principal care conine obiectele


raportului.
Data Environment mediul de date al raportului, fereastra
pentru precizarea tabelelor de date care vor fi deschise automat n
momentul rulrii raportului.
Barele utilitare
o Report Designer Toolbar - bara de butoane standard a
raportului:
Data Grouping

Color Palette Toolbar


Layout Toolbar

Data Environment Report Controls

Butoanele
din
aceast
bar
de
instrumente
permit
deschiderea/nchiderea ferestrelor: Data Environment, Data Grouping
(gruparea datelor) sau a barelor de lucru:
o Report Control Toolbar butoanele de control;
o Color Palette Toolbar stabilirea atributelor de culoare;
o Layout Toolbar alinierea obiectelor n formular,
suprapunerea obiectelor, etc.

Sfat
Lucrai cu barele de instrumente asociate Constructorului de
rapoarte. Dac acestea nu sunt afiate utilizai meniul: View,
Toolbars

 Baze de date n Visual FoxPro

72

O dat pornit Constructorul de rapoarte, pe ecran este afiat


fereastra de editarea a raportului.
Un raport este constituit din benzi care nu redau exact ceea ce
va fi n raportul final, dar codific modul n care se determin ceea ce
se afieaz n raport. Un raport poate conine urmtoarele benzi:

Detail (detalii) genereaz rndurile de detalii (coninutul de


baz al raportului). Pentru un raport care preia datele dintr-o
tabel, banda de detalii a raportului ar putea corespunde
nregistrrilor tabelei;
Title (titlu) include o zon care se afieaz o singur dat, pe
prima pe pagin a raportului. Aceast band conine de obicei
titlul raportului i eventual, capul de tabel, dac acesta nu
trebuie repetat pe fiecare pagin n parte);
Summary (rezumat) - specific o zon care este afiat pe
ultima pagin a raportului, la sfrit, o singur dat;
Page Header (antet de pagin) - genereaz textul care va fi
afiat n partea superioar a fiecrei pagini a raportului;
Page Footer (subsol de pagin) - genereaz coninutul prii
inferioare a fiecrei pagini a raportului;
Group Header n (antetul grupului de nivel n) i Group Footer

 Baze de date n Visual FoxPro

73

n (subsolul grupului de nivel n) - genereaz n raportul final


mai multe grupuri, n funcie de nite valori numite chei de
grupare, putndu-se preciza coninutul benzii antet de grup,
respectiv subsol de grup;
Un raport conine cel puin trei benzi: antetul de pagin,
detaliile i subsolul de pagin. Dac se dorete inhibarea afirii lor,
trebuie reduse la dimensiunea zero (chiar dac apar n fereastra
raportului, nu genereaz nimic n raportul final). Benzile de titlu i de
concluzii sunt afiate opional, afiarea lor putnd fi validat sau
invalidat prin meniu: Report, Title/Summary.
Fiecare dintre aceste dou benzi are asociat un comutator, New
page (pagin nou), la activarea cruia banda corespunztoare va
ncepe pe pagin nou:

Mediul de date al raportului

Un raport preia date din una sau mai multe tabele i le


aranjeaz n pagin. Deci la construirea raportului este necesar
specificarea tabelelor surs. Mediul de date al unui raport se
configureaz n fereastra mediului de date deschis prin meniu: View,
Data Environment sau prin acionarea butonului corespunztor din
bara de instrumente standard a raportului. O dat deschis aceast
fereastr, la meniul sistemului este adugat un nou submeniu, numit
DataEnvironment, care conine opiuni referitoare la configurarea
mediului de date.

 Baze de date n Visual FoxPro

74

Fontul implicit al raportului

La construirea unui raport, trebuie stabilit ca font implicit cel


care predomin printre obiectele raportului, pentru celelalte obiecte
fontul urmnd a fi specificat explicit. Fiecrui obiect nou definit n
raport i va fi atribuit fontul implicit al raportului, care poate fi
schimbat ulterior.
Stabilirea fontului implicit al raportului se face prin meniu:
Report, Default Font, iar caracteristicile fontului sunt specificate n
caseta de dialog deschis pe ecran.

Tipuri de obiecte incluse n rapoarte

Editarea unui raport trebuie s nceap prin introducerea unor


obiecte
n acesta. Pentru aceasta, se acioneaz
butonul
corespunztor din Report Controls Toolbar i se selecteaz obiectul
care va fi inclus n raport:
Label

Field

Line

Rounded Rectangle

Rectangle

Picture/OLE
Bound Control

Label Texte informative.


Textele informative reprezint un ir de caractere de lungime
variabil. Pentru a stabili poziia textului informativ se poziioneaz
cursorul n punctul dorit din raport, dup care se execut clic cu
mouse-ul. Cnd se termin introducerea textului, se execut un clic n
afara obiectului nou creat.
Un obiect Label creat poate fi repoziionat, prin tragere cu
ajutorul mouse-ului, pe suprafaa raportului. Se pot efectua i trageri
dintr-o band n alta, nu numai n cadrul aceleiai benzi.
Fontul folosit la afiarea textului este stabilit n ferestrea Font,

 Baze de date n Visual FoxPro

75

care se deschide prin meniu: Format, Font.


Astfel,
pot
fi
specificate toate caracteristicile fontului: setul caractere (Font),
dimensiunea (Size), stilul (Font style), culoarea (Color), etc.

Field Cmpuri.
Cmpurile reprezint elementele variabile ale unui raport,
putnd genera n raportul final mai multe valori, valori care vor fi
determinate de sursa de date precizat: o variabil a raportului, o
expresie de calcul, un cmp al unui tabel de date. Caracteristicile
legate de fontul n care se realizeaz afiarea valorii din cmp se
stabilesc la fel ca pentru obiectele de tip Label.
Definirea caracteristicilor unui obiect de tip Field se realizeaz n
fereastra de dialog Report Expression (deschis prin dublu clic pe
obiect).
Poziia cmpului (Field position) relativ la banda din raport n
care este definit poate fi: Float (poziie variabil, n funcie de
obiectele definite deasupra lui), Fix relative to top of band (poziie
fix relativ la marginea superioar a benzii), Fix relative to bottom of
band (poziie fix relativ la latura inferioar a benzii).
n caseta Expression se nscrie expresia care va furniza
valoarea ce trebuie afiat. De multe ori, aceast expresie este un
simplu cmp al unei tabele surs sau o variabil de lucru.

76

 Baze de date n Visual FoxPro

Formatul de afiare al cmpului (caseta Format) reprezint un


ir de caractere (macheta de formatare). Acest format se poate stabili
i n mod interactiv, prin acionarea butonului din dreapta casetei,
care determin deschiderea ferestrei Format.
Asupra valorilor asociate obiectelor Field se pot aplica diferite
funcii pentru a obine unele informaii sintetice: suma (Sum), media
aritmetic (Average), valoarea maxim i minim (Highest, Lowest),
deviaia standard (Standard deviation), variana (Variance). Funcia
care se aplic asupra unui cmp al unui raport este precizat n
fereastra de dialog Calculate Field, deschis prin acionarea
butonului Calculations:

Obiecte semigrafice i grafice.


n cadrul unui raport pot fi desenate linii, chenare sau pot fi
introduse imagini. n legtur cu aceste obiecte pot fi precizate
anumite caracteristici cum ar fi Pen (peni) Format Pen, Fill
(umplere) Format Fill, etc.

 Baze de date n Visual FoxPro

77

Aplicaie
10 S se creeze tabelulul de date, mfix.dbf

avnd structura:

Denumirea mijlocului fix DENUMIRE


Valoarea de inventar
VALINV
Valoarea amortizat
VALAMOR

20

C 30
N 10
N 10

S se genereze, pe baza tabelului de date definit anterior

urmtorul raport:

Indicaii

Se lanseaz Constructorul de rapoarte.

n mediul de date al raportului se introduce tabelul de date definit


anterior.

Se includ n raport obiectele necesare i anume:


o

n banda Page Header:

textele informative (denumirea raportului, capul de


tabel),

elementele semigrafice (linii, chenare),

cmpul care furnizeaz data calendaristic.

 Baze de date n Visual FoxPro

78

n banda Detail se trag, cu mouse-ul, din mediul de date


al raportului, cmpurile: denumire, valinv, valamor.

n banda Summary se introduc cmpurile valinv,


valamor. Pentru ca acestea s afieze valori totalizatoare
se execut cte un dublu clic pe ele pentru a deschide
fereastra Report Expresion. Aici, se acioneaz butonul
Calculations i se selecteaz funcia Sum.

30 S se previzualizeze i s se salveze raportul editat.

7. Crearea i editarea proiectelor

Proiectul reprezint un fiier cu extensia implicit .PJX care


permite gruparea ntr-o form unitar a componentelor unui sistem
informatic cum ar fi baze de date, tabele, programe, formulare,
meniuri, rapoarte, interogri etc., pentru a ine evidena acestora.
Proiectarea unei aplicaii nseamn, n general, crearea unui fiier
proiect la care sunt adugate pe rnd componentele sale. Mediul de
programare Visual FoxPro permite ca toate operaiile care se
efectueaz asupra elementului unui proiect s poat fi declanate din

 Baze de date n Visual FoxPro

79

interiorul proiectului, prin intermediul resursei numit Gestionar de


proiecte.
Prin generarea proiectelor se creeaz posibilitatea desfurrii
unor serii de operaii care permit:
o actualizarea automat a proiectului, atunci cnd ntre forma
surs i cea compilat se constat desincronizri;
o crearea fiierelor de aplicaii i a programelor executabile.

 7.1. Crearea i deschiderea unui proiect


Crearea
comanda:

sau

deschiderea

unui

proiect

este

declanat

prin

MODIFY PROJECT [< nume proiect>]


sau prin alegerea opiunii File, New din meniu (n acest caz n caseta
New se selecteaz Project i New file). Astfel este deschis fereastra
Gestionarului de proiecte:

 Baze de date n Visual FoxPro

80

Fereastra include o list cu elementele componente ale


proiectului, grupate pe categorii (aceste categorii apar i n paginile
alternative ale ferestrei):
Categoria

Tipul elementului
-

baze de date
tabele izolate
interogri

formulare
rapoarte
etichete

programe
biblioteci API
aplicaii

 Baze de date n Visual FoxPro

81

meniuri
fiiere text
alte tipuri de
fiiere

 7.2. Editarea proiectelor


Editarea proiectelor este realizat cu ajutorul grupului de
butoane din partea dreapt a ferestrei Project Manager. Astfel, dup
selectarea din categoria sa a tipului elementului se acioneaz unul
din butoanele:
o New - adugarea unui element nou la proiect (va fi pornit
Constructorul asociat tipului de element specificat).
o Add - dac elementul este deja creat i trebuie doar adugat la
proiect. Din fereastra de dialog deschis pe ecran se selecteaz
fiierul corespunztor.
o Modify - editarea (modificarea) unui element al proiectului (din
Gestionarul de proiecte se pornete direct Constructorul asociat
unui anumit tip de element).
o Run - rularea unui element (program, formular, meniu etc.).
o Remove - eliminarea unui element din proiect din lista
Gestionarului de proiecte (nlturarea unui element dintr-un
proiect nu nseamn i tergerea fizic a acestuia de pe disc, ci
doar tergerea
indicatorului
corespunztor
din
tabela
proiectului).
o Build (construire) - compilarea componentelor prin stabilirea
unor opiuni:
Compilarea elementelor unui proiect are ca efect crearea a
dou tipuri de fiiere:
fiiere de tip aplicaie care pot fi rulate direct, sub
controlul mediului de programare (Build Application);
fiiere executabile independent de mediul Visual FoxPro
(Build Executable).

 Baze de date n Visual FoxPro

82

Vor fi compilate componentele noi sau cele care au suferit


modificri de la ultima lor compilare. Pot fi recompilare toate
componentele proiectului, atunci cnd se activeaz comutatorul
Recompile All Files din seciunea Options.

 7.3. Generarea fiierelor aplicaie


Aplicaiile reprezint o forma a proiectului, generat ntr-un
singur fiier, de tip aplicaie, care poate fi executat direct de sistem
i care conine programele, formularele, rapoartele
i celelalte
elemente ale proiectului. Acest fiier are extensia implicit .APP.

Stabilirea fiierelor modificabile

Din punctul de vedere al incorporrii efective n fiierul


aplicaie, elementele unui proiect se mpart n dou grupe:
o fiiere incluse (elemente care fac parte din proiect i sunt
incluse n fiierul aplicaie);
o fiiere excluse (elemente care fac parte din proiect, dar nu
sunt incluse n fiierul aplicaie).
Fiierele excluse au n stnga numelor lor simbolul :

 Baze de date n Visual FoxPro

83

Marcarea unui fiier ca exclus (inclus) se realizeaz prin


meniu: Project, Exclude (Include).
Fiierele incluse n proiect sunt asamblate ntr-un singur fiier
aplicaie. Dup generarea proiectului, fiierele marcate ca incluse
sunt protejate la scriere. Unele fiiere care fac parte dintr-un proiect,
cum ar fi tabelele, pot fi modificate de ctre de utilizator. n acest
caz, fiierele trebuie adugate la proiect, dar vor fi marcate ca
excluse. Fiierele excluse sunt parte a proiectului, dar ele nu sunt
compilate n fiierul aplicaie, aa nct se pot actualiza la utilizare.

 Observaie
n mod implicit, tabelele sunt marcate ca excluse, deoarece
Visual FoxPro presupune c acestea vor fi modificate n cadrul
aplicaiei. Ca regul general, elementele unui proiect care au
ca rezultat generarea de cod (formulare, rapoarte, interogri,
meniuri i programe) trebuie incluse n fiierul aplicaie, pe
cnd fiierele de date trebuie excluse. Stabilirea fiierelor
incluse, respectiv excluse, se realizeaz pe baza cerinelor
aplicaiei. De pild, o tabel care cuprinde informaii de sistem
importante sau informaii folosite pentru cutare pot fi incluse
n fiierul aplicaie pentru a le proteja mpotriva modificrilor
neavenite. Invers, un fiier raport (.frx) poate fi exclus pentru a
permite modificarea lui dinamic n timpul rulrii.

 Baze de date n Visual FoxPro

84

Punctul de pornire al aplicaiei

nainte de executarea unei aplicaii trebuie stabilit fiierul


principal al acesteia, adic acea component care va fi lansat atunci
cnd se execut comanda de rulare a aplicaiei. Stabilirea fiierului
principal (program, formular, meniu) se face prin selectarea acestuia
din lista Gestionarului de proiecte i alegerea opiunii Set Main a
meniului Project. n list, programul principal va fi afiat cu caractere
aldine:

 Observaie
Fiierul desemnat ca fiier principal al aplicaiei este marcat ca
parte a proiectului, astfel c dup compilarea aplicaiei el va fi
protejat la scriere (read-only). ntr-un proiect nu poate exista
dect un singur fiier principal.

Rularea unei aplicaii

O aplicaie poate fi rulat dac este activat comutatorul Run


After Build din fereastra Build Options sau prin comanda Do (n acest
caz este necesar precizarea explicit a extensiei fiierului):
DO <nume aplicaie>.APP

 7.4. Generarea fiierelor executabile


Prin facilitatea de construire a programelor executabile se
obine o independen a programelor fa de mediul Visual FoxPro i
distribuirea lor independent. Generarea unui fiier executabil (Build

 Baze de date n Visual FoxPro

85

Executable) pe baza unui proiect se face la fel ca n cazul aplicaiei,


fiind necesar construirea proiectului corespunztor n care trebuie
introduse toate elementele acestuia (fiierele incluse i excluse,
fiierul principal).
Un fiier executabil (cu extensia .EXE) poate fi rulat
independent de mediul Visual FoxPro, fiind totui necesare o serie de
biblioteci de proceduri ale sistemului, acesta funcionnd n cooperare
cu dou biblioteci de legturi dinamice - Vfp6r.dll (rVfp500.dll n
Visual FoxPro 5) i Vfp6enu.dll - care trebuie asociate aplicaiei
pentru a oferi un mediu Visual FoxPro complet i coerent.

Controlul ciclului de evenimente

Controlul ciclului de evenimente se refer la prelucrarea


evenimentelor generate de utilizator, cum ar fi clicurile de mouse i
apsrile de taste i este realizat prin comenzile:
READ EVENTS i CLEAR EVENTS
Plasarea corect a comenzii READ EVENTS n cadrul fiierului
principal prezint importan, deoarece prelucrarea datelor n fiierul
principal este oprit din momentul executrii comenzii READ EVENTS
pn la lansarea unei comenzi CLEAR EVENTS. Astfel se poate lansa
READ EVENTS ca ultim comand ntr-o procedur de iniializare,
executat dup ce mediul de dezvoltare a fost iniializat i interfaa cu
utilizatorul a fost afiat. Dac nu se include comanda READ EVENTS,
dup rulare, aplicaia va returna controlul sistemului de operare
(aplicaia va fi rulat corect din fereastra Command a mediului de
dezvoltare, n schimb, dac ea va fi lansat independent de mediul
Visual FoxPro, aplicaia va aprea pentru scurt timp, apoi va disprea
de pe ecran). De asemenea, aplicaia trebuie s ofere o modalitate de
a ncheia ciclul de evenimente.
Comanda CLEAR EVENTS suspend prelucrarea evenimentelor
de ctre Visual FoxPro i cedeaz controlul ctre programul care a
lansat comanda READ EVENTS ce a declanat ciclul de evenimente.

 Baze de date n Visual FoxPro

86

Sfaturi
Includei comanda READ EVENTS n fiierul principal. Dac
acesta este
o un formular: n metoda Activate Event;
o un meniu: n procedura Cleanup (meniu: View, General
Options).
Asigurai-v c interfaa are un mecanism (cum ar fi un
buton Exit sau o comand de meniu) pentru a lansa
comanda CLEAR EVENTS.

Rularea unui fiier executabil

Un fiier .EXE poate fi rulat dac este activat comutatorul Run


After Build din fereastra Build Options sau prin comanda Do:
DO <nume aplicaie>.EXE

Aplicaie
10 S se editeze un proiect, pentru evidena studenilor nscrii
la o facultate care s includ:
a) fiierul INSCRISI.DBF cu structura:

Numr legitimaie
Numele candidatului
Nota proba 1
Nota proba 2
Media

LEG
NUME
N1
N2
Media

N3
C 15
N 5,2
N 5,2
N 5,2

b) urmtorul meniu (marcat ca fiier principal):

c) un formular, pentru actualizarea tabelului de date (opiunea


Fisier, Actualizare);

 Baze de date n Visual FoxPro

87

d) un raport (Report), pentru listarea tabelului de date


(opiunea Fisier, Listare);
e) O interogarea (Query), pentru afiarea, n ordine
descresctoarea, a notelor obinute la proba 1 (opiunea Note,
Note proba 1);
f) O interogarea, pentru afiarea, n ordine descresctoarea, a
notelor obinute la proba 2 (opiunea Note, Note proba 2);
g) O interogare
pentru afiarea descendent a mediilor
candidailor admii (opiunea Note, Media);
20 S se genereze i s se ruleze fiierul aplicaie.

) Indicaie

Se va include comanda SET SYSMENU TO DEFAULT n procedura


ataat opiunii Iesire

30 S se genereze i s se ruleze fiierul executabil.

) Indicaii

a) Se va include comanda READ EVENTS n procedura


Cleanup asociat meniului (View, General Options).
b) Se va include comanda CLEAR EVENTS n procedura ataat
opiunii Iesire