Sunteți pe pagina 1din 123

1

Baze de date




UNIVERSITATEA TEHNIC DE CONSTRUCII
BUCURETI

Catedra de Matematic i Informatic





Bazele Informaticii
i
Limbaje de Programare

Partea a II-a

Note de curs











Romic TRANDAFIR Mihai tefan NISTORESCU



Bucureti
2006

Cuprins
2



Cuprins
Cuprins................................................................................................................................................. 1
1. Bnci i baze de date........................................................................................................................ 4
1.1. Notiuni generale........................................................................................................................ 4
1.2. Sisteme de baze de date ............................................................................................................ 5
1.3. Nivelul de organizare a datelor ntr-o baz de date .................................................................. 6
1.4. Modelarea la nivel logic a datelor ntr-o baz de date .............................................................. 6
1.5. Conceptul de sistem de gestiune a bazelor de date ................................................................... 8
1.5.1. Activitile asigurate de SGBD.......................................................................................... 9
1.5.2. Obiectivele unui SGBD ..................................................................................................... 9
1.5.3. Funciile unui SGBD........................................................................................................ 11
2. Etapele de realizare a unei bnci de date ....................................................................................... 13
2.1. Etapa de analiz ...................................................................................................................... 13
2.2. Etapa de programare ............................................................................................................... 13
2.3. Punerea n funciune i exploatarea bazei de date................................................................... 13
2.4. Documentaia aplicaiei........................................................................................................... 15
3. Sisteme de gestiune a bazelor de date relaionale SGBDR......................................................... 16
3.1. Modelul relaional al datelor ................................................................................................... 16
3.1.1. Structura relaional a datelor .......................................................................................... 16
3.1.2. Operaii n algebra relaional.......................................................................................... 17
3.1.3. Optimizarea cererilor de date........................................................................................... 18
3.2. Regulile lui Codd .................................................................................................................... 19
3.3. Normalizarea datelor............................................................................................................... 21
3.4. Cerinele minimale de definire a SGBDR............................................................................... 22
4. Componentele funcionale ale sistemului Visual FoxPro.............................................................. 23
4.1. Programarea orientat pe obiecte............................................................................................ 23
4.2. Arhitectura VFP 6.0................................................................................................................ 24
4.3. Modurile de lucru n VFP ....................................................................................................... 26
4.3.1. Modul de lucru meniu sistem........................................................................................... 27
4.3.2. Modul de lucru prin comenzi ........................................................................................... 30
5. Organizarea datelor nVisual FoxPro............................................................................................. 31
5.1. Manipularea bazei de date i a tabelelor n VFP..................................................................... 31
5.1.1. Crearea bazei de date ....................................................................................................... 31
5.1.2. Crearea tabelelor .............................................................................................................. 32
5.2. Deschiderea bazei de date/tabelei ........................................................................................... 36
5.3. Consultarea i modificarea bazei de date/tabelei .................................................................... 37
5.3.1. Modificarea structurii de date a tabelelor- modul asistat ................................................. 37
5.3.2. Deplasri n tabel. Cutri secveniale............................................................................. 39
5.4. nchiderea bazei de date sau a tabelei ..................................................................................... 40
6. Utilizarea asistentului Wizard n VFP ........................................................................................... 41
6.1. Table Wizard........................................................................................................................... 41
6.2. Report Wizard......................................................................................................................... 42
6.3. Label Wizard........................................................................................................................... 44
6.4. Query Wizard.......................................................................................................................... 44
6.5. Mail Merge Wizard................................................................................................................. 45
6.6. Editorul de texte n VFP 6.0.................................................................................................... 46
7. Elemente ale limbajului propriu Visual FoxPro 6.0 ...................................................................... 48
7.1. Simboluri................................................................................................................................. 48
3
Baze de date


7.2. Variabile de sistem.................................................................................................................. 48
7.3. Comentariul............................................................................................................................. 48
7.4. Tipuri de date, operaii i funcii............................................................................................. 48
7.4.1. Date de tip numeric. Funcii aritmetice i financiare....................................................... 51
7.4.2. Aplicaii ale funciilor financiare ..................................................................................... 52
7.4.3. Date i funcii de tip caracter ........................................................................................... 55
7.4.4. Date i funcii de tip calendaristic.................................................................................... 56
7.4.5. Date de tip memo............................................................................................................. 58
7.5. Variabile i masive.................................................................................................................. 58
7.5.1. Variabile........................................................................................................................... 58
7.5.2. Macro substituia.............................................................................................................. 59
7.5.3. Masive de date: vectori i matrici .................................................................................... 60
7.6. Declararea i utilizarea vectorilor i matricelor ...................................................................... 60
7.7. Funcii de prelucrare a masivelor............................................................................................ 61
8. Accesul i actualizarea datelor....................................................................................................... 64
8.1. Manipularea structurii unei tabele........................................................................................... 64
8.3. Accesul la date ........................................................................................................................ 65
8.2. Actualizarea datelor ................................................................................................................ 69
8.2.1. Adgarea de noi nregistrri............................................................................................. 69
8.2.2. Modificarea nregistrrilor ............................................................................................... 73
8.2.3. tergerea nregistrrilor.................................................................................................... 76
8.4. Ordonarea datelor.................................................................................................................... 81
9. Programarea procedural ............................................................................................................... 87
9.1. Programarea structurat .......................................................................................................... 87
9.1.1. Structura liniar................................................................................................................ 88
9.1.2. Structura alternativ ......................................................................................................... 91
9.1.3. Structura repetitiv........................................................................................................... 93
9.2. Modularizarea programelor..................................................................................................... 96
9.2.1. Proceduri .......................................................................................................................... 97
9.2.2. Funcii .............................................................................................................................. 98
10. Comenzi ale nucleului SQL....................................................................................................... 101
11. Proiectarea meniurilor i a barelor de instrumente .................................................................... 112
12. Aplicaie..................................................................................................................................... 113
Aplicaii laborator ............................................................................................................................ 117
1. Modificarea structurii unui fiier ............................................................................................. 117
2. Adresarea prin macrosubstituie............................................................................................... 118
3. Crearea unui meniu.................................................................................................................. 118
Anexa ............................................................................................................................................... 120
Bibliografie ...................................................................................................................................... 123

1. Bnci i baze de date
4



1. Bnci i baze de date

1.1. Notiuni generale

O baz de date reprezint un ansamblu de date integrat, anume structurat i dotat cu o descriere
a acestei structuri. Descrierea structurii poart numele de dicionar de date sau metadate i creaz o
interdependen ntre datele propriu-zise i programe.

Baza de date poate fi privit ca o colecie de fiiere interconectate care conin nucleul de date
necesare unui sistem informatic. Astfel, poate fi considerat drept un model al unor aspecte ale
realitii unei uniti economice, modelat prin intermediul datelor. Diferitele obiecte din cadrul
realitii ce prezint interes sunt denumite clase sau entiti. Pentru aceste obiecte sunt achiziionate
i memorate date referitoare la diferite caracteristici (atribute). Baza de date se constituie ca un
ansamblu intercorelat de colecii de date, prin care se realizeaz reprezentarea unei realiti.

Datele constituie orice mesaj primit de un receptor, sub o anumt form.

Informaiile reprezint cantitatea de noutate adus de un mesaj din exterior (realitate).

Un fiier este un ansamblu de nregistrri fizice, omogene din punct de vedere al coninutului
i al prelucrrii.

O nregistrare fizic este o unitate de transfer ntre memoria intern i cea extern a
calculatorului.

O nregistrare logic este unitatea de prelucrare din punct de vedere al programului utilizator.
O nregistrare se compune din cmpuri (atribute) care descriu anumite aspecte ale realitii.

Cmpurile sunt nregistrri logice.
O baza de date trebuie s asigure:
abstractizarea datelor (baza de date fiind un model al realitii),
5
Baze de date


integrarea datelor (baza de date este un ansamblu de colecii de date intercorelate, cu
redundan controlat),
integritatea datelor (se refer la corectitudinea datelor ncrcate i manipulate astfel
nct s se respecte restriciile de integritate),
securitatea datelor (limitarea accesului la baza de date),
partajarea datelor (datele pot fi accesate de mai muli utilizatori, eventual n acelai
timp),
independena datelor (organizarea datelor s fie transparent pentru utilizatori,
modificrile n baza de date s nu afecteze programele de aplicaii).

1.2. Sisteme de baze de date

Sistemele de baze de date sau bncile de date reprezint un sistem de organizare i prelucrare,
respectiv teleprelucrare (prelucrare la distan) a informaiei, constituit din urmtoarele 3 elemente:
colecie de date aflate n interdependen
creare baza
de date
descrierea datelor i a relaiilor dintre ele
un sistem de programe care asigur exploatarea bazei de date (actualizare, interogare)

Arhitectura sistemului de baza de date este format din urmtoarele componente (fig.1):
baza/bazele de date reprezint componenta de tip date a sistemului (coleciile de date
propriu-zise, indecii);
sistemul de gestiune a bazei/bazelor de date ansamblul de programe prin care se asigur
gestionarea i prelucrarea complex a datelor i care reprezint componenta software a
sistemului de baze de date (Sistem de Gestiune a Bazelor de Date SGBD);
alte componente proceduri manuale sau automate, inclusiv reglementri administrative,
destinate bunei funcionri a sistemului, dicionarul bazei de date (metabaza de date) care
conine informaii despre date, structura acestora, elemente de descriere a semanticii,
statistici, documentaii, mijloacele hardware utilizate, personalul implicat.





APLICAII
UTILIZATORI
SGBD
BAZA DE
DATE
ALTE ELEMENTE
Fig. 1
1. Bnci i baze de date
6


1.3. Nivelul de organizare a datelor ntr-o baz de date

Datele dintr-o baz de date pot fi structurate pe 3 niveluri, n funcie de categoria de personal
implicat:
nivelul conceptual (global) exprim viziunea administratorului bazei de date asupra datelor.
Acestui nivel i corespunde structura conceptual (schema) a bazei de date, prin care se
realizeaz o descriere a tuturor datelor, ntr-un mod independent de aplicaii, ce face posibil
administrarea datelor.
nivelul logic exprim viziunea programatorului de aplicaie asupra datelor. La acest nivel
se realizeaz o descriere a datelor corespunztoare unui anumit program de aplicaie.
nivelul fizic care exprim viziunea inginerului de sistem asupra datelor. Corespunde
schemei interne a bazei de date prin care se realizeaz o descriere a datelor pe suport fizic de
memorie.

1.4. Modelarea la nivel logic a datelor ntr-o baz de date

Modelul de date reprezint ansamblul de concepte i instrumente necesare pentru a construi o
schem a bazei de date. Modelarea datelor poate viza totalitatea datelor din cadrul bazei de date
(schema/arhitectura datelor) sau o parte a acestora (subscheme ale bazei de date). Schema i
subschema bazei de date sunt modelele logice ale bazei de date, care au asociate principii generale
pentru gestionarea/definirea (structurarea) datelor, manipularea i asigurarea integritii datelor, fr
a reflecta modul de reprezentare i stocare a acestor date pe suportul de memorie (care sunt
atributele modelului fizic).
Se cunosc mai multe tipuri de baze de date dup modul de organizare, modul de dispunere pe
suport magnetic a informaiei i a elementelor componente:
modele primitive datele sunt organizate la nivel logic n fiiere, structura de baz este
nregistrarea, mai multe nregistrri fiind grupate n structuri de tip fiier;
baze de date ierarhice legturile dintre date sunt ordonate unic, accesul se face numai prin
vrful ierarhiei, un subordonat nu poate avea dect un singur superior direct i nu se poate
ajunge la el dect pe o singur cale;
baze de date n reea datele sunt reprezentate ca ntr-o mulime de ierarhii, n care un
membru al ei poate avea orici superiori, iar la un subordonat se poate ajunge pe mai multe
ci;
7
Baze de date


baze de date relaionale structura de baz a datelor este aceea de relaie tabel, limbajul
SQL (Structured Query Language) este specializat n comenzi de manipulare la nivel de
tabel. Termenul relaional a fost introdus de un cercettor al firmei IBM dr. E. F. Codd n
1969 cel care a enunat cele 13 reguli de baz necesare pentru definerea unei baze de date
relaionale. Baza de date relaional reprezint o mulime structurat de date, accesibile prin
calculator, care pot satisface n timp minim i ntr-o manier selectiv mai muli utilizatori.
Aceast mulime de date modeleaz un sistem sau un proces din lumea real i servete ca
suport unei aplicaii informatice;
baze de date distribuite sunt rezultatul integrrii tehnologiei bazelor de date cu cea a
reelelor de calculatoare. Sunt baze de date logic integrate, dar fizic distribuite pe mai multe
sisteme de calcul. Integrarea bazei de date distribuite se face cu ajutorul celor 3 tipuri de de
scheme care sunt implementate:
1. schema global definete i descrie toate informaiile din baza de date distribuit n
reea;
2. schema de fragmentare descrie legturile dintre o colecie global i fragmentele
sale. Ea este de tipul unu la mai muli i are forma unei ierarhii;
3. schema de alocare descrie modul de distribuire a segmentelor pe calculatoarele
(nodurile) din reea. Fiecare segment va avea o alocare fizic pe unul sau mai multe
calculatoare. Schema de alocare introduce o redundan minim i controlat: un
anumit segment se poate regsi fizic pe mai multe calculatoare.
Utilizatorul unei asemenea baza de date o vede ca pe o baz de date unic, compact (nivel logic),
cu toate c n realitate ea este distribuit pe mai multe calculatoare legate n reea (nivel fizic).
Aceast organizare a dus la o cretere substanial a vitezei de acces la o baz de date ntr-o reea de
calculatoare. Anumite date stocate pe un server local sunt mult mai rapid accesate dect dac ele s-
ar afla pe un server la distan, unde baza de date ar fi fost stocat n ntregime (nedistribuit);
modele semantice orientate spre obiecte. Aceste modele sunt orientate pe reprezentarea
semnificaiei datelor. Structura de baz folosit pentru reprezentarea datelor este cea de clas
de obiecte definit prin abstractizare din entitatea fizic pe care o regsim n lumea real.
Aici exist entiti simple i clase de entiti care se reprezint prin obiecte simple sau clase
de obiecte, ordonate n ierarhii de clase i subclase. Acest tip de baz de date a aprut din
necesitatea gestionrii obiectelor complexe: texte, grafice, hri, imagini, sunete (aplicaii
multimedia) i a gestionrii obiectelor dinamice: programe, simulri.

1. Bnci i baze de date
8


1.5. Conceptul de sistem de gestiune a bazelor de date

Sistemele de gestiune a bazalor de date (SGBD) sunt sisteme informatice specializate n
stocarea i prelucrarea unui volum mare de date, numrul prelucrrilor fiind relativ mic.
Termenul de baz de date se va referi la datele de prelucrat, la modul de organizare a acestora pe
suportul fizic de memorare, iar termenul de gestiune va semnifica totalitatea operaiilor ce se aplic
asupra datelor din baza de date.

Un SGBD trebuie s asigure urmtoarele funcii:
definirea crearea bazei de date;
introducerea (adugarea) datelor n baza de date;
modificarea unor date deja existente n baza de date;
tergerea datelor din baza de date;
consultarea bazei de date interogare/extragerea datelor.

n plus un SGBD mai asigur i alte servicii:
suport pentru limbaj de programare;
interfa ct mai atractiv pentru comunicare cu utilizatorul;
tehnici avansate de memorare, organizare, accesare a datelor din baza de date;
utilitare ncorporate: sistem de gestiune a fiierelor, liste, tabele etc.;
help pentru ajutarea utilizatorului n lucrul cu baza de date.

Apariia i rspndirea reelelor de calculatoare a dus la dezvoltarea SGBD-urilor n direcia
multiuser: mai muli utilizatori folosesc simultan aceeai baz de date.
Principalul avantaj al reelelor a fost eficiena mult sporit de utilizare a resurselor sistemelor de
calcul: la o baz de date aflat pe un server central au acces simultan mai muli utilizatori, situai la
distan de server, de unde rezult o bun utilizare a resurselor server-ului i o economie de
memorie datorat memorrii unice a bazei de date.
Un SGBD este dotat cu un limbaj neprocedural de interogare a bazei de date SQL care permite
accesul rapid i comod la datele stocate n baza de date.
n arhitectura unui sistem de baze de date SGBD ocup locul central.
Un SGBD este un ansamblu complex de programe care asigur interfaa ntre o baz de date i
utilizatorii acesteia. SGBD este componenta software a unui sistem de baze de date care
9
Baze de date


interacioneaz cu toate celelalte componente ale acestuia asigurnd legtura i interdependena
ntre ele.

1.5.1. Activitile asigurate de SGBD

Un SGBD trebuie s asigure urmtoarele activiti:
definirea i descrierea structurii bazei de date se realizeaz printr-un limbaj propriu, limbaj
de definire a datelor (LDD), conform unui anumit model de date;
ncrcarea datelor n baza de date se realizeaz prin comenzi n limbaj propriu, limbaj de
manipulare a datelor (LMD);
accesul la date se realizeaz prin comenzi specifice din limbajul de manipulare a datelor.
Accesul la date se refer la operaiile de interogare i actualizare.

Interogarea este complex i presupune vizualizarea, consultarea, editarea de situaii de
ieire (rapoarte, liste, regsiri punctuale).
Actualizarea presupune 3 operaiuni: adugare, modificare efectuate prin respectarea
restriciilor de integritate ale BD i tergere;
ntreinerea bazei de date se realizeaz prin utilitare proprii ale SGBD;
reorganizarea bazei de date se face prin faciliti privind actualizarea structurii de date i
modificarea strategiei de acces. Se execut de ctre administratorul bazei de date;
securitatea datelor se refer la asigurarea confidenialitii datelor prin autorizarea i
controlul accesului la date, criptarea datelor.

1.5.2. Obiectivele unui SGBD

Un SGBD are rolul de a furniza suportul software complet pentru dezvoltarea de aplicaii
informatice cu baze de date.
El trebuie s asigure:
minimizarea costului de prelucrare a datelor,
reducerea timpului de rspuns,
flexibilitatea aplicaiilor i
protecia datelor.

Pentru satisfacerea performanelor enumerate, SGBD trebuie s asigure un minim de obiective.
1. Bnci i baze de date
10


1. Asigurarea independenei datelor trebuie privit din dou puncte de vedere:
independena logic se refer la posibilitatea adgrii de noi tipuri de nregistrri de date
sau extinderea structurii conceptuale, fr a determina rescrierea programelor de
aplicaie;
independena fizic modificarea tehnicilor fizice de memorare fr a determina rescrierea
programelor de aplicaie.
2. Asigurarea redundanei minime i controlate a datelor stocarea informaiilor n bazele de
date se face astfel nct datele s nu fie multiplicate. Totui, pentru a mbunti
performanele legate de timpul de rspuns, se accept o anumit redundan a datelor,
controlat, pentru a asigura coerena bazei de date i eficiena utilizrii resurselor
hardware.
3. Asigurarea facilitilor de utilizare a datelor presupune ca SGBD-ul s aib anumite
componente specializate pentru:
folosirea datelor de ctre mai muli utilizatori n diferite aplicaii datele de la o aplicaie
trebuie s poat fi utilizate i n alte aplicaii.
accesul ct mai simplu al utilizatorilor la date fr ca ei s fie nevoii s cunoasc
structura ntregii baze de date; aceast sarcin cade n seama administratorului bazei de date.
existena unor limbaje performante de regsire a datelor care permit exprimarea
interactiv a unor cereri de regsire a datelor.
sistemul de gestiune trebuie s ofere posibilitatea unui acces multicriterial la informaiile
din baza de date spre deosebire de sistemul clasic de prelucrare pe fiiere unde exist un
singur criteriu de adresare, cel care a stat la baza organizrii fiierului.
4. Asigurarea securitii datelor mpotriva accesului neautorizat.
5. Asigurarea coerenei i integritii datelor mpotriva unor tergeri intenionate sau
neintenionate se realizeaz prin intermediul unor proceduri de validare, a unor protocoale
de control concurent i a unor proceduri de refacere a bazei de date.
6. Asigurarea partajabilitii datelor se refer pe de o parte la asigurarea accesului mai
multor utilizatori la aceleai date i de asemenea la posibilitatea dezvoltrii unor aplicaii
fr a se modifica structura bazei de date.
7. Asigurarea legturilor ntre date corespund asocierilor care se pot realiza ntre obiectele
unei aplicaii informatice. Orice SGBD trebuie s permit definirea i descrierea structurii
de date, precum i a legturilor dintre acestea, conform unui model de date (de exemplu
modelul relaional).
11
Baze de date


8. Administrarea i controlul datelor sunt asigurate de SGBD, n sensul c datele pot fi
folosite de mai muli utilizatori n acelai timp, iar utilizatorii pot avea cerine diferite i care
pot fi incompatibile. SGBD trebuie s rezolve probleme legate de concuren la date,
problem care apare mai ales n lucrul n mediu de reea de calculatoare.

1.5.3. Funciile unui SGBD

Evideniem urmtoarele funcii ale unui SGBD.
funcia de descriere a datelor se face cu ajutorul LDD, realizndu-se descrierea
atributelor din cadrul structurii BD, legturile dintre entitile BD, se definesc eventualele
criterii de validare a datelor, metode de acces la date, integritatea datelor. Concretizarea
acestei funcii este schema BD.
funcia de manipulare este cea mai complex i realizeaz actualizarea i regsirea
datelor.
funcia de utilizare asigur mulimea interfeelor necesare pentru comunicare a tuturor
utilizatorilor cu BD.
Categorii de utilizatori:
neinformaticieni beneficiarii informaiei, nu trebuie s cunoasc structura BD, nu trebuie s
programeze aplicaii ci doar s le foloseasc prin intermediul unei interfee suficient de prietenoase.
informaticieni creaz structura BD i realizeaz procedurile complexe de exploatare a BD;
administratorul bazei de date utilizator special, cu rol hotrtor n funcionarea optim a
ntregului sistem.
funcia de administrare administratorul este cel care realizeaz schema conceptual a
bazei de date, iar n perioada de exploatare a BD autorizeaz accesul la date, reface baza n
caz de incident.
funcia de protecie a bazei de date ansamblul de msuri necesare pentru asigurarea
integritii (semantic, acces concurent, salvare/restaurare) i securitii datelor (autorizare
acces, utilizare viziuni, criptare).






1. Bnci i baze de date
12


















UTILIZATORI
FUNCIILE
SGBD
ADMINISTRARE DESCRIERE MANIPULARE
UTILIZARE
BAZA DE
DATE
Fig.2
13
Baze de date



2. Etapele de realizare a unei bnci de date

2.1. Etapa de analiz

1. Studierea problemei de rezolvat - const din studiul i descrierea activitilor pentru care se
va organiza baza de date (cerine i resurse);
2. Proiectarea structurii bazei de date - are ca principale activiti alegerea modelului de
SGBD, proiectarea funciilor bazei de date, stabilirea intrrilor i ieirilor aplicaiilor;
3. Stabilirea modului de memorare a datelor n memorie (temporare) sau pe disc n baza de
date, pentru care trebuie stabilit i structura;
4. Stabilirea algoritmului general de rezolvare a problemei la nivel de schem bloc;
5. Stabilirea structurii meniului principal al aplicaiei acesta trebuie s conin opiuni
pentru toate funciunile sistemului informatic care sunt accesibile utilizatorului.
6. mprirea aplicaiei pe programe fiecare program urmrete rezolvarea unei pri a
problemei generale.

2.2. Etapa de programare

1. Elaborarea programelor: realizarea componentelor logice programe/aplicaii ncepnd
cu programul monitor (principal), continund cu cele de introducere/actualizare a datelor, cu
cele de prelucrare i terminnd cu programele de interogare baza de date i extragere de
informaii.
2. Testarea funcionrii corecte a programelor individuale i a sistemului n ansamblu
pentru ct mai multe situaii posibile (ideal ar fi testarea n toate situaiile posibile dar
numrul acestora este foarte mare) incluznd n mod obligatoriu i situaiile limit.
3. nlturarea erorilor depistate i reluarea pasului 2. Dac nu mai sunt erori se continu cu
urmtoarea etap.

2.3. Punerea n funciune i exploatarea bazei de date

1. ncrcarea i manipularea datelor operaii de actualizare i consultare, ntreinere
(dezvoltare) a bazei de date.
2. Etapele de realizare a unei bnci de date
14


2. Elaborarea documentaiei de utilizare care se pred beneficiarului, ct i documentaia
tehnic a sistemului (de preferat ca fiecare program s aib cte o fi tehnic, pentru o mai
uoar depanare, ntreinere).









Introducere date
Meniuri utilizator
Ferestre utilizator
Ecrane utilizator
Aplicaie
Baze de date
Programe
Extragere de date
Rapoarte statistice
Consultri curente
- - - - - -
Schema bloc a unei aplicaii din punct de vedere utilizator
Fig. 3


Programe de
Programe
pentru
introducere
date

Date de la
utilizator
Import
Meniul principal
Programul
Ecrane de
introducere
Baza de date
Export
Filtre
Rapoart
Programe de
extragere
date
Rezultate
utilizator







Schema bloc a unei aplicaii din punct de vedere al proiectantului
Fig.4
Not: Programele de extragere date pot fi elaborate de programator sau pot fi obinute cu
generatoarele incluse n SGBD.
ntreaga activitate din sistem este controlat de programul monitor care conine un meniu principal
definit de utilizator. Programele aplicaiei pentru introducerea datelor, prelucrare, actualizare i
extragere de date sub form de rapoarte se afl sub controlul programului monitor.
15
Baze de date



2.4. Documentaia aplicaiei

Deoarece etapa de analiz este proprie fiecrei aplicaii n parte, nu se recomand detalierea
etapelor 1 6. De aceea n cele ce urmeaz vom detalia documentarea programelor prin fia tehnic
care trebuie s conin rubricile:
Program nume;
Scop;
Parametri;
Variabile de intrare, de ieire;
Explicaii - sub form de comentarii n programele surs;
Programul surs.
3. Sisteme de gestiune a bazelor de date relaionale SGBDR
16



3. Sisteme de gestiune a bazelor de date relaionale
SGBDR

3.1. Modelul relaional al datelor

SGBDR se definete ca fiind un sistem de gestiune care utilizeaz organizarea datelor conform
modelului relaional. Conceptul de baz al modelului relaional este acela de relaie/tabel (limbajul
SQL specializat n comenzi de manipulare la nivel de tabel).

3.1.1. Structura relaional a datelor

Structura relaional a datelor cuprinde urmtoarele componente.
Domeniul ansamblul de valori caracterizat printr-un nume (domeniu de valori). El poate fi
precizat explicit prin enumerarea tuturor valorilor care aparin domeniului sau implicit prin
precizarea proprietilor pe care le au valorile din domeniu. Pentru un ansamblu de valori
produsul cartezian al acestora reprezint ansamblul tuplurilor
n
D D ,...,
1
( )
n
v v ,...,
1
unde v
1
este o valoare din
D
1
, v
2
este o valoare din D
2
, etc., unde tuplura corespunde unei linii din tabel.
Relaia un subansamblu al produsului cartezian al mai multor domenii, caracterizat prin nume i
care conine tupluri cu semnificaie (tabel). ntr-o relaie, tuplurile trebuie s fie distincte nu se
admit duplicate. O reprezentare a relaiei este tabelul bidimensional (tabela de date) n care liniile
reprezint tuplurile iar coloanele corespund domeniilor. Numrul tuplurilor dintr-o relaie este
cardinalul relaiei, numrul valorilor dintr-un tuplu este gradul relaiei. Pentru a diferenia coloanele
care conin valori ale aceluiai domeniu, eliminnd dependena de poziie, se asociaz fiecrei
coloane un nume distinct atribut. n timp ce tuplurile sunt unice, un domeniu poate apare de mai
multe ori n produsul cartezian pe baza cruia este definit relaia.
Tabelul 1 prezint comparativ conceptele utilizate n organizarea datelor n fiiere, n baze de date,
conceptele din teoria relaional i din SGBDR.
Tabelul 1
Fiiere Teoria BD Teoria relaional SGBDR
Fiier Colecie de date Relaie Tabel
nregistrare Familie de caracteristici Tuplu Linie
17
Baze de date


Cmp Caracteristic Atribut Nume coloan
Valoare Domeniu de Valori Domenii Domeniu coloan

3.1.2. Operaii n algebra relaional

Reuniunea operaie n algebra relaional, definit pe dou relaii R
1
i R
2
, ambele cu aceeai
schem, ce const din construirea unei noi relaii R
3
, cu schema identic cu R
1
i R
2
, avnd drept
extensie tuplurile din R
1
i R
2
luate mpreun, o singur dat.
Diferena definit pe dou relaii R
1
i R
2
, avnd aceeai schem, avnd drept extensie tupluri ale
relaiei R
1
care nu se regsesc n relaia R
2
.
Produs cartezian definit pe dou relaii R
1
i R
2
, operaie care const din construirea unei noi
relaii R
3
, a crei schem se obine din concatenarea schemelor relaiilor R
1
i R
2
, i a crei extensie
cuprinde toate combinaiile tuplurilor din R
1
cu cele din R
2
.
Proiecia operaie din algebra relaional definit asupra unei relaii R, ce const din construirea
unei noi relaii P, n care se regsesc numai acele atribute din R specificate explicit n cadrul
operaiei. Suprimarea unor atribute din R nsemn efectuarea unor tieturi verticale asupra lui R i
pot avea ca efect apariia unor tupluri duplicate, care se cer a fi eliminate.
Selecia operaie n algebra relaional definit asupra unei relaii R, care const din construirea
unei relaii S, a crei schem este identic cu cea a relaiei R i a crei extensie este constituit din
acele tupluri din R care satisfac o condiie explicit n cadrul relaiei. Deoarece nu toate tuplurile din
R satisfac condiia, selecia nseamn efectuarea de tieturi pe orizontal asupra relaiei R, adic
eliminarea de tupluri. Condiia precizat n cadrul operaiei de selecie este de forma:


Atribut operator de comparaie valoare

Jonciunea (join-ul) operaie n algebra relaional definit pe dou relaii R
1
i R
2
, care const din
construirea unei noi relaii R
3
, prin concatenarea unor tupluri din R
1
cu tupluri din R
2
. Se
concateneaz acele tupluri din R
1
i R
2
care satisfac o anumit condiie, specificat explicit n cadrul
operaiei. Extensia relaiei R
3
va conine combinaiile acelor tupluri care satisfac condiia de
concatenare. Cel mai important tip de join din punct de vedere al utilizrii este equijoin-ul, care este
o jonciune dirijat de o condiie de forma:


Atribut din R
1
= Atribut din R
2

3. Sisteme de gestiune a bazelor de date relaionale SGBDR
18


Intersecia operaie din algebra relaionaldefinit pe dou relaii R
1
i R
2
, ambele cu aceeai
schem, care const din construirea unei noi relaii R3, cu schema identic cu a operanzilor i cu
extensia format din tuplurile din R
1
i R
2
.
Diviziunea operaie din algebra relaional definit asupra unei relaii R, care const din
construirea cu ajutorul unei relaii r a relaiei Q. Tuplurile relaiei Q concatenate cu tuplurile relaiei
r permit obinerea tuplurilor relaiei R.

3.1.3. Optimizarea cererilor de date

Se realizeaz n dou etape:
1. exprimarea cererilor de date sub forma unor expresii algebrice relaionale care au la baz
echivalena dintre calculul relaional i algebra relaional,
2. aplicarea unor transformri algebrice asupra expresiilor obinute n etapa precedent, n
scopul obinerii unor expresii echivalente cu cele iniiale, dar care s fie executate mai
eficient.
Proprieti
Comutativitatea operaiilor de join i produs cartezian:
1 2 2 1
1 2 2 1
E E E E
E E E E
=
= >< ><

Asociativitatea operaiilor de join i produs cartezian:
) ( ) (
) ( ) (
3 2 1 3 2 1
3 2 1 3 2 1
E E E E E E
E E E E E E
=
= >< >< >< ><

Compunerea proieciilor
Compunerea seleciilor
( ) ) ( ) (
2 1 2 1
E E
F F F F I
=
deoarece
2 2 2 1 F F F F I I =
, seleciile se pot
comuta:
( ) ( ) ( ) (
1 2 2 1
E E
F F F F
) =

Comutarea seleciei cu proiecia
Comutarea seleciei cu produsul cartezian
Comutarea seleciei cu reuniunea
Comutarea seleciei cu diferena
Comutarea proieciei cu produsul cartezian
Comutarea proieciei cu reuniunea
19
Baze de date


Prin deplasarea operaiilor de selecie ct mai la stnga expresiilor algebrice se reduce numrul de
tupluri care trebuie manipulate n procesul de executare a cererii. Se pot meniona urmtoarele
strategii de optimizare a cererilor de date:
Deplasarea operaiei de selecie naintea operaiei de jonciune jonciunea i produsul cartezian
acioneaz ca generatori de tupluri. Prin selecie se reduce dimensiunea relaiilor la care se aplic
aceti generatori de tupluri. Se ine seama c operaia de jonciune poate fi exprimat sub forma
unui produs cartezian urmat de o selecie, iar n cazul jonciunii naturale printr-un produs cartezian
urmat de de o selecie i de o proiecie.
Deplasarea operaiilor de proiecie naintea operaiilor de jonciune se realizeaz prin folosirea
proprietii de comutare a seleciei cu produsul crtezian
Combinarea seleciilor multiple se realizeaz cu ajutorul relaiei de compunere a seleciilor.
Deplasarea operaiilor de selecie naintea operaiilor de proiecie- realizat pe baza proprietii de
comutare a seleciei cu proiecia. Eliminarea tuplurilor duplicate obinute prin proiecie se face prin
ordonarea tuplurilor. Selecia reduce numrul tuplurilor ce trebuiesc ordonate facilitnd operaia de
proiecie.

3.2. Regulile lui Codd

Detalierea caracteristicilor pe care trebuie s le prezinte un SGBD pentru a fi considerat relaional s-
a facut de E. F. Codd n 1985 sub forma a 13 reguli.

R0 Gestionarea datelor la nivel de relaie.
Toate informaiile din baza de date sunt gestionate numai prin mecanisme relaionale. Rezult c
SGBD-ul trebuie s-i ndeplineasc toate funciile utiliznd ca unitate de informaie mulimea,
adic s utilizeze limbaje (SQL) care s opereze la un moment dat pe o ntreag relaie.

R1 Reprezentarea logic a datelor
Informaiile din baza de date relaional trebuie s fie reprezentate explicit la nivel logic ntr-un
singur mod i anume ca valori n tabelele de date. Rezult c toate datele trebuie s fie memorate i
prelucrate n acelai mod. Informaiile privind numele de tabele, coloane, domenii, definiiile
tabelelor virtuale, restriciile de integritate trebuie s fie memorate tot n tabele de date (catalog).

R2 Garantarea accesului la date
3. Sisteme de gestiune a bazelor de date relaionale SGBDR
20


Accesarea informaiilor din baza de date relaional se va face prin specificarea numelui tabelei, a
valorii cheii primare i numelui de coloan.

R3 - Valorile null
SGBD trebuie s permit declararea i manipularea valorilor null, cu semnificaia unor date lips
sau inaplicabile. Valorile null, care difer de irurile de caractere spaiu sau de irurile vide de
caractere sunt importante n implementarea restriciilor de integritate (integritatea entitii i
integritatea referenial) din modelul relaional.

R4 - Metadatele
Informaiile despre descrierea bazei de date, metadatele, trebuie s se prezinte la nivel logic n
acelai mod cu descrierea datelor propriu-zise, utilizatorul aplicnd asupra descrierii bazei de date
aceleai operaii ca i la datele obinuite. Sistemul nu trebuie s fac diferene ntre descrierea
datelor i a metadatelor utiliznd o singur structur, cea relaional.

R5 Facilitile limbajelor utilizate
Un sistem relaional trebuie s fac posibil utilizarea mai multor limbaje, n mai multe moduri.
Trebuie s existe cel puin un limbaj de nivel nalt ale crui instruciuni s poat exprima oricare din
urmtoarele operaii: definirea tabelelor de baz, definirea tabelelor virtuale, manipularea datelor,
definirea restriciilor de integritate, autorizarea accesului, precizarea limitelor tranzaciilor.

R6 Actualizarea tabelelor virtuale
Nu toate atributele din cadrul unei tabele virtuale, deci nu toate tabelele virtuale, sunt teoretic
actualizabile.

R7 Actualizrile n baza de date
SGBD trebuie s ofere posibilitatea manipulrii unei tabele (de baz sau virtuale) nu numai n
cadrul operaiilor de regsire ci i n cazul celor de adugare, modificare i tergere a datelor. n
cursul operaiilor prin care se schimb coninutul bazei de date s se lucreze la un moment dat pe o
ntreag relaie.

R8 Independena fizic a datelor
21
Baze de date


Programele de aplicaie nu trebuie s fie afectate de schimbrile efectuate n modul de reprezentare
a datelor sau n metodele de acces. O schimbare a structurii fizice a datelor nu trebuie s blocheze
funcionarea programelor de aplicaie.

R9 Independena logic a datelor
Programele de aplicaie nu trebuie s fie afectate de schimbrile efectuate asupra relaiilor bazei de
date.

R10 Restriciile de integritate
Restriciile de integritate trebuie s poat fi definite n limbajul utilizat de SGBD pentru definirea
datelor i s fie memorate

R11 Distribuirea geografic a datelor
n situaia n care datele sunt distribuite, programele de aplicaie s fie logic aceleai cu cele
utilizate n cazul n care datele sunt fizic centralizate. Utilizatorul trebuie s perceap datele ca fiind
centralizate. Localizarea i recompunerea datelor distribuite cade n seama sistemului.

R12 Prelucrarea datelor la nivel de baz
Dac SGBD posed un limbaj de baz de nivel sczut orientat pe prelucrarea de nregistrri
(tupluri) i nu pe prelucrarea mulimilor (relaiilor) acest limbaj nu trebuie folosit, pentru a se evita
restriciile de integritate sau restriciile introduse prin utilizarea limbajelor relaionale de nivel nalt

3.3. Normalizarea datelor

Este procesul prin care se elimin redundana datelor n proiectul bazei de date i se
construiete un model de baz de date care susine diverse cerine funcionale i structuri alternative
ale bazei de date. Sunt aplicate n normalizarea unei baze de date urmtoarele trei reguli.
R
1
. Toate atributele trebuie specificate o singur dat. Aceasta este forma inti normal.
R
2
. Un atribut trebuie s depind n ntregime de identificatorul unic al entitii pe care o descrie.
Aceasta este forma a doua normal. Se pun atributele ntr-o tabel n care depind exclusiv de o
cheie principal. Nu se utilizeaz tabele n care atributele s nu depind exclusiv de o singur cheie!
R
3
. Pentru a fi n forma normal a treia, fiecare tabel trebuie s posede o singur cheie primar, iar
datele din tabel trebuie s depind exclusiv de cheia primar a tabelei.

3. Sisteme de gestiune a bazelor de date relaionale SGBDR
22


3.4. Cerinele minimale de definire a SGBDR

Din primele versiuni aprute, practic nici un SGBD nu reuea s acopere n ntregime regulile
lui Codd. De aceea s-au formulat o serie de criterii minimale pe care trebuie s le satisfac un
sistem de gestiune a bazelor de date pentru a putea fi considerat relaional.
Pentru ca un SGBD s fie minimal relaional:
1. toate datele din cadrul bazei de date sunt reprezentate prin valori n tabele;
2. ntre tabele nu exist pointeri observabili de ctre utilizatori operaiile cu relaii nu fac apel
la pointeri, indecsuri, fiiere inverse etc.;
3. sistemul suport operatori relaionali de proiecie, selecie i jonciune natural, fr limitri
impuse. Unitatea de informaie n cadrul acestor operaii trebuie s fie relaia.
SGBD este complet relaional dac este minimal relaional i satisface n plus urmtoarele
condiii:
sistemul suport toate operaiile de baz ale algebrei relaionale;
sistemul suport dou dintre restriciile de integritate de baz ale modelului relaional i anume
unicitatea cheii unei relaii i restricia referenial;
SGBD este pseudorelaional dac satisface condiiile 1 i 3 de mai sus;
SGBD este cu interfa relaional dac satisface condiiile 1 i 3 de mai sus i condiia 3 este
ndeplinit numai n raport cu operaia de interogare.
23
Baze de date



4. Componentele funcionale ale sistemului Visual
FoxPro

Sistemul de gestiune a bazelor de date este componenta unui sistem de baze de date, care are
rolul de a permite descrierea i manipularea datelor conform unui model de date. La acest moment,
n lume, cea mai mare parte a SGBD-urilor utilizate sunt bazate pe modelul relaional.
Visual FoxPro este un SGBD complet relaional, cu limbaj propriu, care suport un nucleu
extins din limbajul relaional SQL (Structured Query Language). Varianta Visual de FoxPro
(VFP) a ajuns la versiunea 6.0 lansat n 1998 n cadrul pachetului de programe Visual Studio 6.0,
care mai conine urmtoarele programe: Visual C++, Visual Basic 6.0 i Visual Java 6.0. VFP este
un sistem rapid, modularizat, flexibil, care nu necesit resurse de calcul foarte mari, mbin
programarea procedural (prin limbaj propriu) cu cea descriptiv, pe obiecte (programare vizual).
Utilizatorii neinformaticieni au la dispoziie o gam larg de generatoare pentru ecrane, meniuri,
rapoarte etc. Utilizatorii de specialitate (informaticieni) pot dezvolta programe n limbaj propriu i
n SQL, aplicaii (prin componentele DESIGNER i APPLICATION). Administratorul bazei de
date are la dispoziie instrumente oferite de VFP pentru asigurarea securitii i integritii datelor,
pentru refacerea bazei de date etc.

4.1. Programarea orientat pe obiecte

n programarea orientat pe obiecte implementat n Visul FoxPro se utilizeaz conceptele
descries n continuare.
Clasele de obiecte reprezint un tip abstract de date care definete structura obiectelor din
acea clas (proprietile) i mulimea de metode (operaii) pentru obiectele respective.
Obiectele o colecie de proprieti care se refer la aceeai entitate. Aceste proprieti descriu
structura de date a obiectului. Un obiect are un nume, prin care este referit, un identificator unic,
metode, o implementare (privat utilizatorul nu are acces) i o interfa (care este public).
Cererile adresate unui obiect pentru a returna o valoare sau pentru a schimba o stare se numesc
mesaje.
Metoda definete operaiile permise (operatorii) asupra obiectului, adic comportamentul
acestuia.
Modelul obiect confer obiectelor urmtoarele caracteristici:
4. Componentele funcionale ale sistemului Visual FoxPro
24


ncapsularea descrierea obiectelor se face astfel nct nu exist acces din afara obiectului la datele
sale (black box);
polimorfismul diferitele obiecte pot rspunde diferit la aceleai mesaje;
succesiunea (motenirea) reprezint capacitatea unui obiect de a-i deriva datele i
funcionalitatea din alte obiecte.

Operatorii modelului orientat pe obiecte se refer la actualizarea metodelor, a proprietilor, a
claselor, a instanelor. La baza operaiilor dintr-un astfel de model stau mesajele, care ajut
obiectele s comunice ntre ele.
Restriciile de integritate a datelor:
orice obiect respect restriciile impuse clasei din care face parte;
identificatorul obiectului asigur integritatea referirii la acesta;
accesul la obiect este limitat la folosirea protocolului de mesaje definit pentru clasa din care
face parte.

4.2. Arhitectura VFP 6.0

Arhitectura SGBD VFP6.0 (fig. 1) corespunde unui model complet relaional, componentele sale
fiind structurate pe trei niveluri: nucleul (kernel), interfeele (interfaces) i instrumentele (toolkit).
1. Nucleul este componenta central a sistemului. Din nucleu fac parte:
limbajul FoxPro care este propriu sistemului, este de tip procedural. El coine comenzi
att pentru descrierea datelor (LDD) ct i pentru manipularea datelor (LMD). Tot aici sunt
incluse comenzile pentru programarea vizual din tehnologia orientat spre obiecte.
nucleul extins SQL este un subset din standardul SQL. Acesta este un limbaj relaional
descriptiv, care conine att comenzi pentru descrierea datelor (LDD) ct i pentru manipularea
datelor (LMD).
2. Interfeele sunt produse VFP pentru dezvoltarea aplicaiilor cu baze de date relaionale.
Ele au urmtoarele componente:
DESIGNER permite crearea de diferite obiecte VFP: tabele (TABLE), cereri de regsire
(QUERY), videoformate (FORM), rapoarte (REPORT), etichete (LABEL), meniuri (MENU).
Un produs DESIGNER se apeleaz printr-o comand CRETE/MODIFY aferent obiectului
respectiv. Comanda poate fi generat de sistem sau scris de utilizator.
BUILDER permite adgarea rapid a unor noi elemente la obiectele tip VFP create deja cu
produsul DESIGNER.
25
Baze de date


WIZARD permite realizarea complet i rapid a obiectelor de tip VFP. Utilizarea
modulului WIZARD presupune asistarea utilizatorului de ctre sistem n proiectarea obiectelor.
Generarea lor se face automat, pe baza opiunilor exprimate de utilizator, sub form de rspuns la
diferite ntrebri. Acest modul face parte din categoria instrumentelor de proiectare asistat de
calculator.
EXPORT/IMPORT permite schimbul de date ntre VFP i alte sisteme.
Generatoare specializate pentru realizarea proiectelor (PROJECT), a aplicaiilor (APP), a
documentaiei (DOC).
API (Application Programmers Interface) permite apelarea din aplicaia VFP a unor rutine
scrise n limbajul C sau limbaj de asamblare.
3. Instrumentele sunt produse VFP pentru ntreinerea i exploatarea bazei de date:
EDITOR de texte permite ncrcarea i editarea programelor surs (fiiere .PRG), precum i a
fiierelor ASCII. Apelarea editorului se poate face prin comanda dat n fereatra Command:
MODIFY COMMAND <nume_fiier>

NUCLEU
Limbajul FoxPro Nucleul extins SQL
1
BD
3
INTERNET HELP/DEMO
DEBUG UTILITARE
de ntreinere
EDITOR TEXTE
INSTRUMENTE
2
INTERFEE
API Generatoare EXPORT/IMPORT
WIZARD BUILDER DESIGNER

















Fig. 1
4. Componentele funcionale ale sistemului Visual FoxPro
26


UTILITARE de ntreinere permit gestiunea fiierelor, setarea unor parametri de lucru,
activiti desfurate de administratorul bazei de date.
DEBUG permite depanarea interactiv a programelor scrise n FoxPro.
HELP/DEMO permite instruirea interactiv a utilizatorilor.
INTERNET permite utilizarea unor sevicii de Internet (mail, transfer de fiiere etc.).

4.3. Modurile de lucru n VFP

Dup intrarea n VFP utilizatorul poate lucra n dou moduri: cu meniul sistem i prin comenzi.
Ecranul principal VFP conine o fereastr de tip Microsoft cu urmtoarele elemente (fig. 2):


Fig. 2
bara de titlu pe care este scris Microsoft Visual FoxPro (n stnga) i butoanele pentru
minimizare/maximizare i nchidere fereastr (dreapta).
bara meniului sistem care conine un meniu orizontal cu opiunile de lucru (modul de lucru
meniu sistem):File, Edit, View, Format, Tools, Program, Window, Help. La selectarea unei opiuni
apare un submeniu vertical, de unde se alege mai departe subopiunea dorit.
bara cu instrumente care conine butoane (icon-uri) dispuse orizontal. Acestea pot fi active sau
nu, n funcie de starea curent de lucru. Prin aceste butoane se poate apela, sub o alt form, o
suboperaiune din meniul sistem.
fereastra de comand care conine un cursor i permite introducerea unei comenzi VFP sau
apelul unui program (modul de lucru prin comenzi).
aria de ieire este format din restul spaiului neocupat din fereastra principal unde vor fi
afiate rezultatele execuiei unei comenzi sau a unui program VFP.
27
Baze de date



4.3.1. Modul de lucru meniu sistem

Este modul de lucru care permite apelarea tuturor instrumentelor i interfeelor sistemului VFP.
Soluia este adoptat de utilizatorii care prefer dezvoltarea aplicaiilor cu ajutorul generatoarelor.
Efortul depus este redus i nu se programeaz n cod surs. Opiunile din meniul principal ca i cele
din submeniuri pot fi apelate prin mouse, sau cu o combinaie de taste. De exemplu apelarea
meniului File se face tastnd secvena ALT/F (litera subliniat din componena numelui meniului).

Funciile opiunilor din meniul principal al sistemului sunt:
File apeleaz instrumente pentru ntreinerea fiierelor aferente unei
baze de date VFP (fig. 3):
New creaz un obiect nou. Apare o list din care putem selecta: Project
(creare proiect), Database (creare baz de date), Table (creare tabel), Query
(creare cerere), Connection (conexiune), View (viziune local), Remote
View (viziune la distan), Form (creare unui videoformat), Report (creare
raport), Label (creare etichet), Program (creare program surs), Class
(creare clas de obiecte), Text file (creare fiier text ASCII), Menu (creare
meniu utilizator). n partea dreapt exist dou butoane, pentru creare fiier
nou (New) i pentru utilizarea asistentului (Wizard).
Open (deschide) apare o fereastr din care alegem tipul fiierului,
directorul i numele, cu opiunile New, Open, Cancel.
Close nchide fiierul deschis.
Save/Save As salvare, respectiv salvare cu redenumire.
Import/Export permite importul respectiv exportul de date cu alte
sisteme de gestiune a bazelor de date.
Print Preview vizualizare nainte de ieire la imprimant.
Print ieire la imprimant.
Send trimite prin e-mail.
Exit ieire din program.



Fig. 3
4. Componentele funcionale ale sistemului Visual FoxPro
28


Edit ofer faciliti de lucru obinuite ntr-o fereastr de editare de
texte (fig. 4):
Undo/Redo renu la ultima modificare n text / repet ultima aciune n
text.
Cut/Copy/Paste tiere, memorare n memoria tampon, copiere la o nou
locaie n fiier a unui text.
Clear tergere text.
Select all selecteaz ntreg textul.
Find/Find again/Replace caut/caut n continuare a unui ir de
caractere/nlocuiete irul gsit cu un altul. Cutarea se poate face cu
activarea/dezactivarea opiunii de difereniere ntre litere mari/litere mici.
Fig. 4
View permite setarea unor parametri privind bara curent de instrumente de lucru.
Format permite setarea unor parametri privind litele (Font), spaierea
etc.
Tools permite apelul interfeelor i instrumentelor VFP.
Program permite lansarea sau oprirea unuia din paii ce se parcurg la
execuia unui program VFP (fig. 5).
Fig. 2.5
Do lanseaz n execuie un program.
Cancel anuleaz execuia programului.
Resume reia execuia programului.
Suspend suspend execuia programului.
Compile compileaz programul.
Window permite setarea parametrilor ferestrei curente de lucru (inclusiv fereastra de comand).
Help apeleaz instrumentele pentru autodocumentare.

Datele pot fi introduse n dou moduri, utiliznd fie tabele independente (File/New/Table) care
nu aparin unei baze de date, fie crend o baz de date (File/New/Database), n care se pot introduce
tabele existente sau se pot crea noi tabele.

Relaiile ntre tabele se pot stabili n ambele cazuri. Exist trei tipuri de relaii ntre datele unor
tabele: 1 . n m n , 1 , 1
29
Baze de date


Deschiderea unui tabel individual, cu secvena File/Open/Table/nume_tabel nu duce automat
la afiarea coninutului acestuia n spaiul de lucru.
Pentru aceasta trebuie activat icon-ul care corespunde opiunii Data Session, care va afia ntr-o
fereastr o serie de opiuni legate de tabel (fig. 6):
Properties pentru modificare/consultare structur tabel (nume,tip, poziie cmp).
Browse pentru afiare date/nume cmpuri.
Open pentru deschidere altor tabele.
Close nchidere fiier selectat.
Relation stabilirea relaiilor ntre tabele independente, deschise n sesiunea curent.

Fig. 6
La alegerea opiunii Browse (rsfoire), fie din meniul View fie din fereastra Data Session, va apare
meniul Table n bara de meniuri cu urmtoarele subopiuni (fig. 7):
Go to Record regsirea unei nregistrri dup diferii parametri:
numr nregistrare, deplasare la nceputul/sfritul tabelului,
localizare nregistrare dup valoarea unui cmp etc.
Append New Record adgarea unei noi nregistrri.
Append Records adugarea de noi nregistrri dintr-un alt fiier
Delete Records marcare pentru tergere (la nivel logic).
Recall Records anularea marcrii pentru tergere.
Remove Deleted Records tergerea definitiv din tabel a
nregistrrilor marcate (la nivel fizic).
Replace Field actualizare cmp nregistrare (schimbarea valorii
cmpului).
Size Field modificarea limii de afiare a cmpului n browser. Fig.7
4. Componentele funcionale ale sistemului Visual FoxPro
30


Move Field schimbarea poziiei de afiare a cmpului n browser.
n cazul n care se construiete o aplicaie n care vor fi folosite o gam larg de obiecte din
VFP, (baze de date, tabele independente, cereri, videoformate, rapoarte, etichete, programe surs,
clase de obiecte, meniuri utilizator, iconu-uri etc.) se va construi un proiect (Project), n seciunile
cruia se pot declara aceste obiecte (fig. 8). ntreg proiectul se va finaliza ntr-un program
executabil care va conine toate obiectele declarate ca fiind utilizate n aplicaie. Pentru a realiza
proiectul n form executabil, n prealabil se folosete opiunea Build, pentru a realiza compilarea
i link-editarea.












Fig. 8

4.3.2. Modul de lucru prin comenzi

Activitatea n acest mod de lucru se desfoar n fereastra de comand din ecranul principal al
VFP (Command). Aici se gsete poziionat cursorul i utilizatorul poate lucra n stil interpretor
sau compilator.
31
Baze de date



5. Organizarea datelor nVisual FoxPro

5.1. Manipularea bazei de date i a tabelelor n VFP

Manipularea presupune urmtoarele operaii care pot fi executate fie n modul asistat, fie n
modul comand:
Crearea bazei de date/tabel
Deschiderea bazei de date/tabel
Efectuarea operaiilor de consultare, actualizare (adgare, modificare, tergere) asupra bazei de
date/tabel
nchiderea bazei de date/tabel

5.1.1. Crearea bazei de date

Sistemul VFP permite crearea unei baze de date i introducerea tabelelor care vor face parte
din baza de date:
crearea fiierului (fiierelor) n care se pot stoca datele;
definirea structurii acestora;
stabilirea relaiilor ntre tabelele bazei de date,
Crearea se face o singur dat, nainte de utilizare.
Not Secvenele din linia de comand care apar ntre paranteze drepte au semnificaia de
element opional.
Crearea unei baze de date se face cu comanda:
CREATE DATABASE [<nume_baz_de_date>]?
nume_baz_de_date specific numele bazei de date care va fi creat.
? afieaz o fereastr de dialog pentru specificarea numelui bazei de date.

Fiierul corespunztor bazei de date are extensia .DBC. La crearea bazei de date se face
automat i deschiderea ei. Adugarea unei tabele n baza de date se face cu comanda ADD TABLE
sau folosind bara de instrumente DATABASE DESIGNER.

5. Organizarea datelor nVisual FoxPro
32


5.1.2. Crearea tabelelor

Crearea tabelelor se realizaz n funcie de modul de lucru, astfel:
1. modul asistat se utilizeaz secvena de adresare a meniului sistem: FILE/NEW se alege
opiunea TABLE din fereastra de dialog i se apas butonul NEW. Aceast secven are ca
efect apariia unei ferestre de dialog CREATE, n care se specific discul logic, directorul i
numele tabelei care va fi creat Deplasarea pn la poziia dorit n fereastr se face
utiliznd tasta <TAB> sau mouse-ul. Dup introducerea numelui tabelei se apas butonul SAVE
(fiierul va fi salvat cu extensia .DBF) i se afieaz o nou fereastr TABLE DESIGNER. n
acest fereastr, se selecteaz opiunea FIELDS afiat sus, utilizatorul trebuie s introduc
structura tabelei. Fereastra conine urmtoarele cmpuri de preluare a informaiilor structurale:
Name, Type, Width, Dec, Index, NULL i patru butoane pentru opiunile: OK, Cancel,
Insert, Delete. Sub Name se tasteaz numele cmpului, format din maxim 10 caractere,
ncepnd cu o liter, iar sub Type se declar tipul cmpului nou creat sau se alege o opiune din
meniul pop-up afiat.
Cmpul poate fi de tip:
caracter admite un ir de maxim 254 caractere (caractere alfanumerice i spaii goale);
numeric admite maxim 20 de caractere, numere, caracterele +/-, punctul zecimal;
logic admite maxim un caracter (T sau Y, F sau N);
dat admite maxim 8 caractere i are formatul implicit ll/zz/aa. Formatul poate fi schimbat cu
comanda SET DATE TO BRITISH i are ca efect schimbarea n formatul zz/ll/aa;
memo admite implicit 10 caractere, ns sistemul poate stoca blocuri mari de text pentru
fiecare nregistrare. Dimensiunea blocurilor de text este limitat de spaiul pe hard disk. Tabelele
care au declarate n structur cmpuri de tip memo sunt stocate sub forma a dou fiiere, unul cu
extensia .DBF i cellalt cu extensia .FTP n care se salveaz cmpurile memo ale tabelei.
general se folosete pentru memorarea elementelor de tip OLE (Object Linking and
Embededing), texte, foi de calcul tabelar (EXCEL), imagini, sunete etc.

Introducerea datelor n cmpurile memo i general este diferit de introducerea datelor n alte
cmpuri. Se poziioneaz cursorul pe cmpul memo, se apas simultan tastele [Ctrl]+[PgDown] i
apare o fereastr cu acelai nume ca al cmpului memo n care poate fi introdus textul. Textele
introduse se salveaz apsnd tastele [Ctrl]+[W], fereastra memo se nchide i cursorul revine n
fereastra de adugare a datelor.

33
Baze de date


Width opiune care specific numrul maxim de poziii ale cmpului.
Dec specific marimea prii zecimale, n cazul cmpurilor numerice.
Index specific dac cmpul respectiv se indexeaz (ascendent/descendent) sau nu.
NULL specific dac cmpul respectiv admite sau nu valori de tip NULL (cu semnificaia unor
date lips sau inaplicabile).

Dac se dorete schimbarea poziiei unui cmp n structur, se apas tasta [Tab] pn cnd
cursorul se pozioneaz pe cmpul respectiv i se apas simultan tastele [Ctrl] + [PgDown], [Ctrl] +
[PageUp]. Aceasta va avea ca efect deplasarea cmpului selectat cu o poziie n jos, sau n sus.
Operaia se poate efectua i cu mouse-ul: se selecteaz rndul care conine cmpul a crei poziie o
modificm, cursorul de poziie se mut pe acest rnd; innd apsat butonul stng de la mouse pe
cursor i deplasnd mouse-ul sus jos vom muta cmpul selectat, n cadrul structurii generale.
Butonul cu opiunea Insert se folosete pentru adugarea unui nou cmp. Butonul cu opiunea
Delete se folosete pentru tergerea unui cmp (cel marcat de cursor). Butonul Cancel anuleaz
modificrile fcute, iar butonul OK valideaz modificrile (sau folosind combinaia de taste [Ctrl]
+[Enter]).
Dup ce structura este salvat, fiierul fiind nou creat, apare un mesaj:
Input data records now? (Y/N)_
Dac se rspunde cu Y este afiat un ecran n care se introduc datele n ordinea stabilit n structur.

2. modul comand: implic utilizarea comenzii CREATE TABLE din nucleul SQL:
CREATE TABLE nume_tabel [FREE]
(nume_cmp1 tip_cmp1 [ (lungime_cmp [,precizie] )]
[,nume_cmp2]
M

)
unde:
- nume_tabel numele tabelei create;
- FREE specific c tabela nu va fi adugat la baza de date deschis;
- nume_cmp1 tip_cmp1 (lungime_cmp ,precizie) specific numele cmpului 1, tipul cmpului
1, - lungimea maxim i numrul de zecimale pentru cmpurile numerice. O tabel poate conine
pn la 255 de cmpuri. Dac unul sau mai multe cmpuri accept i valoarea NULL atunci
numrul de cmpuri se reduce cu 1 (254).

5. Organizarea datelor nVisual FoxPro
34


Tipul cmpului se declar cu una din urmtoarele litere:
Tip_cmp Lungime_cmp Precizie Descriere
C n cmp tip caracter de lungime n
D cmp de tip dat calendaristic
T cmp de tip timp (hh/mm/ss)
N n d cmp numeric de lungime n cu d zecimale
F n d cmp numeric n virgul mobil de lungime n cu d zecimale
I cmp numeric ntreg
B d cmp numeric dubl precizie
Y moneda
L cmp de tip logic
M cmp de tip memo
G cmp de tip general

Exemplu. Folosind modul comand se creaz o tabel cu evidena studenilor, cu numele ESTUD,
cu urmtoarele cmpuri:
- numr matricol: MATR de tip numeric, lungime maxim 5
- nume i prenume: NUME de tip caracter, lungime maxim 40
- adres: ADRESA de tip caracter, lungime maxim 30
- anul de studii: ANS de tip numeric, lungime maxim 1
- anul intrrii n facultate: ANIF de tip numeric, lungime maxim 4
- data naterii: DATAN de tip dat.
Comanda:
CREATE TABLE ESTUD (MATR N(5),NUME C(40),ADRESA C(30),ANS N(1),ANIF N(4),
DATAN D)

Alte comenzi utilizate n crearea tabelelor
Pentru crearea unei tabele se pot utiliza i comenzile COPY STRUCTURE EXTENDED TO sau
CREATE ... FROM ...
35
Baze de date



COPY STRUCTURE EXTENDED TO <nume_tabel> [FIELDS<list_cmpuri>]
[DATABASES <nume_baz_de_date> [NAME] <b_nume_tabel>]

unde:
- nume_tabel numele tabelei nou create;
- FIELDS <list_cmpuri> specific cmpurile care vrem s apar n noua tabel. Dac nu se
specific nimic, implicit sunt luate toate cmpurile din tabelei surs;
- DATABASE <nume_baz_de_date> numele unei bazei de date existente la care va fi adgat
noua tabel;
- NAME <b_nume_tabel> specific numele tabelei aa cum apare n baza de date.
Fiierul de structur creat are urmtoarele cmpuri:
FIELD_NAME cmpul nume (10 caractere)
FIELD_TYPE cmpul tip (maxim 1 caracter): C,N,F,D,L,M,G
FIELD_LEN lungimea cmpului (maxim 3 caractere)
FIELD_DEC numr de zecimale admis (maxim 3 caractere)

Comanda CREATE... FROM...creaz o tabel dintr-un fiier de structur (realizat cu
comanda anterioar COPY STRUCTURE EXTENDED TO...). Sintaxa comenzii:
CREATE [<nume_tabel_1>] FROM <nume_tabel_2>
nume_tabel_1 numele tabelei care va fi creat;
nume_tabel_2 numele fiierului care conine structura care va fi utilizat la creare.

Exemplu. Folosind tabela construit anterior (ESTUD) s se realizeze o nou tabel (ESTUD1) care
s conin suplimentar un cmp numeric (lungimea maxim 5 caractere, din care 2 la partea
zecimal) cu media de la bacalaureat (MBAC). Secvena de comenzi:
SELECT 2 && selecteaz zona de lucru 2
USE ESTUD && se deschide tabela ESTUD n zona de lucru 2
COPY STRUCTURE EXTENDED
TO TEMP
&& copiaz structura tabelei ESTUD n fiierul TEMP
USE TEMP && se deschide tabela TEMP
APPEND BLANK && se adaug o nregistrare goal
REPLACE FIELD_NAME WITH && se adaug un nou cmp MBAC
5. Organizarea datelor nVisual FoxPro
36


MBAC
REPLACE FIELD_TYPE WITH N && tip numeric
REPLACE FIELD_LEN WITH 5 && de lungime maxim 5 poziii
REPLACE FIELD_DEC WITH 2 && 2 poziii pentru partea zecimal
&& la fiecare REPLACE se afieaz mesajul 1
replacements
CREATE ESTUD1 FROM TEMP && se creaz tabela ESTUD1 cu structura dat de
fiierul TEMP
USE ESTUD1 && se deschide tabela ESTUD1
APPEND FROM ESTUD && se adaug nregistrrile din tabela iniial ESTUD
BROWSE && afiare coninut tabel ESTUD1 n browser
CLOSE DATABASES && se nchid toate tabelele
DELETE FILE TEMP.DBF && terge fiierul TEMP.DBF

5.2. Deschiderea bazei de date/tabelei

Deschiderea bazei de date se face cu comanda:
OPEN DATABASE [<nume_bd>]
[EXCLUSIVE | SHARED] [NOUPDATE]
nume_bd numele bazei de date pe care o deschidem;
EXCLUSIVE ali utilizatori nu pot s acceseze baza de date;
SHARED deschide baza de date n modul partajat, ceilali utilizatori au acces;
NOUPDATE specific faptul c nu se pot face schimbri n baza de date (deschis doar pentru
citire).
Comanda pentru deschiderea unei tabele ntr-o zon de lucru:
USE <nume_fiier> IN <nr_zon_de_lucru> INDEX <list_fiiere_index> ALIAS <alias_tabel>
[EXCLUSIVE | SHARED]
[NOUPDATE]
nume_fiier numele tabelei pe care vrem s o deschidem.
nr_zon_de_lucru numrul zonei de lucru asociate la deschiderea tabelei (numere 0,1,2.. sau litere
A,B...).
INDEX <list_fiiere_index> - specific un set de indeci care se deschid odat cu tabela. Dac
tabela are un fiier de index structural compus, fiierul de index este deschis automat odat cu
fiierul. Lista de fiiere index conine orice fel de nume de fiier de index, simplu (.IDX) sau
37
Baze de date


nestructural compus (.CDX), separate prin virgul, fr specificarea extensiei. Primul fiier de index
din list este cel care controleaz accesarea i afiarea datelor din tabel.
ALIAS <alias_tabel> - creaz un nou nume pentru tabel, diferit de numele extern. Referirea la
fiier se poate face prin intermediul alias-ului, n funcii sau comenzi care cer sau suport alias-ul.
Specificarea zonei de lucru poate fi fcut i separat asociind comanda SELECT la comanda USE.
SELECT <nr_zon_de_lucru> | <nume_alias>
USE <nume_fiier>

Not Semnul | |n sintaxa unei comenzi marcheaz alternana unor clauze care se exclud.

n modul asistat, deschiderea se face utiliznd meniul FILE/OPEN, se selecteaz DATABASE sau
TABLE din meniul pop-up afiat i se specific discul logic, subdirectorul i numele bazei de date
sau tabelului, precum i modul de deschidere (se bifeaz sau nu, opiunea EXCLUSIVE). Cnd
toate aceste informaii sunt specificate se apas butonul OK.
Dup operaia de deschidere n meniul View avem subopiunile Browse (vizualizare coninut),
Database Designer (proiectantul pentru baza de date), Table Designer (proiectantul pentru tabele).
Se pot face consultri cu Browse, modificri ale structurii cu Database Designer (adugare,
eliminare de tabele din baz, stabilirea/anularea relaiilor ntre tabele) sau Table Designer
(actualizare cmpuri).






5.3. Consultarea i modificarea bazei de date/tabelei

5.3.1. Modificarea structurii de date a tabelelor- modul asistat

Modificarea structurii logice a unei tabele se poate face fie cu ajutorul comenzii MODIFY
STRUCTURE, din fereastra de comand, fie activnd butonul DATA SESSION din bara de
instrumente
n primul caz, dup lansarea comenzii MODIFY STRUCTURE, se va afia fereastra de dialog
OPEN. Cu ajutorul sgeilor direcionale se poziioneaz cursorul pe tabelul pe care dorim s-l
5. Organizarea datelor nVisual FoxPro
38


modificm. Se apas tasta <Enter> i va aprea fereastra de dialog STRUCTURE, utilizat i la
definirea structurii tabelelor.
n cel de al doilea caz, din fereastra DATA SESSION se alege opiunea OPEN, care deschide
fereastra de selectare a discului logic, a subdirectorului i a numelui de fiier. Se selecteaz fiierul
i se apas butonul OK. n fereastra DATA SESSION va fi afiat numele tabelului deschis. Pot fi
deschise mai multe tabele simultan, numele lor fiind afiat n fereastra DATA SESSION. Se alege
opiunea PROPERTIES care va activa fereastra de dialog STRUCTURE.
n ambele cazuri operaia OPEN se va face cu opiunea EXCLUSIVE pentru a putea modifica.
n fereastra STRUCTURE, poziionarea cursorului se face apsnd tasta <TAB> pentru deplasare
nainte sau <SHIFT> + <TAB> pentru deplasare napoi, n zona ce cuprinde descrierea structurii,
unde vrem s inserm un nou cmp. n partea dreapt a ferestrei vor fi active opiunile INSERT,
DELETE (adgare/tergere). Se apas tasta <INSERT> sau butonul cu opiunea INSERT i va fi
afiat urmtoarea linie:

New field character 10

Cmpurile ce urmeaz vor fi mpinse cu un rnd n jos. Se introduce numele cmpului n prima
csu, se alege tipul i lungimea maxim din meniurile pop-up. Pentru tergere se poziioneaz
cursorul pe cmpul respectiv i se apas tasta <DELETE> sau se folosete butonul cu opiunea
DELETE.
Salvarea modificrilor se face selectnd opiunea OK (buton), sistemul afind urmtorul mesaj:
Make structure changes permanent ?

YES NO

Opiunea YES salveaz noua structur a tabelului, fereastra de dialog STRUCTURE se nchide i
controlul (cursorul) trece n fereastra de comand.

Not Modificarea structurii tabelelor se poate face i cu comanda ALTER TABLE din nucleul
SQL.

La alegerea opiunii Browse(rsfoire), fie din meniul VIEW fie din fereastra DATA SESSION, va
apare opiunea Table n bara de meniuri cu urmtoarele subopiuni:
Go to Record regsirea unei nregistrri dup diferii parametri: numr articol, deplasare la
nceputul/sfritul tabelului, localizare nregistrare dup valoarea unui cmp etc.
Append New Record adgarea unei noi nregistrri.
39
Baze de date


Append Records adugarea de noi nregistrri dintr-un alt fiier
Delete Records marcare pentru tergere (la nivel logic).
Recall Records anularea marcrii pentru tergere.
Remove Deleted Records tergerea definitiv din tabel a nregistrrilor marcate (la nivel fizic).
Replace Field actualizare cmp nregistrare (schimbarea valorii cmpului).
Size Field modificarea limii de afiare a cmpului n browser.
Move Field schimbarea poziiei de afiare a cmpului n browser.
Vizualizarea datelor cu opiunea Browse, se face ntr-o fereastr de tip WINDOWS care cuprinde
un tabel, coloanele reprezentnd cmpurile, iar liniile reprezentnd nregistrrile. Trecerea de la un
cmp la altul se face apsnd tasta <TAB> (nainte), <SHIFT>+<TAB>(napoi); pe vertical
deplasarea se face cu sgeile <UP Arrow>,<DOWN Arrow>. nchiderea ferestrei Browse se face
apsnd simultan tastele <Ctrl>+<End>.

5.3.2. Deplasri n tabel. Cutri secveniale

Odat cu deschiderea tabelului, acestuia i se asociaz o locaie de memorie n care este stocat
numrul nregistrrii curente (pointer-ul de nregistrare).
Exist 2 tipuri de deplasri:
criteriul utilizat este numrul nregistrrii, care se realizeaz utiliznd din submeniul Go to Record
subopiunile: Top, Bottom, Bext, Previous, Record# (prima nregistrare, ultima nregistrare,
urmtoarea nregistrare, nregistrarea anterioar, la nregistrarea n).
criteriul utilizat se obine pe baza specificrii unei condiii de tip For sau While aplicat unui cmp.
Se utilizez opiunea Locate din submeniul Go to Record.
Pentru a modifica o nregistrare din tabel se alege opiunea Browse i apoi din meniul Table,
subopiunea Replace Field din meniul sistem. Apare o fereastr de dialog (REPLACE FIELD) cu
urmtoarele specificaii:
Field - numele cmpului ale crui valori vrem s le modificm;
With noua valoare.
Scope domeniul (Next n, All, Record n, Rest): toate nregistrrile, urmtoarele n nregistrri,
numai pentru nregistrarea n, restul nregistrrilor inclusiv cea curent pe care este poziionat
cursorul.
For / While vor fi modificate doar nregistrrile care satisfac condiia. For este o condiie
construit cu Expression Builder (constructorul de expresii) i vor fi modificate acele nregistrri
5. Organizarea datelor nVisual FoxPro
40


care au valoarea TRUE pentru expresia dat. Clauza While este de asemenea o expresie logic i
nregistrrile selectate trebuie s verifice condiia pentru a se realiza modificarea.










Constructorul de expresii are o regiune de editare n care vor fi introduse condiiile, manual sau
asistat de calculator.
Prin apsarea butonului Replace are loc operaia de modificare.

5.4. nchiderea bazei de date sau a tabelei

Cu comanda CLOSE se nchid diferite tipuri de fiiere:
CLOSE DATABASES [ALL] nchide baza de date curent i tabelele sale. Dac nu este deschis
nici o baz de date, vor fi nchise toate tabelele libere, fiierele de index, din toate zonele de lucru i
se va selecta zona de lucru 1. Clauza ALL specific c vor fi nchise toate bazele de date i tabelele
lor, toate tabelele libere i toate fiierele de index.
CLOSE INDEX nchide toate fiierele de index pentru zona de lucru curent (fiiere .IDX i
nestructurale .CDX). Un fiier de index structural (.CDX, compus care se deschide automat cu
tabelul) nu va fi nchis.
CLOSE ALL nchide toate bazele de date i tabelele lor, toate tabelele libere, toate fiierele de
index din toate zonele de lucru i se selecteaz zona de lucru 1. Comanda nu va nchide fereastra de
comenzi, fereastra HELP, fereastra DEBUG.
CLOSE TABLES [ALL] nchide toate tabelele din baza de date curent, sau toate tabelele libere
din toate zonele de lucru dac nu exist o baz de date deschis. Includerea clauzei ALL nchide
toate tabelele din toate bazele de date i tabelele libere, dar bazele de date rmn deschise.
41
Baze de date


6. Utilizarea asistentului Wizard n VFP

VFP este nsoit de peste 20 de programe de tip WIZARD, care asigur funcia de proiectare asistat
de calculator. Acestea sunt programe interactive care ajut la crearea de videoformate,
interogri/cereri (query), importarea i redimensionarea datelor, grafice, rapoarte cu date din diferite
tabele, baze de date, tabele, etichete, viziuni, kit-uri de instalare, documentaie, aplicaii, documente
pentru pagini de WEB. Programul WIZARD are forma unei serii de ecrane, n care utilizatorul
rspunde la ntrebri sau alege o serie de opiuni, n urma crora se va realiza o operaie sau se va
genera un fiier. Lansarea programului WIZARD se poate face:
cnd alegem opiunea New din meniul sistem File
selectnd submeniului Wizards din meniul sistem Tools.

6.1. Table Wizard

Creaz tabele bazate pe structura tipic a tabelelor. Asistentul pentru tabele pune la dispoziia
utilizatorului modele de tabele, acesta alegnd pe cel care rspunde necesitilor sale. Se poate
modifica structura tabelelor i cmpurilor, fie n derularea etapelor din Wizard sau mai trziu dup
ce asistentul a salvat fiierul. Dac sunt deschise una sau mai multe baze de date asistentul adaug
automat noul tabel la baza curent. Dac nu este deschis nici o baz de date asistentul creaz tabele
libere (free tables). Lansarea asistentului se face din submeniul Wizards din meniul sistem Tools,
opiunea Table:
pasul 1 selectarea cmpurilor : din fereastra Sample tables se poate alege unul sau mai multe
tabele prin opiunea Add. Pentru fiecare tabel sunt afiate cmpurile disponibile (Available fields)
care pot fi adugate n selecia cmpurilor utilizatorului (Selected fields) folosind butoanele: -
adaug cmpul selectat, - adaug toate cmpurile tabelului, - elimin cmpul selectat
- elimin toate cmpurile selectate.
pasul 2 selectarea unei baze de date: tabelul creat poate fi de sine stttor sau poate fi adugat la o
baz de date. Dac se creaz tabelul ntr-o baz de date asistentul va furniza opiunile de formatare
n pasul urmtor.
pasul 3 modificarea setrilor cmpurilor: se pot schimba setrile cmpurilor pentru tabelul creat.
De exemplu se poate modifica lungimea maxim a unui cmp de tip caracter.
pasul 4 indexarea tabelului : se selecteaz cmpul care va fi cheie primar de indexare n noul
tabel. Se pot desemna de asemenea alte cmpuri drept chei secundare.
6. Utilizarea asistentului Wizard n VFP
42


pasul 5 setarea relaiilor: dac tabelul aparine unei baze de date, se pot stabili relaiile ntre
cmpuri, ntre tabelul nou creat i tabelele existente n baz. Pentru definirea relaiei se face click cu
mouse-ul pe butonul radio care identific tipul relaiei, se selecteaz cmpul care se leag n baza de
date (dac se selecteaz new field, se va tipri numele) i operaia se termin cu click pe butonul
OK.
pasul 6 terminare (butonul Finish): noul tabel va fi afiat ntr-o fereastr de tip Browse. Se poate
alege opiunea Append New Record din meniul sistem Table, pentru a aduga nregistrri noi n
tabel. Dup salvarea fiierului, acesta poate fi deschis mai trziu pentru a modifica structura cu
aplicaia Table Designer.
Form Wizard creaz un videoformat pentru date extrase dintr-un singur tabel. Lansarea
asistentului se face utiliznd meniul sistem Tools, submeniul Wizard, opiunea Form:
pasul 1 selectarea cmpurilor: se face pe baza opiunilor utilizatorului exprimate n 3 ferestre:
Databases and tables, Available fields, Selected fields, la fel ca n cazul Wizard Table.
pasul 2 selectarea stilui videoformatului specific stilul controalelor din videoformat. n
fereastra Style este afiat o list cu tipurile de videoformate: standard, chiseled, shadowed, boxed,
embossed, fancy etc. Se poate alege din panoul cu butoane radio (Button type) tipul butoanelor
utilizate: Text buttons, Picture buttons, No buttons, Custom buttons. Tipul de butoane ales va
genera n videoformat butoane pentru navigare n fiier (Top, Previous, Next, Bottom), Find
(afieaz cutia de dialog Search - caut), Print (tiprete un raport), Add (adaug o nou
nregistrare), Delete (terge nregistrarea curent), Exit (nchide videoformatul).
pasul 3 sortarea nregistrrilor: se vor selecta acele cmpuri care dorim s fie sortate. Se poate
alege de asemenea o etichet (intrare) pentru un index (TAG).
pasul 4 terminare (butonul Finish): dac s-a ales un numr mare de cmpuri la pasul 1 i vrem s
fim siguri c toate cmpurile vor ncpea n videoformat se poate alege opiunea Add pages for
fields that do not fit. n caz contrar, dac numrul cmpurilor depete dimensiunea
videoformatului, VFP va afia formatul cu bare de deplasare (Scroll Bars). Videoformatul poate fi
vizualizat nainte de salvare cu opiunea Preview. Dup salvarea videoformatului, acesta poate fi
deschis mai trziu i modificat cu aplicaia Form Designer.

6.2. Report Wizard

Creaz rapoarte utiliznd o singur tabel liber sau o viziune ntr-o baz de date. Asistentul pune
ntrebri intr-o succesiune de pai, prin care se specific sursa i cmpurile pe care vrem s le
utilizm pentru a crea controalele raportului. Pentru lansarea asistentului se alege din meniul sistem
43
Baze de date


Tools, submeniul Wizard, opiunea Report. n cutia de dialog Wizard Selection se alege Report
Wizard:
pasul 1 selectarea cmpurilor: se introduc opiunile n cele 3 ferestre de dialog: Databases and
tables, Available fields, Selected fields. Selecia poate fi fcut dintr-un tabel sau o viziune.
pasul 2 gruparea nregistrrilor: se poate folosi gruparea datelor pentru a mpri pe categorii i a
sorta nregistrrile, pentru a fi mai uor de citit (de exemplu situaia ncasrii impozitelor pe familie,
pe sectoare i centralizat pe municipiu). Dup alegerea unui cmp n csua Group by, se pot alege
opiunile Grouping Options i Summary Option pentru a mbuntii selecia. Alegnd Grouping
Options se va deschide caseta de dialog Grouping Intervals care permite selectarea nivelurilor de
filtrare relevante pentru tipul de date coninute n cmpurile selectate pentru grupare. Alegnd
Summary Options se deschide o cutie de dialog n care utilizatorul poate specifica tipul de calcul
care se va aplica unui cmp numeric:
Tipuri de calcul Rezultat
SUM Suma valorilor din cmpul numeric specificat
AVG Media valorilor din cmpul numeric specificat
COUNT Numrarea nregistrrilor care conin valori non-NULL din cmpul
specificat
MIN Valoarea minim n cmpul numeric specificat
MAX Valoarea maxim n cmpul numeric specificat
Se pot alege de asemenea opiunile Summary only sau No Totals pentru raport. Cmpurile care sunt
selectate pentru grupare nu vor fi disponibile la pasul 3.
pasul 3 alegerea stilului pentru raport : sunt disponibile urmtoarele stiluri:Executive, Ledger,
Presentation, Banded, Casual, asistentul prezentnd ntr-un grafic, sub o lup, un exemplu al stilului
ales.
pasul 4 definirea formatului raportului: cnd se specific un numr de coloane sau se selecteaz
una din opiunile pentru format, asistentul prezint ntr-un grafic, sub o lup, un exemplu. Dac s-a
fcut opiunea de grupare la pasul 2, opiunile Columns i Field Layout nu mai sunt disponibile.
pasul 5 sortarea nregistrrilor: se pot selecta unul sau mai multe cmpuri sau o etichet de index
(TAG) n ordinea n care dorim s sortm nregistrrile (ascendent, descendent).
pasul 6 terminare (butonul Finish): dac numrul cmpurilor selectate nu ncap pe o singur linie
pe limea paginii de raport, acest cmp va fi nglobat pe linia urmtoare. Dac nu vrem s fie
nglobat cmpul pe linia urmtoare, se deselecteaz opiunea Wrap fields that do not fit. Cu butonul
Preview se poate vizualiza raportul fr a prsi asistentul. Dup salvarea raportului, acesta poate fi
deschis ulterior i modificat cu aplicaia Report Designer.
6. Utilizarea asistentului Wizard n VFP
44



6.3. Label Wizard

Asistentul pentru generarea de etichete cu date preluate dintr-un tabel. Pentru lansarea asistentului
se alege din meniul sistem Tools, submeniul Wizard, opiunea Label:
Pasul 1 selectarea tabelelor: se selecteaz un tabel sau o viziune.
Pasul 2 alegerea tipului de etichet: asistentul ofer o list cu tipurile de etichete standard care
sunt instalate odat cu VFP. Asistentul afieaz de asemenea lista cu tipurile de etichete care au fost
create de utilizator, prin folosirea aplicaiei AddLabel.
Pasul 3 - definirea formei etichetei: se adaug cmpurile n ordinea n care vrem s apar pe
etichet. Se pot folosi semnele de punctuaie, spaii, pentru a formata eticheta. Se folosete csua
Text pentru a adga textul. Pe msur ce se adaug elemente n etichet, asistentul va arta
modificrile fcute. Utilizatorul poate verifica imaginea etichetei pentru a vedea dac cmpurile
introduse se ncadreaz n dimensiuni. De asemenea se poate folosi butonul Font pentru a schimba
stilul i mrimea literelor folosite n etichet.
Pasul 4 sortarea nregistrrilor: se selecteaz cmpurile sau etichetele de index (TAG) n ordinea
n care dorim s sortm nregistrrile.
Pasul 5 terminare (butonul Finish): utilizatorul poate activa opiunea Preview pentru a verifica
restriciile impuse, nainte de terminare. Dup salvarea etichetei, aceasta poate fi deschis i
modificat cu aplicaia Label Designer.

6.4. Query Wizard

Asistentul de interogare, care pe baza tabelelor sau viziunilor selectate pentru a furniza informaii,
extrage nregistrrile care ndeplinesc criteriile de filtrare i direcioneaz rezultatele ctre tipul de
ieire specificat: fereastr Browse, raport, tabel, etichet etc. Pentru lansarea asistentului se alege
din meniul sistem Tools, submeniul Wizard, opiunea Query Wizard:
Pasul 1 selectarea cmpurilor: se pot selecta cmpuri din diferite tabele sau viziuni. Mai nti se
selecteaz cmpurile dintr-un tabel sau viziune, se mut n csua Selected fields, utiliznd
butoanele de adugare; apoi se selecteaz cmpurile din alt tabel sau viziune etc.
Pasul 2 stabilirea relaiilor ntre tabele: utilizatorul poate selecta cmpurile comune mai multor
fiiere din lista afiat, pentru a stabili relaiile ntre tabele sau viziuni.
Pasul 3 includerea nregistrrilor: se poate limita interogarea (query) alegnd din dou tabele,
numai liniile care coincid, sau toate liniile dintr-unul din tabele. Implicit numai nregistrrile care
45
Baze de date


coincid sunt incluse. Dac vrem s cream o jonciune intern selectm opiunea Only matching row
(numai nregistrrile care coincid). Dac vrem s realizm o jonciune extern, selectm toate
nregistrrile din unul din cele dou tabele.
Pasul 4 filtrarea nregistrrilor: se poate reduce numrul nregistrrilor selectate n interogare, prin
crearea de expresii logice care s filtreze nregistrrile din tabelele sau viziunile alese. Se pot crea
dou expresii logice, legate cu operatorul And, care va permite selectarea numai a acelor
nregistrri care satisfac ambele criterii. Utilizarea operatorului Or face ca n selecia nregistrrilor,
s intre acelea care satisfac doar unul din criterii. Opiunea Preview permite vizualizarea
nregistrrilor care vor fi incluse n interogare (Query), pe baza aplicrii criteriilor de filtrare.
Pasul 5 sortarea nregistrrilor: se pot selecta pn la 3 cmpuri (chei de sortare) sau o etichet de
index (TAG) pentru a stabili ordinea n care rezultatele interogrii vor fi sortate (ascendent sau
descendent).
Pasul 6 limitarea nregistrrilor: se poate limita suplimentar numrul de nregistrri n interogare,
fie indicnd un procent de vizualizare din numrul de nregistrri cu valorile cele mai mari (sortare
descendent) / mai mici (sortare ascendent), fie indicnd numrul de nregistrri cu valorile cele
mai mari/mai mici, care va fi afiat. De exemplu, pentru a vedea doar primele 10 nregistrri cu
valoarea cea mai mare din interogare (sortare descendent), se introduce la opiunea Number of
records valoarea 10 n csua Portion value. Cu opiunea Preview se pot vizualiza rezultatele
interogrii pe baza restriciilor impuse.
Pasul 7 terminare (butonul Finish): dup ce interogarea a fost salvat, ea poate fi deschis ulterior,
lansnd aplicaia Query Designer.

6.5. Mail Merge Wizard

Asistentul pentru documente interclasate (fuziune / unire) de tip Word sau fiiere de tip text care
sunt compatibile cu orice procesor de text. Pentru a executa aplicaia trebuie s avem instalat o
versiune Microsoft Word curent pecum i protocolul standard pentru servere baze de date, ODBC
(Open Database Connectivty). ODBC se instaleaz pentru diferite tipuri de baze de date i va
permite programului VFP 6.0 s se conecteze la baza de date i s acceseze datele. Pentru lansarea
asistentului se alege din meniul sistem Tools, submeniul Wizard, opiunea Mail Merge:
Pasul 1 selectarea cmpurilor: se pot selecta cmpuri doar dintr-un singur tabel sau viziune.
Pasul 2 alegerea procesorului de text: trebuie s fie instalat o versiune curent de Microsoft
Word n cazul n care alegem opiunea Microsoft Word. Dac selectm opiunea Comma-delimited
text file, asistentul va sri peste paii 3 i 4 i va merge direct n ecranul de terminare.
6. Utilizarea asistentului Wizard n VFP
46


pasul 3 selectarea tipului de document: se creaz un nou document sau se adaug date la un
Pocument existent.
Pasul 4 selectarea stiluilui documentului: se selecteaz unul din tipurile de fiiere pe care le
recunoate programul Word. Dac crem un document nou se va specifica tipul documentului Form
Letter, Label, Envelope, Catalog.
Pasul 5 terminare (butonul Finish): dac am selectat crearea unui document nou n Word,
asistentul va deschide documentul n Microsoft Word. Dac am selectat opiunea de creare a unui
fiier de tip text, asistentul l va salva.

Introducerea unui cmp al bazei de date n documentul Word se face astfel:
se poziioneaz cursorul n locul din document unde se dorete inserarea cmpului;


pe bara de instrumente pentru interclasare din opiunea pop-up Insert Merge Field se alege numele
cmpului pe care l inserm;
activnd opiunea - View Merged Data (vizualizarea datelor care au fuzionat), putem
vedea efectiv valoarea cmpului selectat pentru inserare. Butoanele pentru deplasare la nceputul /
sfritul fiierului sau secvenial nainte / napoi, vor muta pointerul de fiier pe nregistrarea
corespunztoare, afind noua valoare a cmpului, n documentul Word.

6.6. Editorul de texte n VFP 6.0

Mediul VFP 6.0 pune la dispoziia utilizatorului un editor de texte, pentru crearea fiierelor de tip
text, aplicaie care se deschide ntr-o fereastr de tip Windows. Lansarea editorului se face fie cu
comenzile:
MODIFY FILE <nume_fiier> && modificare fiier de tip text;
MODIFY COMMAND <nume_program> && modificare program surs.
introduse n fereastra de comenzi, fie din meniul sistem se alege meniul File, submeniul New,
opiunea Program / Text File. n editor se pot folosi pentru deplasare: tastele cu sgei direcionale,
<Page Up> - o pagin ecran n sus, <Page Down> - o pagin ecran n jos, <Home> - la nceputul
rndului, <End> - la sfritul rndului curent.
Lucrul cu blocul de linii din fiier
Asupra unei linii sau unui bloc de linii de text se pot executa urmtoarele operaii:
47
Baze de date


marcarea blocului se ine tasta <Shift> apsat i cu una din sgeile direcionale, sau tastele
<Home>, <End>, <Page Up>, <Page Down> se marcheaz liniile de text (care vor apare n video-
invers).
copierea blocului de linii marcat n Clipboard se face:
folosind opiunea Cut din meniul Edit sau apsnd simultan tastele <Ctrl>+<X>, textul selectat va fi
ters din fiier;
folosind combinaia de taste <Ctrl>+<C>, caz n care textul rmne n fiier.
inserarea la o nou poziie n fiier a textului din Clipboard se face utiliznd opiunea Paste din
fereastra Edit sau combinaia de taste <Ctrl>+<V>.
deselectarea unui bloc de linii se face fie apsnd una din sgeile direcionale sau butonul stng
de la mouse.
Programele n VFP au ca regul general, scrierea instruciunilor pe o singur linie (255 caractere).
Dac totui vrem s scriem o instruciune pe mai multe rnduri, la sfritul fiecrei linii se pune un
caracter de continuare ; .
7. Elemente ale limbajului propriu Visual FoxPro 6.0
48



7. Elemente ale limbajului propriu Visual FoxPro 6.0

7.1. Simboluri

Pentru scrierea comenzilor (instruciunilor) se folosesc:
literele alfabetului latin, litere mari / litere mici, compilatorul nefcnd diferen ntre cele
dou tipuri;
cifrele 0..9;
caractere speciale: +, -, *, /, (, ), <, >, =, &, @, !, , , #, $, %, ^, \, |, _, spaiu, ;, virgula, ?.

7.2. Variabile de sistem

Sunt variabile proprii sistemului, predefinite, la care utilizatorul are acces. Folosirea lor n program
nu implic operaii de iniializare, incrementare. De exemplu, variabila _PAGENO=n conine
numrul paginii n dintr-un raport, cu ajutorul ei putndu-se controla afiarea paginii n la monitor
sau la imprimant.

7.3. Comentariul

Se folosete pentru a indica nceputul unei linii neexecutabile n program. Sunt admise pentru
comentariere:
caracterul * plasat la nceputul liniei va comentaria ntreagul rnd (fr spaiu de demarcare);
caracterele && plasate la nceputul / sfritul liniei, cu cel puin un spaiu de demarcare fa de
textul propriu-zis;
cuvntul rezervat NOTE, pentru a comentaria mai multe rnduri de text, se introduce n continuare
prima linie de comentariu (la distan de minim un spaiu), se marcheaz continuarea comentariului
pe rndul urmtor cu caracterul punct i virgul (;), nchiderea comentariului se face cu caracterul
punct.

7.4. Tipuri de date, operaii i funcii

49
Baze de date


Datele (variabile sau constante) utilizate n programare pot fi simple sau sub form de masiv de date
(vectori, matrici, care presupun o ordonare a datelor dup un criteriu de poziie). La rndul lor
aceste dou categorii pot fi alctuite din date de tip:
logic, care nu pot lua dect dou valori: .T. (adevrat) i .F. (fals);
numeric;
ir de caractere, reprezint o mulime ordonat de caractere, fiecare caracter avnd un
numr de ordine n ir, numerotarea ncepnd cu 1. irurile de caractere (constante) se scriu
ntre apostroafe sau ghilimele;
calendaristic.
Se pot construi expresii, combinnd datele (operanzi) cu operaii specifice (operatori). Operatorii la
rndul lor sunt de tip:
logic, lucreaz cu toate tipurile de date i returneaz o valoare logic (.T. / .F.)

Operator Aciune Cod
( ) gruparea expresiilor logice Cvar1 AND (Cvar2 AND Cvar3)
NOT, ! negare logic IF NOT CvarA = CvarB sau IF ! Nvar1 = Nvar2
AND I logic LvarX AND LvarY
OR SAU logic LvarX OR LvarY
unde Cvar variabil de tip caracter, Nvar variabil de tip numeric, Lvar variabil de tip logic.
relaional, lucreaz cu toate tipurile de date, expresia este evaluat i se returneaz o valoare
logic .T. / .F.(adevrat / fals).

Operator Aciune Cod
< mai mic dect ? 23 < 54
> mai mare dect ? 1 > 2 sau ?.t.>.f.
= egal cu ? cVar1 = cVar
<>, #, != diferit de ? .T. <> .F.
<= mai mic egal cu ? {^1998/02/16} <= {^1998/02/16}
7. Elemente ale limbajului propriu Visual FoxPro 6.0
50


>= mai mare egal cu ? 32 >= n_ani
== comparare iruri de caractere ? status == "Open"
n cazul variabilelor de tip caracter operatorii relaionali funcioneaz prin compararea codurilor
ASCII corespunztoare caracterelor din cele dou iruri, comparaia fcndu-se caracter cu caracter,
de la stnga la dreapta.
Dac irurile care se compar nu au aceeai lungime, implicit se completeaz irul mai scurt cu
codul ASCII pentru caracterul 0.
Operaia de egalitate a dou iruri de caractere este controlat de comanda:
SET EXACT ON|OFF
prin clauza OFF, implicit, se consider c cele dou iruri sunt egale n cazul cnd caracterele
coincid pe lungimea celui mai scurt.
prin clauza ON, egalitatea se verific pe lungimea irului mai lung, spaiile de la sfritul irurilor
sunt ignorate.

numeric, lucreaz cu toate tipurile de date numerice.
Operator Aciune Cod
( ) gruparea subexpresiilor (4-3) * (12/Nvar2)
**, ^ exponent (putere) ? 3 ** 2 sau ? 3 ^ 2
*, / nmulire, mprire ? 2 * 7 sau ? 14 / 7
% restul mpririi (modulo) ? 15 % 4
+, - adunare, scdere ? 4 + 15
Ordinea operatorilor din tabel este cea folosit n matematic.
Operaia modulo (%) se mai poate executa apelnd funcia MOD(n1,n2) care va calcula restul
mpririi numrului n1 la numrul n2.

caracter, care permite concatenarea, compararea datelor de tip ir de caracatere, utiliznd
urmtorii operatori:
Operator Aciune Cod
+ Concatenare. Se unesc dou iruri de caractere, un ir i un cmp dintr-o ? 'Bun ' + 'ziua'
51
Baze de date


nregistrare sau un ir de caractere i o variabil
- Concatenare. Se ndeprteaz spaiile goale de la sfritul elementului
care precede operatorul, apoi se unesc cele dou elemente.
? 'Bun ' +
'seara'
$ Comparare. Se caut un ir de caractere n interiorul altui ir de
caractere.
? 'punct' $
contrapunct'
? 'principal' $
clienti.adresa

7.4.1. Date de tip numeric. Funcii aritmetice i financiare

Expresiile de tip numeric pot fi:
cmpuri de tip numeric (N), ntreg (I), virgul mobil (F) dintr-un tabel;
funcii care returneaz o variabil (constant) numeric;
variabile i constante de tip numeric.

Scop / reprezentare matematic Funcie VFP
restul mpririi exacte a lui n
1
la n
2
mod (n
1
,n
2
)
x

abs(x)
partea ntreag a lui x int(x)
urmtorul ntreg mai mare sau egal cu x (plafon) ceiling(x)
urmtorul ntreg care este mai mic sau egal cu x (podea) floor(x)
rotunjirea unei expresii numerice la un numr specificat de zecimale round(nExpr,nr_zecimale)
e
x
exp(x)
ln(x) log(x)
x
10
log

log10(x)
x

sqrt(x)
sin x sin(x)
cos x cos(x)
tg x tan(x)
arcsin x asin(x)
arccos x acos(x)
7. Elemente ale limbajului propriu Visual FoxPro 6.0
52


arctg x atan(x)
trecerea din grade n radiani dtor(x)
trecerea din radiani n grade rtod(x)
alegerea numrului de zecimale n set decimals to n
valoarea constantei PI()

Funcii financiare

Scop Funcie VFP
returneaz valoarea ratei necesare pentru achitarea unui mprumut s, cu
dobnda d*, pe perioada nr** (annual sau lunar)
PAYMENT(s,d,nr)
returneaz suma ce trebuie depus n cont pentru a plti o rat s, pe o
perioad nr (ani sau luni), dac dobnda acordat este d
PV(s,d,nr)
(Present Value)
returneaz suma ce se poate strnge n cont, dup o perioad nr (ani
sau luni), dac dobnda este d iar rata depunerii este s
FV(s,d,nr)
(Future Value)

*Argumentul d (dobnda) este utilizat n form zecimal (d=0.06 6%). Dac dobnda se preia sub
form procentual se va mprii la 100. Implicit este dobnda anual.
**Argumentul nr (perioada) este implicit exprimat n ani. Dac calculul se efectueaz pentru o
perioad exprimat n luni, va terbui modificat corespunztor i dobnda (anual lunar).

7.4.2. Aplicaii ale funciilor financiare

A. Funcia PAYMENT returneaz valoarea fiecrei pli, dintr-o serie periodic de pli (rat), a
unui mprumut s, cu dobnda fix d, pe o perioad nr. Sintaxa funciei:
PAYMENT(s,d,nr)

Exemplu. Firma DAEWOO vinde autoturisme marca MATIZ care pot fi achitate n rate lunare, pe
o perioad de trei ani. mprumutnd de la BRD suma de 6000 $ cu dobnda anual de 5.3%, s se
stabileasc care este rata lunar pe care trebuie s o achite un client.

n fereastra de comenzi introducem comanda pentru crearea fiierul surs IMPR:

MODI COMM IMPR
53
Baze de date


se lanseaz editorul de programe VFP i se introduc liniile de comenzi (instruciuni):
SET TALK OFF && anuleaz afiarea rezultatelor comenzilor
CLEAR && cur spaiul de afiare
SET CURRENCY TO '$' && definirea simbolului monedei
STORE 0 TO S,NR && iniializarea variabilelor S, NR cu 0
D=0.00 && iniializarea variabilei D
@5,20 SAY 'STABILIREA RATEI LUNARE PENTRU UN IMPRUMUT'
@7,15 SAY 'SUMA IMPRUMUTATA ?:' GET S
NOTE afiarea la coordonate fixate de carcaterul @ (linia 7, coloana 15) a mesajului dintre
apostroafe i editarea variabilei S.
@9,15 SAY 'DOBANDA ANUALA (%) ?:' GET D
@11,15 SAY 'IN CATE LUNI TREBUIE ACHITAT IMPRUMUTUL ?:' GET NR
READ && citirea ntregului ecran variabilele editate cu @.. GET
D=D/12/100 && transformare dobnd anual procentual, n dobnd lunar, exprimat zecimal
@15,20 SAY 'RATA LUNARA ESTE DE '
SET CURRENCY RIGHT && setarea afirii simbolului monedei la dreapta
@15,45 SAY PAYMENT(S,D,NR) FUNCTION '$9999.99' && afiarea rezultatului funciei i a
monedei
WAIT WINDOW 'APASATI ENTER'

Fereastra de editare se nchide cu <CTRL>+<W> sau din butonul de nchidere i se salveaz
fiierul. Lansarea n execuie a programului se face fie din meniul sistem Program/Do, fie din bara
de instrumente se activeaz icon-ul cu semnul exclamrii, sau n fereastra de comenzi se introduce
comanda
DO IMPR
Rata lunar este 180.63 $.

B. Funcia PV returneaz valoarea sumei pe care trebuie s o avem n cont, pentru a putea plti o
rat s, pe o perioad nr, pentru o dobnd anual d acordat de banc la depozit. Sintaxa funciei:
PV(s,d,nr)

Exemplu. O firm trebuie s achite o chirie lunar de 300 $ pentru sediu, pe o perioad de 5 ani.
Ci bani trebuie depui n cont la banca BCR, dac dobnda la acest tip de depozit este de 4% pe
an.
7. Elemente ale limbajului propriu Visual FoxPro 6.0
54



n fereastra de comenzi introducem comanda pentru crearea fiierului CONT:

MODI COMM CONT
se lanseaz editorul de programe VFP i se introduc liniile de comenzi:
SET CLOCK ON && afiarea timpului dat de sistemul de operare
CLEAR
STORE 0 TO S,NR
D=0.00
@5,25 SAY STABILIREA SUMEI NECESARE IN CONT PENTRU PLATA UNEI RATE
LUNARE
@7,20 SAY RATA LUNARA ?: GET S
@9,20 SAY DOBANDA ANUALA (%) ?: GET D
@11,20 SAY PERIOADA (LUNI) DE ACHITARE A RATEI ?: GET NR
READ
D=D/12/100
@13,25 SAY SUMA INITIALA DIN CONT TREBUIE SA FIE DE ;
+ALLTRIM(STR(PV(S,D,NR),10,2))+ $
NOTE funcia STR() transform o valoare numeric ntr-un ir de caractere;
funcia ALLTRIM() elimin spaiile de la nceputul i sfritul irului.
WAIT WINDOW APASATI ENTER

Se salveaz programul i se lanseaz n execuie cu comanda:
DO CONT
Suma necesar este 16289.72$.

C. Funcia FV returneaz valoarea sumei ce se strnge ntr-un cont, n cazul n care se depune o rat
s, banca ofer o dobnd anual d, pe o perioad nr. Sintaxa funciei:
FV(s,d,nr)

Exemplu. Ce sum va strnge n cont un copil, care primete pensie alimentar timp de 10 ani, cte
50 $ pe lun, la o banc ce ofer o dobnd de 4% pe an ?

n fereastra de comenzi introducem comanda pentru crearea fiierului SUMA:
55
Baze de date



MODI COMM SUMA
se lanseaz editorul de programe VFP i se introduc liniile de comenzi:
CLEAR
STORE 0 TO S,NR
D=0.00
@5,25 SAY STABILIREA SUMEI STRANSE IN CONT DUPA O PERIOADA DE TIMP
@7,20 SAY RATA LUNARA ?: GET S
@9,20 SAY DOBANDA ANUALA ?: GET D
@11,20 SAY PERIOADA (LUNI) DE DEPUNERE A RATEI ?: GET NR
READ
D=D/12/100
@13,25 SAY SUMA STRANSA IN CONT ESTE +ALLTRIM(STR(FV(S,D,NR),10,2))+ $
WAIT WINDOW APASATI ENTER

Se salveaz programul i se lanseaz n execuie cu comanda:
DO SUMA
Suma strns n cont este 7462.49$.

7.4.3. Date i funcii de tip caracter

Operanzii de tip caracter pot fi:
cmpurile de tip CHARACTER ale unui tabel;
funciile care returneaz un ir de caractere;
variabile i constante de tip ir de caractere.
Dac irul de caractere conine n componena sa caracterul () atunci pentru definirea irului se
folosesc caracterele ().
7. Elemente ale limbajului propriu Visual FoxPro 6.0
56



Scop Funcie VFP
Returneaz caracterul corespunztor codului ASCII n (I=1...127) CHR(n)
Returneaz codul ASCII pentru un caracter c ASC(c)
Extragerea unui subir de de caractere, de lungime n
2
, din irul s, ncepnd cu
poziia n
1

SUBSTR(s,n1,n2)
Extragerea unui subir de n caractere, ncepnd din stnga irului s LEFT(s,n)
Extragerea unui subir de n caractere, ncepnd din dreapta irului s RIGHT(s,n)
Returnarea unui ir de caractere s, n mod repetat de n ori REPLICATE(s,n)
Obinerea unui ir de n spaii goale SPACE(n)
Eliminarea spaiilor ntr-un ir de caractere:
de la nceputul i sfritul irului s
de la nceputul irului s
de la sfritul irului s

ALLTRIM(s)
LTRIM(s)
RTRIM(s)
Adugarea de spaii, sau a unui caracter c_pad, ntr-un ir s pentru a ajunge la
lungimea n:
la ambele capete
la stnga
la dreapta


PADC(s,n[,
c_pad])
PADL(s,n[,c_pad])
PADR(s,n[,c_pad])
Returneaz lungimea unui ir de caractere s LEN(s)
Returneaz poziia de nceput, la a n-a apariie, a unui subir de caractere ss
ntr-un ir de caractere s
AT(s,ss,n)
Returneaz poziia de nceput, la a n-a apariie, a unui subir de caractere ss
ntr-un ir de caractere s, fr a se ine seama de litere mari/mici
ATC(s,ss,n)
Returneaz poziia numeric, la a n-a apariie, a unui subir de caractere ss
ntr-un ir de caractere s, ncepnd cutarea de la dreapta
RAT(s,ss,n)
Transformarea caracterelor unui ir s n litere mari UPPER(s)
Transformarea caracterelor unui ir s n litere mici LOWER(s)
Transformarea primului caracter al unui ir s, dac este o liter, n majuscul PROPER(s)
7.4.4. Date i funcii de tip calendaristic

Expresiile de tip dat calendaristic pot fi:
cmpuri de tip dat calendaristic (DATE), dintr-un tabel;
57
Baze de date


funcii care returneaz data calendaristic;
constante de tip dat calendaristic.
O dat de tip dat calendaristic precizeaz ziua, luna, anul, ordinea acestor 3 elemente poate fi
aleas din 11 moduri, cu ajutorul comenzii:
SET DATE TO <tip_dat>
unde:
tip_dat Format
AMERICAN ll/zz/aa
ANSI aa.ll.zz
BRITISH zz/ll/aa
FRENCH zz/ll/aa
GERMAN zz.ll.aa
ITALIAN zz-ll-aa
JAPAN aa/ll/zz
USA ll-zz-aa
MDY ll/zz/aa
DMY zz/ll/aa
YMD aa/ll/dd
Cele 3 elemente pot fi separate cu /, -, .. Implicit se consider formatul: ll/zz/aa.
Cu comanda:
SET CENTURY ON|OFF
se poate preciza dac anul este este afiat cu 2 cifre (ON) sau 4 cifre (OFF).
Comanda:
SET MARK TO <caracter>
precizeaz ce caracter se va folosi ca separator ntre cele 3 elemente ale datei.
Funcii pentru datele de tip dat calendaristic sunt date n tabelul urmtor:
7. Elemente ale limbajului propriu Visual FoxPro 6.0
58



Scop Funcie VFP
Returneaz data din sistem(calculator) DATE()
Numele zilei dintr-o expresie de tip dat d CDOW(d)
A cta zi din sptmn dintr-o expresie de tip dat d DOW(d)
Numele lunii dintr-o expresie de tip dat d CMONTH(d)
A cta lun din an dintr-o expresie de tip dat d MONTH(d)
Izolarea anului dintr-o expresie de tip dat d YEAR(d)
Returneaz ora din sistem (calculator) TIME()
Returnarea sub form de ir de caractere, n format aaaallzz a unei
expresii de tip dat calendaristic d
DTOS(d)
Folosirea ntr-un program a unei constante de tip dat calendaristic, se face ntre acolade
({^31/01/01}).

7.4.5. Date de tip memo

Acest tip de date este asemntor tipului ir de caractere. Este indicat folosirea datelor de tip memo
n cazul n care un cmp al unei nregistrri dintr-un tabel, nu are o lungime cunoscut (sau care nu
poate fi aproximat). Utilizarea unui cmp memo ntr-un tabel, are ca efect asocierea la tabel a unui
fiier suplimentar n care se depun datele cmpului memo. n tabel, n cmpul memo sunt stocate
informaii referitoare la tabelul suplimentar.

7.5. Variabile i masive

7.5.1. Variabile

O variabil are asociate urmtoarele elemente:
numele
coninutul
tipul variabilei
Din punct de vedere al utilizrii lor, variabilele pot fi:
locale, acioneaz ntr-o funcie sau procedur. Declararea utilizrii lor se face cu comanda:
LOCAL <list_variabile>
<list_variabile> - variabilele se declar prin nume i tip.
59
Baze de date


globale, acioneaz la nivelul ntregului program, inclusiv n funcii i proceduri. Declararea
utilizrii lor se face cu comanda:
PUBLIC <list_variabile>
Atribuirea de valori unei variabile se face cu sintaxa:
<nume_var>=<expresie>
Efectul comenzii: se evaluaez expresia din dreapta, se caut dac variabila a fost definit i i se
atribuie valoarea i tipul expresiei.
Atribuirea se mai poate face utiliznd comanda:
STORE <expresie> TO <list_variabile>
Efectul comenzii: se evaluaz expresia i se atribuie variabilelor din list, valoarea i tipul ei.
Eliberarea zonelor de memorie ocupate de variabile care nu mai sunt necesare n program se face
cu una din comenzile:
RELEASE [ALL] <list_variabile>
CLEAR [ALL] <list_variabile>
Afiarea coninutului variabilelor existente n memorie se face cu comenda:
DISPLAY MEMORY [TO PRINTER[PROMPT] | TO FILE nume_fiier] [NOCONSOLE]
unde:
TO PRINTER[PROMPT] ieirea la imprimant. Clauza PROMPT se folosete pentru a confirma
imprimarea, ntr-o fereastr de dialog;
TO FILE nume_fiier ieirea direcionat ctre un fiier;
[NOCONSOLE] mpiedic afiarea n fereastra principal VFP, a rezultatelor comenzii.

7.5.2. Macro substituia

Macro substituia trateaz coninutul unei variabile ca un ir de caractere n sens literal (cmpul unei
nregistrri dintr-o tabel, nume de fiier etc.), ca i cum n locul variabilei respective ar fi pus irul
de caractere fr apostrofuri.
Sintaxa comenzii:
& nume_variabil

Exemplu. Presupunem c avem 2 fiiere ESTUD1.DBF i ESTUD2.DBF. Vrem s le vizualizm
coninutul ntr-un ciclu FOR.

PUBLIC FIS C(20)
7. Elemente ale limbajului propriu Visual FoxPro 6.0
60


FOR I=1 TO 2
FIS='ESTUD'+ALLTRIM(STR(I))+'.DBF'
USE &FIS
BROWSE
ENDFOR
CLOSE DATABASES


7.5.3. Masive de date: vectori i matrici

Masivele de date pot fi privite ca variabile sau constante, care au o structur compus, identificarea
n cadrul structurii fcndu-se pe baza unui criteriu de poziie. Pentru vector criteriul de poziie este
numrul de ordine al elementului, pentru matrice, criteriul de poziie este fie numrul liniei i al
coloanei, fie liniariznd matricea, se poate adresa un element prin poziia care o ocup n masiv (de
exemplu, ntr-o matrice A de dimensiune 3x3, elementul A(3,2) este al 8-lea element din matrice i
se poate adresa cu A(8)). Prin liniarizare o matrice poate fi adresat ca un vector. Calculul poziiei
n matricea liniarizat (vector), pe baza coordonatelor linie/coloan se poate face cu formula:
poziie=(linie-1)*Nr_linii+coloan
Utilizarea masivelor de date comport urmtoarele aspecte:
atribuirea unui nume pentru identificare;
declararea tipului de masiv: vector sau matrice (rezervare zon de memorie);

7.6. Declararea i utilizarea vectorilor i matricelor

Masivele (vectori , matrice) de date pot fi declarate n dou moduri:
fie la nceputul programului sau al subprogramului, utiliznd comanda PUBLIC (variabi
global) sau LOCAL (variabil local):
PUBLIC [ARRAY] nume_masiv1(n_linie[,n_col])[, nume_masiv2(n_linie[,n_col])...
LOCAL [ARRAY] nume_masiv1(n_linie[,n_col])[, nume_masiv2(n_linie[,n_col])...
Variabilele create cu PUBLIC / LOCAL sunt iniializate cu valoarea fals (.F.). Variabilele locale
sunt legate de funcia sau procedura n care au fost declarate, dar pot fi transmise prin referin;
fie n interiorul programului utiliznd una din comenzile:
DIMENSION [ARRAY] nume_masiv1(n_linie[,n_col])[, nume_masiv2(n_linie[,n_col])...
DECLARE [ARRAY] nume_masiv1(n_linie[,n_col])[, nume_masiv2(n_linie[,n_col])...
61
Baze de date


Elementele masivului sunt iniializate cu valoarea fals ca i n primul caz.
Dup declarare, masivul poate fi iniializat global (toate elementele capt aceeai valoare) i cu
aceast operaie se stabilete tipul de date al elementelor masivului:
STORE <val_init> TO <nume_masiv>

Exemplu
DIMENSION MAT(5,7)
STORE 0 TO MAT
Tipul i dimensiunile unui masiv de date pot fi modificate n cadrul aceluiai program, prin noi
declaraii DIMENSION, DECLARE.

7.7. Funcii de prelucrare a masivelor

ALEN (nume_masiv,n)
Returneaz urmtoarele informaii:
numrul de elemente, dac n=0;
numrul de linii, dac n=1;
numrul de coloane, dac n=2.

AINS(nume_masiv,n[,2])
Are ca efect:
inserarea unui element nou ntr-un vector, inaintea elementului de pe poziia n;
inserarea unei linii ntr-o matrice, naintea liniei cu numrul n, argumentul 2 lipsete;
inserarea unei coloane ntr-o matrice, naintea coloanei cu numrul n, argumentul 2 apare.
Funcia returneaz valoarea 1 dac inserarea s-a efectuat cu succes.

Observaie. Inserarea unui element, a unei linii sau coloane ntr-un masiv nu modific dimensiunea
masivului, ci duce la pierderea elementelor de pe poziia n.

ADEL(nume_masiv,n,[2])
Este operaia invers comenzii AINS, deci are ca efect tergerea elementului, liniei, coloanei de pe
poziia n. Argumentul 2 trebuie s apar n cazul n care tergem o coloan dintr-o matrice.
Prin cele dou funcii elementele unui masiv sunt translatate cu o poziie la dreapta (AINS) sau la
stnga (ADEL). Funcia va returna valoarea 1 dac tergerea liniei/coloanei s-a efectuat cu succes.
7. Elemente ale limbajului propriu Visual FoxPro 6.0
62



ACOPY(masiv_surs,masiv_destinaie[,nr_ncep_surs[,nr_elem_copiate[,nr_ncep_destin]]])
Este comanda de copiere a elementelor unui masiv (surs) n elementele altui masiv (destinaie),
unde:
masiv_surs, masiv_destinaie numele masivelor surs/destinaie;
nr_ncep_surs numrul elementului din surs de la care ncepe copierea;
nr_elem_copiate numrul de elemente ce vor fi copiate din masivul surs, dac are
valoarea 1 toate elementele ncepnd cu poziia nr_ncep_surs vor fi copiate;
nr_ncep_destin numrul elementului din masivul destinaie de la care ncepe inserarea.
Funcia returneaz numrul elementelor copiate n masivul destinaie.

ASORT(nume_masiv[,nr_ncep[,nr_elem_sortate[,nr_ordine_sortare]]])
Comanda are ca efect sortarea elementelor unui masiv, putnd preciza primul element de la care
ncepe sortarea (nr_ncep), cte elemente vor fi sortate (nr_elem_sortate). Ordinea de sortare
(nr_ordine_sortare) va fi ascendent dac argumentul este 0 sau omis, sau descendent dac
argumentul este 1 sau orice valoare diferit de 0.
Funcia va returna valoarea 1 dac sortare s-a efectuat cu succes, sau 1 n caz contrar.

Exemplu. Secvena urmtoare de comenzi va crea o matrice cu 3 linii i 2 coloane, elementele
masivului se identific prin numrul de ordine n matricea liniarizat:
DIMENSION LIT(3,2)
LIT(1) = 'G'
LIT(2) = 'A'
LIT(3) = 'C'
LIT(4) = 'Z'
LIT(5) = 'B'
LIT(6) = 'N'
Elementele din matrice vor fi distribuite astfel:
LINI
A
COL. 1 COL. 2
1 G A
2 C Z
3 B N
Sortm masivul cu comanda ASORT()
63
Baze de date


ASORT(LIT,1)
Sortarea ncepe cu primul element al masivului (1,1). Elementele din prima coloan a masivului
sunt plasate n ordine ascendent prin rearanjarea liniilor masivului.
LINI
A
COL. 1 COL. 2
1 B N
2 C Z
3 G A

Apoi masivul este sortat ncepnd cu elementul 4 (2,2) din masiv
=ASORT(LIT,4)
Elementele din coloana a 2-a sunt plasate n ordine ascendent prin rearanjarea liniilor masivului,
ncepnd cu elementul 4 din masiv.
LINI
A
COL. 1 COL. 2
1 B N
2 G A
3 C Z
Dac sortarea se efectueaz cu succes funcia returneaz valoarea 1, n caz contrar valoarea 1.
Pentru a putea fi sortate, elementele masivului trebuie s fie de acelai tip.
8. Accesul i actualizarea datelor
64


8. Accesul i actualizarea datelor

Lucrul cu baze de date i tabele n cadrul limbajului propriu VFP, presupune 3 activiti, care
segmenteaz construcia unei aplicaii:
deschidere/creare baza de date, tabele, fiiere asociate (index);
exploatarea bazei de date i a tabelelor, ceea ce implic operaii de actualizare i consultare,
la nivel de structur sau nregistrri;
nchiderea/tergerea bazei de date, a tabelelor sau a fiierelor asociate (index).
Comenzile pentru operaiile de deschidere, creare, nchidere a unei baza de date (OPEN
DATABASES..., CREATE DATABASES, CLOSE DATABASES), tabel de date (USE...,
CREATE TABLE..., CLOSE TABLES, USE), fiiere de index (USE...INDEX..., INDEX ON...,
CLOSE INDEX) n modul de lucru comand (interpretor), au aceeai sintax i n cadrul
programelor scrise n limbajul propriu VFP.

8.1. Manipularea structurii unei tabele

Modificarea structurii unei tabele se face cu comanda
MODIFY STRUCTURE
Dac nu este deschis nici un tabel n zona de lucru curent, se deschide caseta de dialog Open care
permite utilizatorului selectarea (deschiderea) unui tabel. Comanda are ca efect lansarea aplicaiei
Table Designer (proiectantul de tabele) cu ajutorul cruia se fac modificrile de structur (adugare
i tergere de cmpuri, modificare nume cmp, mrime, tip, adugarea/tergerea/modificarea
etichetelor de index, specificarea valorilor de tip NULL).

Vizualizarea structurii unei tabele se face cu comanda
DISPLAY STRUCTURE [IN <nr_zon_de_lucru> | <alias_tabel>] [TO PRINTER [PROMPT] [TO
FILE <nume_fiier>] [NOCONSOLE] IN <nr_zon_de_lucru> | <alias_tabel>
Are ca efect afiarea structurii tabelului dintr-o zon de lucru, alta dect cea curent, sau a unui
tabel adresat prin alias. Semnificaia clauzelor este urmtoarea:
TO PRINTER [PROMPT] direcioneaz informaiile la imprimant.
Clauza PROMPT determin afiarea unei casete de dialog nainte de ieirea la imprimant
(se pot face setri legate de imprimant).
TO FILE <nume_fiier> - direcioneaz ieirea informaiilor ntr-un fiier.
65
Baze de date


NOCONSOLE suprim afiarea datelor n ferestra principal a VFP.
Se mai poate folosi i comanda LIST STRUCTURE care are aceleai clauze.

Copierea structurii unui tabel
Crearea unui nou tabel care va conine structura tabelului activ se face cu comanda
COPY STRUCTURE EXTENDED TO <nume_fiier> [FIELDS <list_cmpuri>]
Numai cmpurile din lista de cmpuri vor fi incluse n nregistrarea din noul fiier. Dac clauza
FIELDS este omis, vor fi incluse toate cmpurile tabelului surs.

8.3. Accesul la date

n funcie de tipul accesului la date, comenzile sunt:
pentru acces secvenial : GO, SKIP, LOCATE, CONTINUE.
pentru acces direct: SEEK, caz n care tabelul trebuie indexat.

Comanda GO
GO [RECORD] <nr_nreg> [IN <nr_zon_de_lucru> | IN <alias_tabel>]
sau
GO TOP | BOTTOM [IN <nr_zon_de_lucru> | IN <alias_tabel>]

Comanda are ca efect mutarea pointer-ului de pe nregistrarea curent pe nregistrarea nr_nreg.
IN nr_zon_de_lucru specific zona de lucru n care este mutat pointer-ul.
IN alias_tabel specific alias-ul tabelului n care este mutat pointer-ul.
TOP poziioneaz pointer-ul pe prima nregistrare din fiier.
BOTTOM poziioneaz pointer-ul pe ultima nregistrare.

Funcia RECNO()
Returneaz numrul curent al nregistrrii pe care este poziionat pointer-ul n fiierul curent sau
specificat.
RECNO(<nr_zon_de_lucru> | <alias_tabel>)

nr_zon_de_lucru reprezint zona de lucru n care este activ tabelul. Dac s-a lansat o comand
SEEK pentru a cuta o nregistrare i aceasta nu a fost gsit, se poate utiliza comanda GO
8. Accesul i actualizarea datelor
66


RECNO(0) pentru a returna numrul nregistrrii cu cea mai apropiat valoare cutat. Funcia
RECNO(0) va returna valoarea 0 dac nu s-a gsit nici o valoare apropiat.

Funcia RECCOUNT()
Returneaz numrul de nregistrri din tabelul curent sau specificat.
RECCOUNT(<nr_zon_de_lucru> | <alias_tabel>)

Funcia EOF()
Este funcia logic care returneaz valoarea adevrat (.T.), dac pointer-ul de fiier este poziionat
pe ultima nregistrare, n fiierul curent. n caz contrar, valoarea returnat este fals (.F.).
EOF ([<nr_zon_de_lucru> | <alias_tabel>])

Funcia BOF()
Este funcia logic care returneaz valoarea adevrat (.T.), dac pointer-ul de fiier este poziionat
pe prima nregistrare, n fiierul curent. n caz contrar, valoarea returnat este fals (.F.).
BOF ([<nr_zon_de_lucru> | <alias_tabel>])

Comanda SKIP
SKIP [<nr_nreg>] [IN <nr_zon_de_lucru> | IN <alias_tabel>]

nr_nreg specific numrul de nregistrri peste care se mut pointer-ul n fiier. Dac nu se
specific, pointer-ul se va muta la urmtoarea nregistrare. Dac valoarea lui nr_nreg este pozitiv,
pointer-ul se mut ctre sfritul fiierului. Dac valoarea este negativ, pointer-ul se mut ctre
nceputul fiierului.

Comanda SET FILTER TO
Specific condiia pe care trebuie s o ndeplineasc nregistrrile din tabelul curent pentru a putea
fi accesate.
SET FILTER TO [<expr_L>]

expr_L condiia de accesare a nregistrrilor. Numai nregistrrile care satisfac expresia logic
sunt disponibile i toate comenzile care vor accesa tabelul vor respecta condiia declarat n
comanda SET FILTER TO. Dac este omis, toate nregistrrile sunt accesibile.

67
Baze de date


Comanda LOCATE
Realizeaz cutarea secvenial ntr-un tabel, a primei nregistrri care ndeplinete condiiile
specificate n expresia logic de cutare.
LOCATE FOR <expr_L_1> [Scope] [WHILE <expr_L_2>]

unde:
FOR expr_L _1 este condiia pentru care are loc cutarea secvenial.
Scope specific domeniul nregistrrilor n care are loc cutarea. Numai nregistrrile din
interiorul domeniului vor fi evaluate. Clauza poate lua valorile ALL, NEXT n, RECORD n,
REST. Implicit clauza este ALL (toate nregistrrile).
WHILE expr_L_2 specific condiia pentru cutarea nregistrrilor, atta vreme ct
expr_L_2 este adevrat.

Comanda CONTINUE
Se utilizeaz dup o comand LOCATE, pentru a continua cutarea, dup gsirea primei nregistrri
care ndeplinete condiiile specificate. Comanda CONTINUE mut pointer-ul de fiier la
urmtoarea nregistrare pentru care expresia logic din comanda LOCATE este adevrat.

Exemplu. Presupunem c avem un tabel CLIENTI i vrem s aflam numrul clienilor care sunt din
Frana.

USE CLIENTI
STORE 0 TO TOTAL
LOCATE FOR ALLTRIM(UPPER(TARA))=FRANTA
DO WHILE FOUND()
TOTAL=TOTAL+1
CONTINUE
ENDDO
?TOTAL CLIENTI DIN FRANTA: +LTRIM(STR(TOTAL))
CLOSE DATABASES

Comanda SEEK
Caut ntr-un tabel o nregistrare la prima apariie, a crei cheie de index se potrivete cu expresia
general i mut pointer-ul pe nregistrarea gsit.
8. Accesul i actualizarea datelor
68


SEEK <expr_gen> [ORDER nr_index | nume_fiier_IDX | [TAG] nume_etichet_index [OF
nume_fiier_CDX] [ASCENDING | DESCENDING]] [IN <nr_zon_de_lucru> | IN <alias_tabel>]
unde:
expr_gen specific cheia de index pentru care se caut cu comanda SEEK.
ORDER nr_index specific numrul fiierului index care conine cheia de indexare. Dac
s-au deschis odat cu tabela i fiierele de index, este numrul care indic poziia din lista de
fiiere de index.
ORDER nume_fiier_IDX - specific numele fiierului de index.
ORDER [TAG] nume_etichet_index [OF nume_fiier_CDX] specific o etichet de
index dintr-un fiier .CDX care conine cheia de indexare. Numele etichetei de index (TAG)
poate fi dintr-un fiier .CDX structural sau dintr-un fiier .CDX independent (nestructural).
[ASCENDING | DESCENDING] specific dac nregistrrile sunt cutate n ordine
ascendent sau descendent.

Exemplu. S se indexseze fiierul ESTUD2 dup cmpul NUME i s se caute nregistrrile care
ncep cu literele BAR. Structura tabelului ESTUD2: MATR N(5), NUME C(40), ADRESA C(30),
ANS N(1), DATAN D, MBAC N(5,2)

USE ESTUD2
INDEX ON UPPER(NUME) TAG NUME
STORE 'BAR' TO CAUTL
SEEK CAUTL
IF FOUND( )
BROWSE FIELDS NUME, ADRESA FOR UPPER(NUME)=CAUTL
ELSE
WAIT WINDOW 'NU EXISTA INREGISTRARE'
ENDIF
CLOSE DATABASES

Funcia FOUND()
Retuurneaz valoarea logic adevrat (.T.), dac comenzile CONTINUE, LOCATE sau SEEK s-au
executat cu succes.
FOUND(<zon_de_lucru> | <alias_tabel>)

69
Baze de date


Dac argumentele zon_de_lucru, alias_tabel sunt omise, funcia va returna rezultatul pentru
fiierul deschis n zona de lucru curent.

Vizualizarea coninutului unei tabele
Comanda afieaz informaii (nume cmpuri, date) despre tabelul activ n ferestra principal VFP
sau ntr-o ferestr definit de utilizator. Sintaxa este
DISPLAY[[FIELDS] <list_cmpuri>] [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>]
[NOCONSOLE] [TO PRINTER [PROMPT] | TO FILE <nume_fiier>]
unde:
[FIELDS] <list_cmpuri>] specific cmpurile care vor fi afiate. Dac se omite clauza
se vor afia toate cmpurile.
Scope domeniul de adresare a nregistrrilor (ALL, NEXT n, RECORD n, REST).
FOR <expr_L_1> - vor fi afiate doar nregistrrile care satisfac condiia logic.
WHILE <expr_L_2> - atta vreme ct condiia este ndeplinit, nregistrrile vor fi afiate.
Se mai poate utiliza i comanda LIST care are aceleai clauze.

8.2. Actualizarea datelor

Operaia de actualizare const n adugarea de noi nregistrri, modificarea nregistrrilor existente,
tergerea logic i/sau fizic a nregistrrilor. Operaiile fac parte din limbajul de manipulare a
datelor (LMD).

8.2.1. Adgarea de noi nregistrri

Adugarea se poate face utiliznd comenzile de tip APPEND, prin preluarea datelor din alte tabele,
masive de date i variabile de memorie.

APPEND [BLANK] [IN nr_zon_de_lucru |alias_tabel]
Comanda are ca efect adugarea unei nregistrri vide la sfritul unui tabel.

APPEND FROM <nume_fiier> [FIELDS <list_cmpuri>] [FOR < expr_L>] [TYPE]
[DELIMITED [WITH <delimitator> | WITH BLANK | WITH TAB]]
Comanda are ca efect adugarea unei nregistrri preluat din alt tabel, sau dintr-un fiier de tip text,
n tabelul current unde:
8. Accesul i actualizarea datelor
70


nume_fiier specific numele fiierului din care se face adugarea.
FIELDS <list_cmpuri> - specific lista cmpurilor n care vor fi adugate datele.
FOR < expr_L> - se va aduga cte o nou nregistrare, din nregistrrile tabelului selectat
pentru adugare, cele care ndeplinesc condiia dat de expresia logic expr_L.
TYPE specific tipul fiierului surs din care se adaug. Se folosete n cazul n care nu
este un tabel VFP.
DELIMITED fiierul surs din care se adaug datele n tabelul VFP este un fiier de tip
ASCII n care fiecare nregistrare se termin cu <CR> i <LF> (Enter i Line Feed - salt la
linie nou). Cmpurile coninute sunt implicit separate prin virgul, iar cele de tip caracter
sunt declarate ntre apostroafe duble.
DELIMITED WITH <delimitator> - cmpurile de tip carcater, sunt separate cu un caracter
diferit de apostroafe.
DELIMITED WITH BLANK - cmpurile sunt separate cu spaii n loc de virgul.
DELIMITED WITH TAB - cmpurile sunt separate cu cu TAB-uri n loc de virgul.

APPEND FROM ARRAY <nume_masiv> [FOR <expr_logic>] [FIELDS <list_cmpuri> |
FIELDS LIKE <ablon> | FIELDS EXCEPT <ablon>]
Comanda are ca efect adugarea unei nregistrri n tabelul curent, pentru fiecare linie de masiv,
datele scrise n fiecare cmp corespund coloanelor din masiv. Semnificaia parametrilor i a
clauzelor este urmtoarea:
nume_masiv specific numele masivului care conine datele ce vor fi copiate ca
nregistrri noi.
FOR <expr_logic>- specific condiia pentru adugarea nregistrrilor n tabel. Expresia
logic trebuie s conin i o condiie pentru un cmp al nregistrrii. nainte de a fi adugat
o linie din masiv n tabel sub form de nregistrare, n expresia logic se verific dac
elementele liniei de masiv respect condiia.
FIELDS <list_cmpuri>- specific faptul c numai anumite cmpuri (cele din list) din
noua nregistrare vor fi actualizate cu date din linia masivului.
FIELDS LIKE <ablon>- specific faptul c doar cmpurile care se potrivesc ablonului vor
fi actualizate.
FIELDS EXCEPT <ablon>- specific faptul c toate cmpurile vor fi actualizate, cu
excepia celor care se ncadreaz n ablon.
71
Baze de date


Dac masivul este unidimensional, comanda APPEND FROM ARRAY adaug o singur
nregistrare n tabel, coninutul primului element trece n primul cmp al nregistrrii, coninutul
celui de al doilea element trece n cel de al doilea cmp etc., cmpurile MEMO i GENERAL sunt
ignorate.

Exemplu comanda:
APPEND FROM ARRAY NUME FIELDS LIKE M*, A* EXCEPT NUM*
are ca efect adugarea din masivul NUME, a cmpurilor care ncep cu litera M i A mai puin cele
care au primele trei litere NUM. Caracterul asterisc (wildcard) are semnificaia de orice combinaie
de caractere.

Not Utilizarea clauzelor FIELDS LIKE i EXCEPT trebuie s se fac ntr-un tabel ale crui
nregistrri au cmpuri care accept valori de tip NULL (pentru a putea fi exceptate de la
scriere).

Exist i comanda invers, cu care putem aduga datele din nregistrarea curent a unui tabel ntr-un
masiv:
SCATTER [FIELDS <list_cmpuri>] | [FIELDS LIKE <ablon>] | [FIELDS EXCEPT <ablon>]
[MEMO] TO ARRAY <nume_masiv> [BLANK]

Semnificaia clauzelor este aceai ca i la comanda APPEND FROM ARRAY ..., clauza BLANK
determin crearea masivului cu elemente vide, care sunt de aceai mrime i tip cu cmpurile din
tabel. Clauza MEMO specific existena unui cmp de tip MEMO n list; implicit cmpurile
MEMO sunt ignorate.

Exemplu. S se creeze un masiv cu numele MASIV1, s se ncarce cu date vide, de acelai tip i
mrime cu cele ale cmpurilor tabelului ESTUD1 (MATR N(5), NUME C(40), ADRESA C(30),
ANS N(1), DATAN D, MBAC N(5,2)). S se introduc datele cmpurilor n masiv i s se adauge
sub form de nregistrare nou n tabelul ESTUD1.

USE ESTUD1
* se deschide tabelul ESTUD1
SCATTER TO MASIV1 BLANK
8. Accesul i actualizarea datelor
72


* se creaz vectorul MASIV1, cu elemente vide i de acelai tip i mrime
* cu cmpurile din tabelul ESTUD1
FOR I=1 TO ALEN(MASIV1)
@I,1 SAY FIELD(I) GET MASIV1(I)
* se afieaz numele cmpului i se editeaz elementul I din masiv
ENDFOR
READ
* se citesc valorile introduse cu GET
IF READKEY()!=12
* dac nu s-a apsat tasta <ESC>
APPEND FROM ARRAY MASIV1
* se adaug din elementele masivului o nou nregistrare n tabel
ENDIF
BROWSE
* vizualizare tabel ESTUD1
CLOSE TABLE
* nchidere tabel ESTUD1
CLEAR

APPEND GENERAL <nume_cmp_general> FROM <nume_fiier> DATA <expr_c> [LINK]
[CLASS <nume_clas>]
Comanda realizeaz importul unui obiect OLE dintr-un fiier i l plaseaz ntr-un cmp de tip
general. Semnificaia parametrilor i a clauzelor este urmtoarea:
nume_cmp_general specific numele cmpului general n care obiectul OLE va fi plasat.
FROM <nume_fiier> - specific numele fiierului care conine obiectul OLE.
DATA <expr_c> - expresie de tip caracter care este evaluat i trecut sub form de ir de
caractere ctre obiectul OLE din cmpul general. Obiectul OLE trebuie s fie capabil s
primesc i s proceseze irul de caractere. De exemplu nu poate fi trimis un ir de caractere
ctre un obiect grafic creat cu Paint Brush.
LINK - creaz o legtur ntre obiectul OLE i fiierul care conine obiectul. Obiectul OLE
apare n cmpul general, dar definirea obiectului rmne n fiierul care-l conine. Dac se
omite clauza, obiectul este nglobat n cmpul general.
CLASS <nume_clas> - specific o clas pentru un obiect de tip OLE, alta dect clasa
implicit.
73
Baze de date



8.2.2. Modificarea nregistrrilor

Comanda CHANGE afieaz cmpurile unui tabel pentru editare (modificare).
CHANGE [FIELDS <list_cmpuri>][Scope] [FOR <expresie_L_1>] [WHILE <expresie_L_2>]
[FONT <nume_liter> [,<mrime_liter>]] [FREEZE <nume_cmp>] [NOAPPEND]
[NODELETE] [NOEDIT]
Semnificaia clauzelor:
FIELDS <list_cmpuri> - specific cmpurile care vor apare n fereastra de editare.
Scope specific domeniul de afiare a nregistrrilor (ALL, NEXT n, RECORD n, REST).
FOR <expresie_L_1> - specific faptul c doar nregistrrile care satisfac condiia logic
dat de expresie_L_1, vor fi afiate n fereastra de editare.
WHILE <expresie_L_2> - atta vreme ct expresie_L_2 este adevrat vor fi afiate
nregistrrile n fereastra de editare pentru modificare.
FONT <nume_liter> [,<mrime_liter>] specific pentru fereastra de editare, tipul de
liter i mrimea, cu care vor fi afiate datele.
FREEZE <nume_cmp>- permite ca modificrile s fie fcute doar n cmpul specificat cu
nume_cmp. Celelalte cmpuri vor fi afiate dar nu pot fi editate (modificate).
NOAPPEND mpiedic utilizatorul de a aduga noi nregistrri (se blocheaz Append
Mode din meniul sistem View sau combinaia de taste <Ctrl>+<Y>).
NODELETE mpiedic marcarea nregistrrilor pentru tergere din interiorul ferestrei de
editare. Includerea clauzei nu inhib comanda de marcare pentru tergere din interiorul unei
proceduri.
NOEDIT mpiedic un utilizator s modifice un tabel. Includerea clauzei permite cutarea
sau rsfoirea tabelului dar fr a-l putea modifica (edita).

Comanda BROWSE este una dintre cele mai utilizate comenzi pentru afiarea i editarea
nregistrrilor dintr-un tabel. Cu ajutorul tastelor <TAB> sau <SHIFT>+<TAB> se poate face
deplasarea n cmpul urmtor sau anterior. Cu tastele <Page Up> <Page Down> se pot face
deplasri pe vertical n tabel.
Apsarea simultan a tastelor: <Ctrl>+<End> sau <Ctrl>+<W> - ieire cu salvare din fereastra
de BROWSE; <Ctrl>+<Q>sau <Esc> ieire fr salvarea modificrilor.

8. Accesul i actualizarea datelor
74


BROWSE [FIELDS <list_cmpuri>] [FONT <nume_font>[,<mrime_font>]]
[STYLE <stil_font>] [FOR <expr_L_1>] [FREEZE <nume_cmp>] [LOCK <nr_cmpuri>]
[NOAPPEND] [NODELETE] [NOEDIT | NOMODIFY] [VALID <expr_L_2>] [ERROR <mesaj>]
[WHEN <expr_L_3>] [WIDTH <lime_afiare_cmp>] [IN [WINDOW] <nume_fer>]
unde:
FIELDS <list_cmpuri> - specific care cmpuri vor aparea n fereastra BROWSE.
Cmpurile vor fi afiate n ordinea specificat n list.
FONT <nume_font>[,<mrime_font>] specific tipul literei i mrimea utilizate n
fereastra BROWSE (ex. FONT Courier,16).
STYLE <stil_font> - specific stilul literelor folosite n fereastra BROWSE (B- ngroat, I-
italic, U- subliniat).
FOR <expr_L_1> - vor fi afiate numai acele nregistrri care ndeplinesc condiia dat de
expresia logic expr_L_1.
FREEZE <nume_cmp> - permite modificri doar ntr-un singur cmp, specificat prin
nume_cmp.
LOCK <nr_cmpuri> - specific numrul cmpurilor care pot fi afiate n partea stng, n
fereastra BROWSE, fr a fi necesar deplasarea cu TAB-uri sau cursorul ferestrei (Scroll
Bar).
NOAPPEND mpiedic utilizatorul s adauge noi nregistrri (se inhib aciunea tastelor
<Ctrl>+<Y> i opiunea Append new record din meniul Table).
NODELETE mpiedic marcarea nregistrrilor pentru tergere n interiorul ferestrei
BROWSE.
NOEDIT | NOMODIFY mpiedic utilizatorul s fac modificri n fereastra BROWSE.
VALID <expr_L_2> [ERROR <mesaj>] realizeaz o validare la nivel de nregistrare.
Clauza se execut doar dac se fac modificri i se ncearc trecerea la o alt nregistrare.
Dac expr_L_2 returneaz valoarea .T. (adevrat) utilizatorul se poate deplasa la urmtoarea
nregistrare. n caz contrar, se genereaz un mesaj de eroare.
WHEN <expr_L_3> - se evaluaez condiia dat de expresia logic expr_L_3 atunci cnd
utilizatorul mut cursorul la o alt nregistrare. Dac expresia returneaz valoarea .F. (fals)
nregistrarea nu mai poate fi modificat (devine read-only).
WIDTH <lime_afiare_cmp> - limiteaz numrul de caractere afiate pentru toate
cmpurile din fereastr.
75
Baze de date


IN [WINDOW] <nume_fer> - specific fereastra printe n interiorul creia va fi deschis
fereastra BROWSE. Dac fereastra printe este mutat, se va muta i fereastra BROWSE.

Comanda REPLACE realizeaz actualizarea cmpurilor dintr-o nregistrare.
REPLACE <nume_cmp_1> WITH <expr_1> [ADDITIVE] [,<nume_cmp_2> WITH <expr_2>
[ADDITIVE]] ... [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>] [IN nr_zon_de_lucru |
alias_tabel]
unde:
<nume_cmp_1> WITH <expr_1> [,<nume_cmp_2> WITH <expr_2>]... precizeaz c
datele din nume_cmp_1 vor fi nlocuite cu valorile expresiei expr_1, datele din
nume_cmp_2 cu valorile expresiei expr_2 etc.
[ADDITIVE] pentru cmpurile de tip memo, adaug valoarea expresiei la sfritul
cmpului memo (n continuare). Dac clauza lipsete, atunci cmpul memo va fi rescris cu
valoarea dat de expresie.
Scope specific domeniul nregistrrilor care vor fi nlocuite (NEXT n, ALL, REST,
RECORD n).
FOR <expr_L_1> - specific faptul c vor fi nlocuite cmpurile desemnate, doar din
nregistrrile pentru care evaluarea expresiei logice expr_L_1 are valoarea .T. (adevrat).
WHILE <expr_L_2> - specific condiia pentru care atta vreme ct expresia logic are
valoarea .T., cmpurile desemnate vor fi modificate.
IN nr_zon_de_lucru | alias_tabel specific zona de lucru sau alias-ul tabelului, n care
nregistrrile vor fi actualizate.

Exemplu. n fiierul ESTUD2, s se modifice a treia nregistrare, cmpul ADRESA, cu o nou
valoare Cluj.

USE ESTUD2
REPLACE ADRESA WITH "Cluj" FOR RECNO()=3
BROWSE
CLOSE DATABASE

Comanda SET SAFETY ON | OFF determin afiarea de ctre sistemul VFP a unei casete de dialog
nainte de a suprascrie un fiier.
SET SAFETY ON | OFF
8. Accesul i actualizarea datelor
76


Clauza ON este implicit i determin afiarea unei casete de dialog, pentru confirmarea de
ctre utilizator a suprascrierii fiierului.
Clauza OFF mpiedic afiarea casetei de confirmare a suprascrierii.

8.2.3. tergerea nregistrrilor

tergerea nregistrrilor se poate face la nivel logic sau fizic.

Comanda DELETE realizeaz tergerea la nivel logic. nregistrrile continu s existe n fiier dar
sunt marcate ca fiind terse.
DELETE [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>] [IN <nr_zon_de_lucru> |
<alias_tabel>]
unde:
Scope specific domeniul n care se face marcarea pentru tergere a nregistrrilor.
FOR <expr_L_1> - specific condiia pentru care vor fi marcate pentru tergere acele
nregistrri pentru care expr_L_1 este adevrat.
WHILE <expr_L_2> - vor fi marcate pentru tergere nregistrri, atta vreme ct condiia
expr_L_2 este adevrat.

Funcia DELETED() returneaz o valoare logic care indic dac nregistrarea curent a fost
marcat pentru tergere.
DELETED ([nr_zon_de_lucru | alias_tabel])

Comanda RECALL deselecteaz nregistrrile marcate pentru tergere.
RECALL [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>]
unde:
Scope precizeaz domeniul n care se aplic deselectarea.
FOR <expr_L_1> - doar nregistrrile pentru care expr_L_1 este adevrat (.T.) vor fi
deselectate.
WHILE <expr_L_2> - atta vreme ct expr_L_2 este adevrat, nregistrrile vor fi
deselectate.

Comanda PACK face parte din comenzile de tergere la nivel fizic; va terge toate nregistrrile
marcate pentru tergere din tabelul curent.
77
Baze de date


PACK [MEMO] [DBF]
unde:
MEMO permite tergerea fiierului MEMO ataat tabelului curent, dar nu i nregistrrile
marcate pentru tergere (fiierul MEMO are acelai nume cu tabelul dar extensia este .FPT).
DBF se vor terge nregistrrile marcate pentru tergere din tabelul curent, dar nu
afecteaz fiierul MEMO.

Comanda ZAP terge fizic toate nregistrrile din tabel, rmnnd doar structura tabelului. Este
echivalent cu comanda DELETE ALL, urmat de comanda PACK, dar este mult mai rapid.
ZAP [nr_zon_de_lucru | alias_tabel]

Comanda DELETE FILE terge un fiier de pe disc.
DELETE FILE [<nume_fiier>] [RECYCLE]
unde:
nume_fiier specific numele fiierului i extensia. Numele fiierului poate conine i
caracterul asterisc: DELETE FILE *.BAK va avea ca rezultat tergerea tuturor fiierelor cu
extensia .BAK de pe disc. Comanda se execut pentru fiierele care nu sunt deschise
(active).
RECYCLE fiierul nu va fi ters imediat de pe disc ci mutat n directorul RECYCLE BIN
din sistemul WINDOWS 9x. Se mai poate folosi i comanda ERASE care are aceleai
clauze.

Comanda SET DELETED specific dac sistemul VFP va procesa (terge) nregistrrile marcate
pentru tergere sau dac acestea sunt disponibile pentru a fi utilizate n alte comenzi.
SET DELETED ON | OFF
Semnificaia clauzelor:
Clauza OFF este implicit. nregistrrile marcate pentru tergere pot fi accesate de alte
comenzi care opereaz cu nregistrri.
Clauza ON are ca efect ignorarea nregistrrilor marcate pentru tergere, de comenzile care
opereaz cu nregistrri.

Comanda COPY TO creaz un nou fiier cu acelai coninut ca al tabelului curent.
8. Accesul i actualizarea datelor
78


COPY TO <nume_fiier> [FIELDS <list_cmpuri> | FIELDS LIKE <ablon> | FIELDS EXCEPT
<ablon>][Scope] [FOR <exprL_1>] [WHILE <exprL_2>] [[WITH] CDX] | [[WITH]
PRODUCTION]
unde:
nume_fiier specific numele noului fiier care se creaz cu comanda COPY TO.
FIELDS <list_cmpuri> - specific n list cmpurile ce vor fi copiate n noul fiier. Dac
clauza se omite, atunci toate cmpurile din tabelul activ vor fi copiate. Prin declararea
clauzei FIELDS se realizeaz operaia de proiecie (se selecteaz numai anumite cmpuri -
coloane - din tabel).
FIELDS LIKE <ablon> - specific cmpurile din tabelul surs care se potrivesc unui ablon
i vor fi copiate n noul fiier. Se poate folosi i caracterul asterisc (de exemplu comanda
COPY TO TABEL1 FIELDS LIKE P*,A* va avea ca efect copierea n noul fiier a tuturor
cmpurilor care ncep cu litera P i A).
FIELDS EXCEPT <ablon> - vor fi copiate toate cmpurile, mai puin cele care se
ncadreaz n ablonul specificat.
Scope specific domeniul din care vor fi selectate nregistrrile care vor fi copiate.
FOR <exprL_1> - vor fi copiate doar acele nregistrri pentru care evaluarea expresiei
logice exprL_1 are valoarea adevrat (.T.)
WHILE <exprL_2> - specific condiia pentru care atta vreme ct expresia logic exprL_2
este adevrat, nregistrrile vor fi copiate n noul fiier.

Not Dac se utilizeaz clauzele [Scope], FOR sau WHILE, fr clauza FIELDS, se va
implementa operatorul relaional de selecie (se aleg doar o parte din nregistrri, cu toate
cmpurile). Dac se folosete clauza FIELDS n combinaie cu clauzele [Scope], FOR sau
WHILE, va rezulta o operaie compus: proiecie i selecie.

[WITH] CDX] | [[WITH PRODUCTION] la copiere se va crea i un fiier de index
structural pentru noul tabel, care este identic cu cel al tabelului surs. Etichetele de index
(TAG-urile) vor fi copiate n noul fiier de index structural. Cele dou clauze sunt identice.
Clauzele nu se folosesc dac se creaz un fiier care nu este tabel VFP (extensia .DBF).

Comanda SET RELATION TO stabilete o legtur ntre dou tabele deschise.
79
Baze de date


SET RELATION TO [<expresie1> INTO <nr_zon_de_lucru> | <alias_tabel> [, <expresie2>
INTO < nr_zon_de_lucru > | < alias_tabel >...] [IN < nr_zon_de_lucru > | < alias_tabel >]
[ADDITIVE]]
unde:
expresie1 specific expresia relaional care stabilete legtura ntre tabelul-printe i
tabelul-fiu. Expresia relaional este de obicei cmpul indexat din tabelul-fiu. Indexul pentru
tabelul-fiu poate proveni dintr-un fiier simplu de index (.IDX) sau un fiier de index
compus (.CDX).
INTO nr_zon_de_lucru | alias_tabel specific numrul zonei de lucru sau alias-ul
tabelului-fiu.
IN nr_zon_de_lucru | alias_tabel specific zona de lucru sau alias-ul tabelului-printe.
ADDITIVE clauza pstreaz toate celelalte relaii stabilite anterior n zona de lucru
specificat.
Pentru a stabili o relaie ntre dou tabele trebuie ndeplinite urmtoarele condiii:
cele dou tabele ntre care se stabilete relaia tata-fiu trebuie s fie indexate dup aceeai
cheie (cmp), care face legtura ntre ele;
cele dou tabele trebuie deschise n zone de lucru diferite.
Tabelele legate printr-o relaie au n general un cmp comun. De exemplu, presupunem c avem un
tabel CLIENI, care conine informaii despre clieni i are cmpuri pentru nume, adres, i un cod
unic al clientului. Un al doilea tabel, FACTURI, conine informaii despre facturi (numr, cantitate,
produse etc.), care va avea de asemenea un cmp pentru codul clientului. Se pot uni astfel
informaiile despre clieni cu cele despre facturi. Comanda SET RELATION leag cele dou tabele
prin cmpul comun cod client. Pentru a stabili relaia, tabelul-fiu (FACTURI) trebuie s fie indexat
dup cmpul comun. Dup stabilirea relaiei, de cte ori mutm pointer-ul n fiierul CLIENI pe o
nregistrare, pointer-ul din fiierul FACTURI (fiu) se va muta pe nregistrarea care are acelai cod
client corespunztor n fiierul CLIENI.

Exemplu
SELECT 2
USE CLIENTI
SELECT 3
USE FACTURI
INDEX ON COD_CLIENT TAG COD_CLIENT ADDITIVE
&& se indexeaz cmpul COD_CLIENT
8. Accesul i actualizarea datelor
80


SELECT 2
SET ORDER TO TAG COD_CLIENT OF FACTURI.CDX IN FACTURI
&& se stabilete indexul principal
SET RELATION TO COD_CLIENT INTO FACTURI ADDITIVE
&& se stabilete relaia ntre CLIENI, FACTURI

Comanda RENAME redenumete un fiier.
RENAME <nume_fiier1> TO <nume_fiier2>
unde:
nume_fiier1 TO nume_fiier2 specific numele fiierului surs i noul nume. Se va
include extensia pentru fiecare fiier, dac nu, implicit se va atribui extensia .DBF.
Comanda RENAME nu se folosete pentru un tabel care aparine unei baze de date. Pentru a
schimba numele unui tabel dintr-o baz de date se folosete comanda RENAME TABLE.
Numele fiierului surs i cel al fiierului nou creat poate cuprinde i caracterul asterisc
(RENAME *.PRG TO *.BAK).

Comanda DISPLAY FILES
Afieaz informaii despre un fiier.
DYSPLAY FILES [ON <Drive>] [LIKE <ablon>] [TO PRINTER [PROMPT]] | TO FILE
<nume_fiier>]

ON <Drive> - specific calea ctre fiiere.
LIKE <ablon> - specific condiia pentru care vor fi afiate informaii, doar despre acele
fiiere care se ncadreaz n ablon.
TO PRINTER [PROMPT] | TO FILE <nume_fiier> - direcioneaz informaiile la
imprimant (cu afiarea unei casete de dialog, clauza PROMPT) sau ntr-un fiier.
Informaii identice se pot obine i cu comanda DIR care are aceleai clauze.

Comanda SET ALTERNATE direcioneaz la ecran sau la imprimant, ieirea rezultat din
folosirea comenzilor DISPLAY sau LIST.
SET ALTERNATE ON | OFF
sau
SET ALTERNATE TO [<nume_fiier> [ADDITIVE]]
81
Baze de date


unde:
ON direcioneaz ieirea ctre un fiier de tip text.
OFF clauza implicit, dezactiveaz ieirea ctre un fiier de tip text.
TO nume_fiier creaz un fiier de tip text, cu extensia implicit .TXT.
ADDITIVE clauz prin care ieirea este adugat la sfritul fiierului specificat cu
nume_fiier. Dac se omite clauza, coninutul fiierului de ieire este suprascris.

Comanda CLOSE ALTERNATE nchide un fiier deschis cu comanda SET ALTERNATE.
Sintaxa comenzii este
CLOSE ALTERNATE

8.4. Ordonarea datelor

Datele unui tabel se pot ordona dup un singur criteriu sau dup mai multe (multicriterial) .
Ordonarea poate fi ascendent dac fiecare cmp dup care se face ordonarea are o valoare mai
mare dect cmpul corespunztor din nregistrarea anterioar, sau descendent. Dac ordonarea se
face multicriterial, se definete o cheie primar, care este principalul criteriu de ordonare i chei
secundare. n cazul n care 2 sau mai multe nregistrri au aceai valoare pentru cheia principal, se
utilizeaz cheile secundare pentru departajare, n ordinea n care au fost declarate. n VFP ordonarea
unui fiier se poate face n dou moduri:
folosind comanda SORT, prin care se creaz un nou fiier cu nregistrrile sortate dup
criteriul ales.
folosind metoda indexrii, care const n crearea unui fiier de index, n care se stocheaz
ordinea nregistrrilor din tabelul surs.

Comanda SORT are sintaxa:

SORT TO <nume_tabel>ON <nume_cmp_1> [/A | /D] [/C] [, <nume_cmp_2> [/A | /D] [/C] ...]
[ASCENDING | DESCENDING] [Scope] [FOR <expresie_1>] [WHILE <expresie_2>] [FIELDS
<lista_cmpurilor>]
unde:
nume_tabel numele fiierului sortat.
8. Accesul i actualizarea datelor
82


nume_cmp_1 specific cmpul din tabelul nesortat asupra cruia se aplic procedura.
Implicit sortarea este ascendent. Nu se pot sorta cmpuri memo sau general. Este cheia
primar dup care se face sortarea.
/A, /D, /C specific ordinea. A: ascendent, D: descendent, C: fr a se ine cont de litere
mari/mici.
nume_cmp_2 specific un cmp cu rol de cheie secundar.
ASCENDING specific o sortare ascendent pentru cmpurile care nu sunt urmate de
opiunea /D.
DESCENDING specific o sortare descendent pentru cmpurile care nu sunt urmate de
opiunea /A.
Scope specific domeniul de sortare (tot fiierul sau doar o parte din nregistrri) ALL,
NEXT n, RECORD n, REST.
FOR expresie_1 specific care nregistrri particip la sortare, respectiv acelea pentru care
expresie_1 are valoarea TRUE
WHILE expresie_2 specific condiia pentru care atta vreme ct au valoarea TRUE,
nregistrrile vor fi sortate.
FIELDS lista_cmpurilor specific cmpurile din tabelul original care vor fi incluse n
noul fiier sortat. Dac se omite clauza, toate cmpurile din tabelul original vor fi incluse n
tabelul sortat.
Exemplu. S se sorteze fiierul ESTUD1, ntr-un nou fiier SESTUD1, dup cmpul NUME,
ascedent, fr s se in seama de litere mici/mari, lund doar studenii cu media peste 8.00 i
cmpurile MATR, NUME, MBAC.

USE ESTUD1
SORT TO SESTUD1 ON NUME/A/C FOR MBAC>8.00 FIELDS MATR,NUME,MBAC
USE SESTUD1
BROWSE
CLOSE DATABASES
DELETE FILE SESTUD1.DBF

Sortarea este un procedeu care n cazul tabelelor mari duce la mrirea timpului de execuie i a
spaiului solicitat pe hard disk. Se consider c este mai eficient folosirea metodei indexrii.
83
Baze de date


Prin metoda indexrii se creaz un fiier de index, care va conine cel puin un cmp al tabelei
de date, sortat dup un criteriu alfabetic, numeric sau cronologic. Fiierul de index este o sortare
virtual a unei tabele, nregistrrile din tabelul de date rmnnd nesortate. Fiierul de index conine
informaii de localizare a nregistrrilor dintr-o tabel.
Fiierele index sunt de 2 tipuri:
simple au extensia IDX, conin o singur cheie de indexare i deci un singur criteriu de
ordonare.
compuse au extensia CDX (Compound Index File), n care se stocheaz mai multe criterii
de ordonare, fiecare avnd asociat un nume ( TAG - eticheta de index), corespunztor mai
multor chei de indexare.
Crearea unui fiier de index se face cu comanda:
INDEX ON <expr> TO <.IDX file> TAG<tag_name>[OF<.CDX file>] [FOR <exprL>]
[ASCENDENT DESCENDENT] [UNIQUE] [ADDITIVE]
unde:
<expr> - expresia indexului care include cmpuri din tabela ce va fi indexat. Tipurile de
expresii admise sunt: C, D, N.
TO <.IDX file> - specific numele fiierului de index care va fi creat.
TAG<tag_name> OF<.CDX file> - permite crearea unui fiier cu mai multe intrri (etichete
de index TAG-uri), numrul lor fiind limitat doar de spaiul pe hard disk.
Fiierele cu extensia .CDX pot fi:
structurale se deschid automat odat cu deschiderea tabelului de date i au acelai
nume.
nestructurale deschiderea se face indicnd un nume la clauza OF<.CDX file>, diferit
de cel al tabelei de date.
FOR <exprL> - permite ca indexul creat s acioneze ca un filtru asupra tabelei.
ASCENDENT DESCENDENT specific ordinea de sortare n fiierul de index.
UNIQUE pentru valori repetate ale cheii, specific includerea n fiierul de index numai la
prima apariie.
ADDITIVE permite crearea unui fiier de index pentru o tabel, chiar dac mai sunt
deschise alte fiiere de index.

Indexarea dup mai multe cmpuri este similar sortrii multiple. Nu se pot face indexri multiple
pe cmpuri cu tipuri diferite, deci trebuie aduse la o form comun (ir de caractere).
8. Accesul i actualizarea datelor
84


Comanda
INDEX ON cmp_car + STR(cmp_numeric,nc) + DTOS(cmp_dat) TO <fiier_index>
permite indexarea dup 3 cmpuri diferite.
Semnificaia parametrilor i a clauzelor:
STR(cmp_numeric,nc) transform un numr ntr-un ir de caractere. nc numrul maxim
de caractere pe care se reprezint cmpul numeric.
DTOS(cmp_data) transform o variabil de tip dat n ir de caractere.

Pentru deschiderea simultan a tabelei de date i a fiierelor de index asociate se folosete comanda:
USE <nume_tabel> INDEX <list_fiiere_index>

Exemplul 1. Presupunem c avem un tabel (STUD) cu urmtoarea structur:

matricola N(5)
nume C(40)
data_n D
adresa C(40)

Vrem s indexm dup cmpul matricola. Tabelul are urmtoarele nregistrri:
nr_nreg matricola nume data_n adresa
1 215 Aldea I. Dan 22/03/79 Bucureti
2 110 Barbu A. Vasile 10/05/80 Craiova
3 300 Alexandru F. Ion 13/07/80 Iai
4 200 Dinu A. Adrian 25/08/79 Bucureti
5 210 Cornea C. Ilie 16/07/80 Ploeti
6 250 Ene V. Dan 24/03/80 Bucureti
Secvena de comenzi:

CLEAR
USE STUD
BROWSE
INDEX ON MATRICOLA TO IMATR.IDX
?? NDX(1)
85
Baze de date


* afieaz primul fiier index activ
BROWSE
* nregistrrile din fiierul de date apar sortate dup cmpul matricola.
CLOSE DATABASES
CLEAR

creaz fiierul index IMATR.IDX. Acesta are structura:

matricola nr_nreg
110 2
200 4
210 5
215 1
250 6
300 3

Exemplul 2. S se indexseze tabelul STUD dup cmpul NUME i s se creeze un fiier structural
STUD.CDX.

USE STUD
INDEX ON UPPER(NUME) TAG NUME
BROWSE
CLOSE DATABASES

Exemplul 3. S se indexeze tabelul ESTUD1 dup cmpul NUME, s se creeze un fiier
nestructural INUM.CDX, ordonat ascendent dup valorile cheii:

USE ESTUD1
INDEX ON UPPER(NUME) TAG NUME OF INUM.CDX ASCENDING
BROWSE
CLOSE DATABASES

Exemplul 4. Utiliznd tabelul ESTUD1 s se indexeze tabelul dup o cheie compus (NUME,
MBAC), fr a permite existena dublurilor, ntr-un fiier de index INM.IDX. Structura tabelului
8. Accesul i actualizarea datelor
86


este: MATR N(5), NUME C(40), ADRESA C(30), ANS N(1), ANIF N(4), DATAN N(4), MBAC
N(5,2).

USE ESTUD1
INDEX ON UPPER(NUME)+STR(MBAC,5) TO INM.IDX UNIQUE
BROWSE
CLOSE DATABASES

Exemplul 5. S se indexeze tabelul ESTUD1 dup cmpul numeric MATR, ntr-un fiier de index
IMATR.IDX, numai pentru nregistrrile care au cmpul MBAC (medie bacalaureat) >8.00:

USE ESTUD1
INDEX ON MATR TO IMATR.IDX FOR MBAC>8.0
BROWSE
CLOSE DATABASES

87
Baze de date


9. Programarea procedural

Mediul VFP ofer pe lng modul de lucru n fereastra de comand (stil interpretor de comenzi) i
posibilitatea de a dezvolta programe surs n limbajul propriu sistemului (stil compilator), prin
comenzi i funcii care descriu datele i pot efectua prelucrrile necesare dezvoltrii aplicaiei.
Programul surs folosete att tehnica de programare procedural (structurat, modular) ct i cea
de programare pe obiecte. ntr-un program surs pot fi utilizate de asemenea i comenzile din
nucleul SQL, care permit o programare descriptiv i de manipulare a datelor la nivel de tabel.

9.1. Programarea structurat

Limbajul are comenzi specifice pentru implementarea celor trei structuri de program fundamentale:
secvenial, alternativ (IF i CASE) i repetitiv (WHILE, FOR i SCAN), dar nu are comenzi
pentru salt necondiionat.
Tehnica programarii modulare se utilizeaz la rezolvarea unor probleme complexe i implic
descompunerea problemei n pri componente (module), conform unei metode (top-down, bottom-
up) i analiza lor, care stabilete:
caracteristicile principale ale fiecrui modul;
legturile dintre module;
alegerea unui modul principal (program, meniu sau videoformat);
ierarhizarea modulelor fa de ansamblu.
Limbajul VFP ofer facilitatea de creare a unui proiect, n care aceste module pot fi declarate n una
din categoriile implementate:
Data se pot declara baze de date (Databases), tabele libere (Free Tables), interogri
(Query);
Class Libraries librrii de clase;
Documents - se pot declara videoformate (Forms), rapoarte (Reports), etichete (Labels);
Code programe (Programs), aplicaii (Aplications);
Other alte componente: meniuri (Menus), fiiere de tip text (Text Files);
Other Files alte fiiere utilizate: icon-uri, fiiere .BMP etc.
Toate aceste componente sunt nglobate n proiect, care constituie baza pentru crearea aplicaiei n
format executabil.

9. Programarea procedural
88


9.1.1. Structura liniar

O structur liniar este constituit dintr-o succesiune de comenzi, dintre cele admise i n modul de
lucru interpretor (n fereastra de comenzi). O astfel de structur este o secven de comenzi care nu
conine structuri alternative sau repetitive, ci doar comenzi, funcii i atribuiri de valori unor
variabile.

Comenzi de afiare/citire la monitor
Comanda utilizat pentru afiarea la monitor, a unei variabile/constante de tip caracter sau numeric
este:
@<linie>,<coloana> SAY <expr> [PICTURE <exp_c1>] | [FUNCTION<exp_c2>] [FONT
<exp_c3>[,<exp_n>]] [STYLE <exp_c4>]
unde:
@<linie>,<coloana> - caracterul @ fixeaz coordonatele de afiare, date sub form de linie
i coloan.
SAY <expr> - comanda de afiare pe ecran, la coordonatele fixate, a unei expresii sau a unei
funcii.
PICTURE <expr_c1> - formatul de afiare (se utilizez codurile din tabel indicndu-se
formatul ntre apostroafe: 9999.99, pentru date de tip numeric).
FUNCTION<exp_c2> - ofer o alternativ la stabilirea formatului.
exp_c2 Semnificaie
A Caractere alfabetice
L Date de tip logic (.T., .F., .Y., .N.)
N Litere i cifre
X Orice caractere
9 Cu date de tip caracter permite numai numere. Cu date de tip
numeric permite numere i semne algebrice
# Permite cifre, semne algebrice i spaii
$ Afieaz semnul curent al monedei (definit cu SET
CURRENCY)

89
Baze de date


FONT <exp_c3>[,<exp_n>] specific numele tipului de liter (font) utilizat i mrimea
acesteia.
[STYLE <exp_c4> - definirea stilului de afiare (B bold, I italic, N normal, U -
subliniat).

Exemplu. Urmtoarea secven de comenzi:
@1,1 SAY 'TEST' FUNCTION 'A' FONT 'ARIAL',14 STYLE 'BIU'
S=10
@3,1 SAY S PICTURE '99.99'
WAIT WINDOW && afiarea unei ferestre de continuare
CLEAR
are ca efect afiarea n spaiul de lucru, n linia 1, coloana 1, a cuvntului TEST (ngroat, nclinat,
subliniat) iar n linia 3, coloana 1, valoarea variabilei S cu formatul ales.
Se pot afia n spaiul de lucru sau tipri obiecte de tip BMP (imagini) cu comanda

@<linie>,<coloana> SAY <fiier_imag>BITMAP|<cmp_GEN> [STYLE <exprC>] [CENTER]
[ISOMETRIC] | [STRETCH] [SIZE <expN1>,<expN2>]
unde:
<fiier_imag>BITMAP|<cmp_GEN> - clauza care face referire la fiierul de tip BMP
(Bitmap Picture) sau imaginea coninut ntr-un cmp general dintr-un fiier. <fiier_imag>
este o expresie de tip caracter, delimitat de apostroafe simple sau duble.
STYLE <exprC> asigneaz atributul de opac Q sau transparent T, pentru obiectele
inserate.
CENTER clauza pentru plasarea obiectului BMP n centrul unei arii determinate prin
clauza SIZE sau delimitate de coordonatele linie, coloan.
ISOMETRIC | STRETCH clauze pentru cazul n care zona de afiare a obiectului BMP
este mai mic dect dimensiunea real a acestuia. ISOMETRIC redimensioneaz obiectul la
dimensiunea ariei, cu pstrarea proporiilor. STRECH creaz un raport separat pentru fiecare
coordonat OX, OY, obiectul se poate distorsiona pe vertical sau orizontal.
SIZE <expN1>,<expN2>] stabilete coordonatele colului din dreapta jos al zonei de
afiare.

Exemplu.
@1,1 SAY "1.JPG" BITMAP CENTER ISOMETRIC
9. Programarea procedural
90


WAIT WINDOW
CLEAR

Comanda
@<linie>,<coloana> GET <var> [PICTURE <expr_c>]

permite editarea variabilei de memorie var (pentru a introduce o nou valoare).
PICTURE <expr_c> - formatul de editare.
Se poate combina operaia de afiare cu cea de editare a unei variabile, caz n care vom utiliza
comanda:
@<linie>,<coloana> SAY <mesaj> GET <var>

ntotdeauna o comand (sau mai multe comenzi) @...GET va fi nsoit de o comand READ.
Practic se poate construi o machet cu cmpuri de afiare @SAY i cmpuri de citire @GET,
cursorul se deplaseaz de la o linie la alta apasnd tasta <ENTER> sau <TAB> i napoi cu
<SHIFT>+<TAB> (permite reactualizarea unor cmpuri nainte de citirea efectiv). La apsarea
tastei <ENTER> la ultima linie GET se va executa comanda READ i se va citi ntreg ecranul.

Comanda READ realizeaz citirea tuturor cmpurilor editate cu comanda GET.
READ [CYCLE] [MODAL] [VALID <expr_L>|<expr_N>] [WHEN <expr_L1>]
unde:
CYCLE clauz care mpiedic ncheierea citirii variabilelor editate, atunci cnd cursorul
depete primul sau ultimul obiect creat cu GET. Dac utilizatorul se plaseaz pe ultimul
obiect GET i apas <Enter> sau <TAB>, cursorul se va deplasa pe primul obiect GET.
Pentru a ncheia o comand READ ciclic se apas tasta <Esc> sau tastele <CTRL>+<W>.
MODAL este clauza care previne activarea ferestrelor care nu sunt implicate n execuia
comenzii READ.
VALID expr_L | expr_N clauz care valideaz valorile introduse n cmpul GET, la
terminarea comenzii READ. Dac expresia logic returneaz valoarea adevrat (.T.)
comanda READ se ncheie.
WHEN expr_L1 clauza condiioneaz execuia comenzii READ de evaluarea expresiei
logice. Dac expresia returneaz valoarea fals comanda READ este ignorat.

91
Baze de date


9.1.2. Structura alternativ

Structura alternativ este implementat n cele dou forme:
cu dou ramuri (comenzile IF, IIF);
cu mai multe ramuri (comanda DO CASE).

Comanda IFENDIF execut condiionat un set de comenzi, n funcie de valoarea logic returnat
de o expresie evaluat. Expresia evaluat nu furnizeaz dect dou alternative (ramuri)
corespunztoare valorilor adevrat (THEN) sau fals (ELSE).
IF <exprL> [THEN] <comenzi> [ELSE <comenzi>] ENDIF
unde:
exprL specific expresia logic care este evaluat. Dac cele dou clauze THEN i ELSE
sunt prezente i expresia este adevrat vor fi executate comenzile de pe ramura THEN,
dac expresia este fals, vor fi executate comenzile de pe ramura ELSE.
Dac expresia logic este fals i ramura ELSE nu este inclus, va fi executat prima
comand care urmeaz clauzei ENDIF.
Clauza ENDIF trebuie inclus la orice declarare a unui IF. O comand IF poate include mai
multe blocuri IFENDIF pe ramurile sale (imbricare), cu condiia ca nchiderea lor (cu
ENDIF) s se fac n aceai ordine ca i deschiderea (nu se admite intersecia blocurilor).

Exemplu. n fiierul PRODUSE, s se caute un anumit produs; dac este gsit s se afieze
cmpurile PRODUS, CANT, PU, dac nu, s se afieze un mesaj.

CLEAR
USE PRODUSE
GETEXPR 'INTRODUCETI CONDITIA DE LOCALIZARE' TO
GTEMP;
TYPE 'L' DEFAULT 'PRODUS = ""'
LOCATE FOR &GCTEMP
&& caut produsul cu comanda LOCATE

IF FOUND( )
&& dac este gsit
DISPLAY FIELDS PRODUS,CANT,PU&& afieaz cmpurile PRODUS, CANT,
9. Programarea procedural
92


PU
ELSE
&& dac nu
? 'CONDITIA ' + GTEMP + ' NU A FOST GASITA '
&& afieaz mesajul
ENDIF
CLOSE TABLE

Funcia IIF returneaz pe baza evalurii unei expresii logice, una din cele dou valori ale unei
expresii de tip numeric, caracter, moned, dat calendaristic sau timp.
IIF(expr_L, expr_1, expr_2)
unde: expr_L specific expresia logic pe care funcia o evalueaz.
Dac expresia logic este adevrat, va returnat valoarea expresiei expr_1.
Dac expresia logic este fals va fi returnat valoarea dat de expr_2.
Aceast funcie este cunoscut i sub numele de IF scurt (imediat). Este folosit mai ales la
expresiile care condiioneaz afiarea coninutului unui cmp, n rapoarte sau etichete. Execuia sa
este mai rapid dect echivalentul su IFENDIF.

Comanda DO CASEENDCASE
Execut primul set de comenzi ale cror expresie condiional este adevrat. Comanda este
echivalentul unor instruciuni IF cascadate.
DO CASE
CASE <expr_L_1>
<comenzi>
CASE <expr_L_2>
<COMENZI>
....
CASE <expr_L_n>
<comenzi>
[OTHERWISE
<comenzi>
ENDCASE

Aciunea comenzii:
93
Baze de date


CASE <expr_L_1> <comenzi>... - cnd prima expresie logic CASE ntlnit, are
valoarea adevrat, blocul de comenzi va fi executat pn la apariia unei noi comenzi CASE
sau a clauzei ENDCASE. Execuia programului continu cu prima instruciune executabil
care urmeaz lui ENDCASE.
Dac expresia din prima clauza CASE este fals, blocul de comenzi aferent este ignorat i se
trece la evaluarea expresiei logice a urmtoarei clauze CASE.
Dup gsirea primei expresii logice adevrat, orice alt clauz CASE pentru care expresia
logic este adevrat, va fi ignorat.
OTHERWISE <comenzi> - dac toate expresiile logice CASE au returnat valoarea fals,
clauza ofer o alternativ pentru introducerea unui bloc de comenzi un bloc de comenzi.

Exemplu
@1,1 SAY DATI N: GET N
READ
DO CASE
CASE N = 0
? 'ZERO'
CASE N > 0
? 'POZITIV'
OTHERWISE
? 'NEGATIV'
ENDCASE
WAIT WINDOW

9.1.3. Structura repetitiv

Pentru descrierea structurilor repetitive limbajul pune la dispoziie urmtoarele tipuri de comenzi:
ciclul de repetiie cu numr finit de pai - comanda FOR...ENDFOR;
ciclu cu numr nedefinit de pai, condiionat anterior - comanda DO WHILE...ENDDO;
o comand de parcurgere a nregistrrilor unui tabel de la nceput la sfrit comanda
SCAN...ENDSCAN.

Comanda FOR...ENDFOR execut un bloc de comenzi de un numr de ori precizat.
FOR <var>=<val_iniial> TO <val_final> [STEP <val_increment>]
9. Programarea procedural
94


<comenzi>
[EXIT]
[LOOP]
ENDFOR | NEXT
unde:
var specific o variabil sau un element de masiv, de tip ntreg, care acioneaz ca un
contor (variabil de ciclare).
val_iniial, val_final valoarea iniial respectiv final a contorului.
STEP <val_increment> - domeniul dat de valoarea iniial / final poate fi parcurs cu
incrementul 1 (implicit) sau cu un pas (increment) precizat prin val_increment. Dac
val_increment este negativ contorul este decrementat.
comenzi specific blocul de comenzi care vor fi executate n interiorul ciclului.
EXIT permite ieirea forat din ciclu (nainte de atingerea valorii finale a variabilei de
ciclare). n program va fi executat prima comand care urmeaz clauzei ENDFOR.
LOOP returneaz controlul napoi comenzii FOR, fr a se mai executa comenzile dintre
LOOP i ENDFOR. Contorul este incrementat sau decrementat ca i cum s-ar ajunge la
clauza ENDFOR.

Exemplu. Din fiierul CLIENTI se vor afia la monitor, din primele 10 nregistrri, din doi n doi,
clienii.
USE CLIENTI
STORE 2 TO VI,K && valoarea iniial i pasul contorului
STORE 10 TO VF && valoarea final a contorului
FOR I=VI TO VF STEP K && I variabila contor
GOTO I && poziionare pe nregistrarea I
DISPLAY FIRMA && se afieaz numele firmei de pe poziia I din fiierul CLIENI
ENDFOR && sfritul ciclului FOR
CLOSE TABLE

Comanda DO WHILE ... ENDDO execut un bloc de comenzi n interiorul unui ciclu condiionat
anterior.
DO WHILE <expr_L>
<comenzi>
[LOOP]
95
Baze de date


[EXIT]
ENDDO
unde:
expr_L specific o expresie logic a crei valoare de adevr determin dac blocul de
comenzi cuprins ntre DO WHILE i ENDDO va fi executat. Atta vreme ct condiia logic
este adevrat, comenzile vor fi executate.
LOOP returneaz controlul napoi comenzii DO WHILE. Comenzile ntre LOOP i
ENDDO nu vor fi executate.
EXIT transfer controlul, din interiorul ciclului DO WHILE, ctre prima comand care
urmeaz clauzei ENDDO. Clauza este echivalent cu o ieire forat din ciclu.
Fiecare comand DO WHILE trebuie s aib un corespondent (s se nchid) ENDDO.

Exemplu. Din fiierul PRODUSE s se afieze totalul produselor n stoc, care au preul mai mare de
30$.

CLEAR
USE PRODUSE
STOC=0
DO WHILE !EOF()
IF PU<30
SKIP
ENDIF
STOC=STOC+CANT
? PRODUS,CANT
SKIP
ENDDO
CLOSE TABLES
?STOC

Comanda SCAN...ENDSCAN realizeaz mutarea pointer-ului prin toate nregistrrile din tabelul
curent i execut un bloc de comenzi pentru nregistrrile care corespund condiiilor specificate.
SCAN
[Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>]
[comenzi]
9. Programarea procedural
96


[LOOP]
[EXIT]
[ENDSCAN]
unde:
Scope specific domeniul nregistrrilor care vor fi scanate (clauze: ALL, NEXT n,
RECORD n, REST). Clauza implicit este ALL.
FOR expr_L_1 execut comenzile doar pentru nregistrrile pentru care expresia logic
expr_L_1 este adevrat. Includerea clauzei permite filtrarea nregistrrilor, eliminnd pe
cele pe care nu vrem s le scanm.
WHILE expr_L_2 specific o condiie pentru care blocul de comenzi va fi executat atta
vreme ct valoarea expresiei logice expr_L_2 este adevrat.
LOOP returneaz controlul napoi la comanda SCAN (se reia execuia comenzii).
EXIT transfer programului controlul din interiorul buclei SCAN...ENDSCAN, la prima
comand care urmeaz clauzei ENDSCAN.
ENDSCAN indic sfritul procedurii de scanare.

Exemplu. Utiliznd comanda SCAN s se afieze din fiierul CLIENI, numele firmei, oraul i
persoana de contact, cu care o firm are contracte n FRANA.

USE CLIENTI
SCAN FOR UPPER(TARA)=FRANTA
? FIRMA,ORAS,CONTACT
ENDSCAN
CLOSE TABLES

9.2. Modularizarea programelor

Modularizarea programelor, n cazul unor aplicaii complexe, se poate realiza prin proceduri i
funcii definite de utilizator.
Definirea unei funcii utilizator, reprezint un bloc de comenzi independent, care primete un set de
parametrii de la programul apelant i returneaz acestuia o valoare ca rezultat al prelucrrii
parametrilor de intrare.
97
Baze de date


Definirea unei proceduri de ctre utilizator, este de asemenea un bloc de comenzi, care prelucreaz
parametrii transmii din programul apelant. Dup prelucrare controlul este redat programului
apelant.
Din punct de vedere al locaiei, funciile se pot defini fie n programul apelant, fie ntr-o librrie sau
pot fi salvate n fiiere externe, de tip .PRG.

9.2.1. Proceduri

Asocierea procedurilor cu programul apelant se face cu comanda:
SET PROCEDURE TO [<fiier_1> [,<fiier_2>,...]] [ADDITIVE]
unde:
fiier_1,fiier_2 specific succesiunea n care vor fi deschise fiierele. Se pot declara mai
multe nume de fiiere care conin proceduri. Aceast opiune permite crearea unor librrii de
sine stttoare de funcii care pot fi specificate separat.
ADDITIVE se deschid fiierele cu proceduri din lista specificat, fr a fi nchise fiierele
cu proceduri, deja deschise.

Cu comanda RELEASE PROCEDURE [<fiier_1> [,<fiier_2>,...]] se nchid fiierele individuale.
Variabilele definite n interiorul procedurilor i funciilor utilizator, sunt la nivel local (nu se vd din
afara procedurilor sau funciilor).

Structural o procedur, cuprinde urmtoarele elemente:

PROCEDURE nume_procedur specific numele procedurii create
PARAMETERS list_parametrii declararea parametrilor formali de intrare
bloc de comenzi bloc de comenzi, corpul procedurii
RETURN [expresie] ieirea din procedur, opional cu returnarea
unei expresii calculate.

PROCEDURE este o declaraie n interiorul unui program, care specific nceputul unei
proceduri i definete numele procedurii. Numele procedurii poate ncepe cu o liter sau
caracterul _ (underscore) i poate conine orice combinaie de litere, numere i caractere
underscore. Lungimea maxim a numelui este de 254 caractere.
9. Programarea procedural
98


PARAMETERS asigur trecerea parametrilor din programul apelant n procedur. Se pot
transmite maxim 27 de parametri n procedur. Lista parametrilor poate cuprinde: expresii,
variabile de memorie, nume de tabele, nume de cmpuri din tabele de date, constante, care
sunt transmise prin referin.
RETURN [expresie] returneaz controlul i opional o expresie, n programul apelant.
Parametrii pot fi transmii n procedur, prin includerea clauzei PARAMETERS n
procedur, sau prin plasarea unei liste de parametri imediat dup PROCEDURE
nume_procedur. Lista se inchide ntre paranteze, parametrii sunt separai cu virgul.

Apelul unei proceduri sau program se face cu comanda
DO <nume_proc> | <nume_program> WITH <list_parametri>

Observaii
Metoda folosit la transmiterea parametrilor la proceduri sau funcii este implicit prin
valoare iar la programe prin referin.
Variabilele transmise ctre procedur cu comanda DO...WITH sunt transmise prin referin.

Sistemul VFP are anumite restricii legate de utilizarea comenzii DO:
pot fi imbricate maxim 32 de apeluri DO (program principal procedura1 procedura2 ...);
nu se poate face apel dintr-o procedur la ea nsi (nu admite recursivitatea);
din interiorul unei proceduri nu poate fi apelat programul/procedura apelant.

9.2.2. Funcii
Elementele unei funcii definite de utilizator (UDF) sunt:
FUNCTION nume_funcie specific numele funciei create
bloc de comenzi bloc de comenzi, corpul funciei
RETURN [expresie] ieirea din funcie, opional cu returnarea unei expresii
calculate.
Implicit parametrii sunt transmii n funcie prin valoare. Numrul maxim de parametri care poate fi
transmis, este 27. Parametrii pot fi transmii n funcie, prin includerea clauzei PARAMETERS n
funcie, sau prin plasarea unei liste de parametri imediat dup FUNCTION nume_funcie. Lista se
inchide ntre paranteze, parametrii sunt separai cu virgul.

99
Baze de date


Comanda
SET UDFPARAMS TO VALUE | REFERENCE

specific dac parametrii sunt transmii ctre o funcie definit de utilizator (UDF) prin valoare sau
prin referin. Cnd o variabil este transmis prin valoare, valoarea variabilei poate fi modificat n
funcia definit de utilizator, dar valoarea original a variabilei n programul apelant nu se modific.
Cnd o variabil este transmis prin referin i funcia definit de utilizator modific valoarea
variabilei transmise, valoarea original a variabilei n programul apelant de asemenea se modific.
Implicit parametrii sunt transmii prin valoare. Se poate fora transmiterea parametrilor ctre o
funcie utilizator, n funcie de opiunea aleas n comanda SET UDFPARAMS. Variabilele se
nchid ntre paranteze pentru a fora transmiterea prin valoare. Forarea transmiterii prin referin se
face tiprind n faa variabilei caracterul @.

Exemplul 1.
*** TRANSMITEREA VARIABILELOR PRIN VALOARE ***
CLEAR
SET TALK OFF
WAIT 'APASATI O TASTA PENTRU A TRANSMITE VARIABILA PRIN VALOARE
WINDOW
SET UDFPARMS TO VALUE
STORE 1 TO GNX
*** VALOAREA LUI GNX ESTE NESCHIMBATA ***
@ 2,2 SAY 'VALOARE UDF: ' + STR(PLUSUNU(GNX))
@ 4,2 SAY 'VALOARE GNX: ' + STR(GNX)
*** TRANSMITEREA VARIABILEI PRIN REFERINTA***
WAIT ' APASATI O TASTA PENTRU A TRANSMITE VARIABILA PRIN REFERINTA'
WINDOW
CLEAR
SET UDFPARMS TO REFERENCE
STORE 1 TO GNX
*** VALOAREA LUI GNX SE SCHIMBA ***
@ 2,2 SAY 'VALOARE UDF: ' + STR(PLUSUNU(GNX))
@ 4,2 SAY 'VALUE OF GNX: ' + STR(GNX)
SET UDFPARMS TO VALUE
9. Programarea procedural
100



*** FUNCTIE UTILIZATOR (UDF) CARE ADUNA UNU LA UN NUMAR ***
FUNCTION PLUSUNU
PARAMETER GNZ
GNZ = GNZ + 1
RETURN GNZ

Urmtorul exemplu arat cum sunt transmise variabilele prin valoare i prin referin, utiliznd
parantezele i caracterul @.

Exemplul 2.
*** TRANSMITEREA VARIABILEI PRIN VALOARE ***
CLEAR
SET TALK OFF
WAIT ' APASATI O TASTA PENTRU A TRANSMITE VARIABILA PRIN VALOARE '
WINDOW
STORE 1 TO GNX
@ 2,2 SAY 'VALOARE UDF: ' + STR(PLUSUNU((GNX)))
@ 4,2 SAY 'VALOAREA GNX: ' + STR(GNX)
*** TRANSMITEREA VARIABILEI PRIN REFERINTA ***
WAIT ' APASATI O TASTA PENTRU A TRANSMITE VARIABILA PRIN REFERINTA '
WINDOW
CLEAR
STORE 1 TO GNX
@ 2,2 SAY 'VALOARE UDF: ' + STR(PLUSUNU(@GNX))
@ 4,2 SAY 'VALOARE GNX: ' + STR(GNX)

FUNCTION PLUSUNU(GNZ)
GNZ = GNZ + 1
RETURN GNZ

101
Baze de date



10. Comenzi ale nucleului SQL

Sistemul VFP suport comenzile SQL (Structured Query Language), care operaz la nivel de tabel
(relaie) i o singur comand SQL poate fi folosit pentru a nlocui o ntreag secven de comenzi.
Sistemul VFP poate executa urmtoarele comenzi SQL:

1. Comanda SELECT SQL
Comanda specific criteriile pe baza crora se bazeaz i lanseaz interogarea (Query). Sistemul
VFP interpreteaz interogarea i extrage datele cerute din tabel (tabele). Comanda SELECT pentru
interogare poate fi lansat din urmtoarele zone:
n fereastra de comenzi (modul de lucru interpretor);
din interiorul unui program VFP;
utiliznd asistentul de proiectare pentru interogare (Query Designer).

Sintaxa comenzii:
SELECT [ALL | DISTINCT] [TOP expr_num [PERCENT]] alias.]art_selectat [AS nume_coloan]
[[alias.]art_selectat [AS nume_coloan]] ROM [FORCE] nume_baz_de_date!]tabel [[AS]
alias_local] [INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN
nume_baz_de_date!]tabel [[AS] alias_local] [ON condiie_join] [[INTO destinaie] | [TO FILE
nume_fiier [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN ]] [NOCONSOLE] [PLAIN]
[WHERE condiie_join [AND condiie_join] [AND | OR condiie_filtrare [AND | OR
condiie_filtrare]]] [GROUP BY coloan_grup [,coloan_grup]] [HAVING condiie_filtrare]
[UNION [ALL] comand_selectare] [ORDER BY articol_ordonat [ASC | DESC] [,articol_ordonat
[ASC | DESC]]]

Semnificaia clauzelor:
SELECT specific cmpurile, constantele i expresiile care vor fi afiate n urma
interogrii.
ALL implicit se vor afia toate nregistrrile din tabel care ndeplinesc condiiile de
selecie, n rezultatul interogrii.
DISTINCT se exclud duplicatele din nregistrrile care ndeplinesc condiiile de selecie.
Argumentul se poate folosi o singur dat n cadrul unei clauze SELECT.
10. Comenzi ale nucleului SQL
102


TOP expr_num [PERCENT] rezultatul interogrii va conine un numr specificat de
nregistrri sau un anumit procent din nregistrri. Dac se folosete clauza TOP trebuie
inclus i clauza ORDER BY, care specific coloana din care clauza TOP, va determina
numrul de nregistrri (linii) care vor fi incluse n rezultatul interogrii. Se pot specifica
nregistrrile n domeniul 1..32767. nregistrrile care au valori identice pentru coloanele
specificate cu clauza ORDER BY sunt incluse n rezultatul interogrii. De exemplu dac se
specific valoarea 10 pentru expr_num, rezultatul interogrii poate conine mai mult de 10
nregistrri dac exist n tabel mai mult de 10 linii care au valori identice n coloanele
specificate cu clauza ORDER BY.
alias. se folosete pentru identificarea numelui cmpurilor (coloanelor) prin calificare.
Fiecare cmp specificat cu art_selectat va genera o coloan n rezultatul interogrii. Dac
dou sau mai multe cmpuri au acelai nume, se va include alias-ul tabelului i caracterul
punct (.) n faa numelui cmpului, pentru a preveni duplicarea coloanei.
art_selectat specific cmpul care trebuie inclus n rezultatul interogrii. Acesta poate fi:
numele unui cmp din tabelul care apare n clauza FROM.
constant care specific o valoare, care va apare n fiecare nregistrare din rezultatul
interogrii.
expresie care poate fi numele unei funcii utilizator.
AS nume_coloan specific numele coloanei care va apare la ieire, n rezultatul
interogrii. Aceast opiune este util atunci cnd art_selectat este o expresie sau conine un
cmp calculat i vrem s dm un nume sugestiv coloanei respective. Nu sunt admise dect
caracterele care se folosesc la stabilirea numelui cmpurilor la proiectarea tabelelor (de
exemplu nu se folosesc spaii).
FROM se declar tabelele care conin datele pe care vrem s le extragem n urma
interogrii. Dac nu este deschis nici un tabel, VFP va deschide caseta de dialog Open
pentru a specifica locaia fiierului care conine datele.
FORCE clauza prin care specific c tabele sunt unite (join) n ordinea n care ele apar n
clauza FROM.
nume_baz_de_date![tabel] specific numele unei baze de date, care nu este deschis, care
conine tabelul cu date. Clauza se folosete n cazul n care tabelul cu date nu face parte din
baza de date curent (deschis). Semnul ! se folosete pentru adresarea tabelului prin
calificare.
[AS] alias_local specific un nume temporar pentru tabelul menionat n argumentul tabel.
103
Baze de date


INNER JOIN rezultatul interogrii va conine numai nregistrrile din tabel care coincid
cu una sau mai multe nregistrri, din alt tabel (jonciune intern).
LEFT [OUTER] JOIN rezultatul interogrii va conine toate nregistrrile din tabel n
stnga cuvntului JOIN i nregistrrile care coincid vor fi afiate la dreapta cuvntului
JOIN. Clauza OUTER (exterior) este opional, se include pentru a sublinia faptul c se
creaz o jonciune exterioar.
RIGHT [OUTER] JOIN rezultatul interogrii va conine toate nregistrrile din tabel la
dreapta cuvntului JOIN i nregistrrile care coincid n stnga.
FULL [OUTER] JOIN rezulatul interogrii va conine att nregistrrile care coincid ct i
cele care nu coincid,din cele dou tabele.
[nume_baz_de_date!]tabel [[AS] alias_local] specific numele tabelului (baza de date) cu
care se realizeaz jonciunea (eventual definit ca alias local).
ON condiie_join specific condiia pentru care tabelele sunt unite (fac jonciune).
INTO destinaie .- specific unde vor fi stocate rezultatele interogrii. Destinaia poate fi una
din urmtoarele clauze:
ARRAY nume_tablou va stoca rezultatele ntr-o variabil de memorie de tip matrice.
Variabila nu se creaz dac rezultatul interogrii furnizeaz 0 nregistrri.
CURSOR nume_cursor stocheaz rezultatele interogrii ntr-un cursor. Dup executarea
comenzii SELECT, cursorul temporar rmne deschis (read-only) i este activ. Dup
nchiderea cursorului temporar, fiierul este ters.
DBF | TABLE nume_tabel stocheaz rezultatele interogrii ntr-un tabel.
TO FILE nume_fiier clauz prin care rezultatele interogrii sunt direcionate ctre un
fiier de tip ASCII (text).
ADDITIVE adaug rezultatele interogrii la coninutul existent al fiierului de tip text
specificat la clauza TO FILE.
TO PRINTER [PROMPT] direcioneaz ieirea ctre imprimant.
TO SCREEN direcioneaz ieirea n fereastra principal a sistemului VFP sau n fereastra
activ definit de utilizator.
NOCONSOLE mpiedic afiarea rezultatelor interogrii trimise ctre un fiier,
imprimant sau fereastra principal.
PLAIN mpiedic afiarea capului coloanei (numele coloanei) la ieirea din interogare.
WHERE - specific includerea doar a anumitor nregistrri n rezultatele interogrii.
10. Comenzi ale nucleului SQL
104


condiie_join [AND condiie_join] specific cmpurile care leag tabele din clauza
FROM. Se include operatorul AND pentru a lega condiii multiple de unire (jonciune).
AND | OR condiie_filtrare [AND | OR condiie_filtrare] specific criteriile pe care
trebuie s le ndeplineasc nregistrrile pentru a fi incluse n rezultatul interogrii. Se pot
declara mai multe condiii de filtrare, legate prin operatorii AND i/sau OR. Se poate folosi
de asemenea i operatorul NOT pentru a inversa valoarea expresiei logice.
GROUP BY coloan_grup [,coloan_grup] grupeaz nregistrrile pe baza valorilor din
una sau mai multe coloane; coloan_grup poate fi numele unui cmp dintr-un tabel obinuit,
sau un cmp care include o funcie SQL, sau o expresie numeric care indic locaia
coloanei n tabelul rezultat.
HAVING condiie_filtrare specific o condiie de filtrare pe care grupul trebuie s o
ndeplineasc pentru a putea fi inclus n rezulatele interogrii. HAVING trebuie utilizat
mpreun cu clauza GROUP BY. Clauza HAVING fr clauza GROUP BY acioneaz ca i
clauza WHERE.
UNION [ALL] comand_selectare - combin rezultatele finale ale unei clauze SELECT cu
rezultatele finale ale altei clauze SELECT. Implicit UNION verific rezultatele combinate i
elimin nregistrrile duplicat. Clauza ALL mpiedic aciunea clauzei UNION de a elimina
nregistrrile duplicat.
ORDER BY articol_ordonat ASC | DESC sorteaz rezultatele interogrii pe baza datelor
din una sau mai multe coloane. Fiecare articol_ordonat trebuie s corespund unei coloane
din rezultatele interogrii. ASC respectiv DESC specific ordinea sortrii (ascendent,
descendent).

Exemplu. Din tabelele CLIENI i COMENZI s se selecteze firma (CLIENI), data comenzii i
mijlocul de transport (COMENZI), sortate ascendent dup dat. Rezultatul se va scrie n fiierul
TRANSPORT.DBF.

OPEN DATABASES (TEST)
SELECT A.FIRMA,B.DATA_CDA,B.MIJLOC FROM CLIENTI A,COMENZI B ;
WHERE A.COD_FIRMA=B.COD_FIRMA ;
ORDER BY B.DATA_CDA ASC INTO TABLE TRANSPORT
BROWSE
CLOSE DATABASES

105
Baze de date


2. Comanda ALTER TABLE SQL modific un tabel existent.

Sintaxa comenzii :
ALTER TABLE nume_tabel_1 ADD | ALTER [COLUMN] nume_cmp1,tip_cmp
[(mrime_cmp[,precizie])] [NULL | NOT NULL] [PRIMARY KEY | UNIQUE]
[REFERENCES nume_tabel_2 [TAG nume_etichet]]

unde:
nume_tabel_1 specific numele tabelului a crui structur se modific.
ADD [COLUMN] nume_cmp1 specific numele cmpului care se adaug.
ALTER [COLUMN] nume_cmp1 specific numele unui cmp existent care se modific.
tip_cmp[(mrime_cmp[,precizie])] specific tipul cmpului, mrimea i precizia pentru
un cmp nou sau pentru modificarea unui cmp existent.
NULL | NOT NULL permite declararea unui cmp care accept sau nu valori de tip
NULL.
PRIMARY KEY creaz o o etichet primar de index. Eticheta de index are acelai nume
cu cel al cmpului.
UNIQUE creaz o etichet de index candidat cu acelai nume cu cel al cmpului.
REFERENCES nume_tabel_2 TAG nume_etichet specific tabelul printe ctre care se
stabilete o relaie persistent. TAG nume_etichet specific eticheta de index din tabelul
printe pe baza creia se stabilete relaia.

3. Comanda UPDATE SQL actualizeaz nregistrrile dintr-un tabel. nregistrrile pot fi
actualizate pe baza rezultatelor unei declaraii SELECT SQL.

Sintaxa comenzii:
UPDATE [nume_BD!]nume_tabel SET nume_coloan=exprL_1 [,nume_coloan=exprL_2]
WHERE condiie_filtrare_1[AND | OR condiie_filtrare_2]]

unde:
[nume_BD!]nume_tabel specific tabelul n care vor fi actualizate nregistrrile, cu noile
valori.
10. Comenzi ale nucleului SQL
106


SET nume_coloan=exprL_1[,nume_coloan=exprL_2] specific coloanele care sunt
actualizate i noile valori. Dac se omite clauza fiecare nregistrare din coloan va fi
actualizat cu aceai valoare.
WHERE condiie_filtrare_1[AND | OR condiie_filtrare_2]] specific nregistrrile care
vor fi actualizate cu noile valori; condiie_filtrare_1 specific criteriul pe care trebuie s-l
ndeplineasc nregistrrile pentru a fi actualizate. Se pot include mai multe condiii de
filtrare legate prin operatorii logici AND i/sau OR. Se poate folosi de asemenea operatorul
NOT pentru a inversa valoareaa expresiei logice.

Exemplu. n fiierul CLIENI din baza de date TEST, s se modifice cmpul cantitate maxim
(CANT_MAX) la valoarea 25.

OPEN DATABASES (TEST)
USE CLIENTI
UPDATE CLIENTI SET CANT_MAX=25
BROWSE FIELDS FIRMA,CANT_MAX
CLOSE DATABASES

4. Comanda INSERT SQL adaug o nou nregistrare la sfritul unui tabel existent. Noua
nregistrare conine date descrise n comanda INSERT sau pot fi preluate dintr-un masiv.

Sintaxa comenzii:
INSERT INTO tabel [(nume_cmp_1[,nume_cmp_2,...])] VALUES (valoare_1, valoare_2,...])
sau
INSERT INTO tabel FROM ARRAY nume_masiv | FROM MEMVAR

unde:
INSERT INTO tabel specific numele tabelului n care se adaug o nou nregistrare.
(nume_cmp_1[,nume_cmp_2,...]) specific numele cmpurilor din din noua nregistrare
n care vor fi inserate valori.
VALUES (valoare_1, valoare_2,...]) specific valorile cmpurilor care vor fi inserate n
noua nregistrare.
FROM ARRAY nume_masiv specific numele masivului din care vor fi inserate datele n
noua nregistrare.
107
Baze de date


FROM MEMVAR coninutul variabilelor va fi inserat n cmpurile care au acelai nume
cu variabilele.

Exemplu. n tabelul CLIENI din baza de date TEST coninutul nregistrrii curente va fi transmis
n memorie ca variabile i structura tabelului va fi copiat ntr-un nou tabel CLIENI2.

CLOSE DATABASES
CLEAR
OPEN DATABASES (TEST)
USE CLIENTI
* Se transmite nregistrarea curent n memorie ca variabile
SCATTER MEMVAR
* Se copiaz structura tabelului curent n tabelul CLIENTI2
COPY STRUCTURE EXTENDED TO CLIENTI2
* Se insereaz nregistrarea memorat n variabile
INSERT INTO CLIENTI2 FROM MEMVAR
SELECT CLIENTI2
BROWSE
USE
DELETE FILE CLIENTI2.DBF

5. Comanda CREATE CURSOR SQL creaz un tabel temporar. Fiecare cmp din tabelul
temporar este definit cu nume, tip, precizie, numr zecimale, valoare null i reguli de integritate
referenial. Aceste definiii pot fi obinute din comand sau dintr-un masiv.

Sintaxa comenzii::
CREATE CURSOR nume_alias(nume_cmp_1 tip_cmp [precizie[,nr_zecimale])
[NULL | NOT NULL] [CHECK expr_L [ERROR mesaj_eroare]] [DEFAULT expresie]
[UNIQUE] [NOCPTRANS]] [,nume_cmp_2...]) | FROM ARRAY nume_masiv

unde:
nume_alias specific numele tabelului temporar creat, care poate fi i numele unei
expresii.
nume_cmp_1 specific numele unui cmp din fiierul temporar.
10. Comenzi ale nucleului SQL
108


tip_cmp prin intermediul unei singure litere, specific tipul fiecrui cmp.
precizie[,nr_zecimale] specific mrimea i dac este cazul, numrul de zecimale pentru
cmpuri numerice.
NULL | NOT NULL aloc sau nu valori de tip null cmpului.
CHECK expr_L specific regula de validare pentru valorile care se vor nscrie n cmp.
Expresia logic expr_L poate fi i o funcie definit de utilizator.
ERROR mesaj_eroare specific mesajul de eroare pe care sistemul VFP l va afia n cazul
n care validarea datelor genereaz eroare.
DEFAULT expresie specific valoarea implicit pentru cmp. Tipul de dat dat de
expresie trebuie s fie de acelai fel cu tipul cmpului.
UNIQUE creaz un index candidat pentru cmp. Eticheta de index candidat are acelai
nume cu cel al cmpului. Valorile null i nregistrrile duplicat nu sunt permise ntr-un cmp
utilizat ca index candidat.
NOCPTRANS previne trecerea la o alt pagin de cod pentru caractere i cmpuri de tip
memo. Dac cursorul este convertit la o alt pagin de cod, cmpurile pentru care a fost
specificat clauza NOCPTRANS nu vor fi translatate.
FROM ARRAY nume_masiv specific numele unui masiv existent care conine numele,
tipul, precizia, numrul de zecimale pentru fiecare cmp din tabelul temporar.

Exemplu. Se creaz un cursor cu nume alias ANGAJAI cu urmtoarea structur:
ID N(5) identificator angajat;
NUME C(25);
ADRESA C(30);
ORAS C(20);
TELEFON C(8) care accept i valori de tip null;
SPEC M specialitatea, cmp de tip memo.
Se va aduga o nregistrare goal, dup care se vor nscrie valori n cmpurile tabelei.

CLOSE DATABASES
CLEAR
CREATE CURSOR ANGAJATI ;
(ID N(5),NUME C(25),ADRESA C(30),ORAS C(20),TELEFON C(8) NULL,SPEC M)
DISPLAY STRUCTURE
109
Baze de date


WAIT WINDOW APASATI O TASTA PENTRU A INTRODUCE O INREGISTRARE
INSERT INTO ANGAJATI (ID,NUME,ADRESA,ORAS,MARCA,SPECIALITATE);
VALUES (1004,DR. ION GARCEA,B-DUL LACUL TEI 124,SECTOR 2,BUCURESTI,;
88567902,PAZA SI PROTOCOL)
BROWSE
* n acest punct se poate copia nregistrarea ntr-un tabel permanent.
CLOSE ALL && odat ce cursorul s-a nchis, toate datele sunt golite din memorie.
CLEAR

6. Comanda CREATE TABLE SQL determin crearea unui tabel. La fiecare tabel nou creat, i se
specific numele cmpurilor din nregistrare i caracteristicile lor: tip, mrime, zecimale (pentru
tipurile numerice), valori de tip null i regulile de integritate refereniale. Definirea cmpurilor se
poate obine fie prin descriere n comand fie dintr-un masiv.

Sintaxa comenzii:
CREATE TABLE | DBF nume_tabel_1 [NAME nume_lung] [FREE] (nume_cmp_1 tip_cmp
[mrime[(,mrime_cmp[,precizie])] [NULL | NOT NULL] [CHECK expr_L_1 [ERROR
mesaj_eroare_1]] [DEFAULT expr_1] [PRIMARY KEY | UNIQUE] [REFERENCES
nume_tabel_2 [TAG etich_1_index]] [NOCPTRANS] [nume_cmp_2 ]
[PRIMARY KEY expr_2 TAG etich_2_index|, UNIQUE expr_3 TAG etich_3_index]
[, FOREIGN KEY expr_4 TAG etich_4_index [NODUP] REFERENCES nume_tabel_3 [TAG
etich_5_index]]
[,CHECK expr_L_2[ERROR mesaj_eroare_2]]) | FROM ARRAY nume_masiv

unde:
nume_tabel_1 specific numele tabelului care va fi creat. Opiunile TABLE i DBF sunt
identice.
NAME nume_lung specific un nume lung pentru tabel. Acest nume poate fi specificat
numai dac este deschis o baz de date, el fiind stocat (memorat) n cadrul bazei de date.
Numele lung poate conine pn la 128 caractere i poate fi folosit numai n cadrul bazei de
date.
FREE noul tabel nu va fi adugat la baza de date curent (deschis).
(nume_cmp_1 tip_cmp [mrime[(,mrime_cmp[,precizie])] specific numele
cmpului, tipul, mrimea i precizia (numrul de poziii zecimale). Un tabel poate conine
10. Comenzi ale nucleului SQL
110


pn la 255 cmpuri. Dac unul sau mai multe cmpuri accept valori de tip null, limita se
reduce la 254.
NULL | NOT NULL permite / mpiedic introducerea de valori de tip null n cmp.
CHECK expr_L_1 specific o regul de validare pentru cmp. Expresia logic expr_L_1
poate fi o funcie definit de utilizator. La adugarea unei nregistrri vide, se verific regula
de validare. Dac regula de validare nu prevede acceptarea de valori vide n cmp, se
genereaz eroare.
ERROR mesaj_eroare_1 specific mesajul de eroare pe care sistemul VFP l afieaz la
apariia unei erori, generate de clauza CHECK, care verific regula de validare.
DEFAULT expr_1 specific valoarea implicit pentru cmp. Expresia expr_1 trebuie s
fie de acelai tip cu tipul cmpului.
[PRIMARY KEY creaz un index primar pentru cmp. Eticheta de index primar are
acelai nume cu cel al cmpului.
UNIQUE creaz un index candidat pentru cmp. Numele etichetei de index candidat este
acelai cu cel al cmpului.
REFERENCES nume_tabel_2 [TAG etich_1_index] specific numele tabelulului printe,
la stabilirea unei relaii persistente. Dac se omite clauza TAG etich_1_index, relaia se
stabilete utiliznd cheia primar de index a tabelului printe. dac tabelul printe nu are un
index de cheie primar, sistemul va genera eroare. Se include clauza TAG etich_1_index
pentru a stabili o relaie bazat pe existena etichetei de index pentru tabelul printe.
NOCPTRANS previne trecerea la o alt pagin de cod pentru caractere i cmpuri memo.
Dac tabelul este convertit la o alt pagin de cod, cmpul pentru care a fost specificat
clauza NOCPTRANS, nu va fi translatat.
[nume_cmp_2 ] urmtorul cmp din structura tabelului. Are aceleai caracteristici de
descriere ca i primul cmp.
PRIMARY KEY expr_2 TAG etich_2_index specific indexul primar care va fi creat.
Expresia expr_2 poate specifica orice cmp sau combinaie de cmpuri din tabel. TAG
etich_2_index specific numele etichetei de index primar. Deoarece un tabel nu poate avea
dect o singur cheie primar de indexare, nu se poate include aceast clauz dac deja
exist definit o cheie primar.
UNIQUE expr_3 TAG etich_3_index creaz un index candidat. Expresia expr_3 specific
orice cmp sau combinaie de cmpuri din tabel. Clauza TAG etich_3_index specific
numele etichetei de index pentru eticheta de index candidat, care va fi creat.
111
Baze de date


FOREIGN KEY expr_4 TAG etich_4_index [NODUP] creaz un index extern (non-
primar) i stabilete o relaie cu tabelul printe. expr_4 specific expresia indexului extern.
Clauza TAG etich_4_index specific numele etichetei de index externe. Clauza NODUP se
include pentru a crea un index candidat extern.
REFERENCES nume_tabel_3 [TAG etich_5_index] specific tabelul printe ctre care se
stabilete o relaie persistent. Includerea clauzei TAG etich_5_index determin stabilirea
relaiei pe baza unei etichete de index a tabelului printe. Dac clauza este omis, relaia se
stabilete utiliznd implicit cheia primar de indexare din tabelul printe.
CHECK expr_L_2[ERROR mesaj_eroare_2] specific regula de validare pentru tabel.
FROM ARRAY nume_masiv specific numele unui masiv existent care conine numele,
tipul, mrimea i precizia pentru fiecare cmp al tabelului. Coninutul masivului poate fi
definit cu funcia AFIELDS().

7. Comnda DELETE SQL realizeaz tergerea la nivel logic (marcarea pentru tergere) a
nregistrrilor dintr-un tabel.

Sintaxa comenzii:
DELETE FROM [nume_BD!]nume_tabel [WHERE condiie_filtrare_1 [AND | OR
condiie_filtrare_2...]]

unde:
FROM [nume_BD!]nume_tabel specific numele tabelului n care nregistrrile sunt
marcate pentru tergere la nivel logic.
WHERE condiie_filtrare_1 [AND | OR condiie_filtrare_2...] vor fi marcate pentru
tergere numai anumite nregistrri, cele care ndeplinesc condiiile de filtrare .
tergerea fiind la nivel logic, nregistrrile vor fi terse fizic din tabel doar dup utilizarea comenzii
PACK.


11. Proiectarea meniurilor i a barelor de instrumente
112



11. Proiectarea meniurilor i a barelor de instrumente

Meniurile (Menus) i barele de instrumente (Toolbars) furnizeaz o cale structurat i accesibil
pentru mnuirea comenzilor aplicaiei. Prin planificarea i proiectarea judicioas a meniurilor i
barelor de instrumente, se poate crete calitatea aplicaiilor.

O bun parte din activitatea de creare a unui meniu sistem este realizat cu ajutorul proiectantului
de meniuri (Meniu Designer), n care se creaz meniul actual, submeniurile i opiunile din meniu.





113
Baze de date



12. Aplicaie

Enunul problemei: tema abordat este Evidena rezultatelor activitii studenilor ntr-o facultate.

Datele de intrare:
Fia de nscriere;
Cataloagele de note;
Planul de nvmnt;
Programele analitice.

Datele de ieire:
Componena grupelor;
Situaia dup o sesiune nominal;
Situaia statistic asupra repartiiei notelor la o disciplin;
Situaia statistic asupra repartiiei mediilor.

Actualizarea datelor:
Adugarea de noi studeni;
Modificarea datelor despre studeni;
tergerea unui student;
Adugrea de note;
Modificarea notelor;
tergerea studentului din fiierul de note;
Adugarea de noi discipline;
Modificarea numelui unei discipline;
tergerea unei discipline.

Coduri adoptate:
Codul judeului;
Codurile disciplinelor;
An studii 1-6, an calendaristic 2004-2005.

12. Aplicaie
114


Interfaa cu utilizatorul:
Stabilirea meniurilor i a videoformatelor pentru programul monitor i a programelor subordonate.

Proiectarea intrrilor:
Cererea de nscriere;
Cataloage;
Formularele cu codurile i denumirile disciplinelor.

Proiectarea ieirilor:
Lista studenilor pe grupe;
Situaia dup sesiune;
Statistica la o disciplin;
Statistica medii;
List bursieri;
List integraliti.
Stabilirea cadrului pentru:

Operaiile de actualizare;
Obinerea rapoartelor finale.
Schema general propus














115
Baze de date




CATALOAGE CEREREA DE
NSCRIERE
PLAN
NVMNT
PROGRAME
ANALITICE
VIDEOFORMAT
STUDENT
VIDEOFORMAT NOTE
VIDEOFORMAT
DISCIPLINE
LISTA
STUDENILOR PE
GRUPE
SITUAIA DUP
SESIUNE
STATISTICA LA O
DISCIPLIN
STATISTIC
MEDII
LISTA BURSIERI
INTRODUCERE DE LA
TASTATUR
PROGR. MONITOR
DISCIPLINE
NOTE
STUDENT
















Crearea, actualizarea, modificarea, interogarea tabelelor cu urmtoarea structur:


NOTE DISCIPLINE STUDENT

MATR C(5)
NUME_PRE C(30)
ADRESA MEMO
TEL C(9)
AN_STUDII C(1)
GRUPA C(2)
MATR C(5)
COD_DIS C(3)
NOTA N(2)
COD_DIS C(3)
DENUMIRE
MEMO
EXAMEN L
COLOCVIU L
TIP_CURS C(1)
TIP_PROMO C(1)
RELAIE
1
1
RELAIE





CODIFICARI

promovare pentru u obligatori este Nu - N


U OBLIGATORI - O
TIP_PROMO
OPTIONAL - P
FACULTATIV - F
U OBLIGATORI - O
TIP_CURS






12. Aplicaie
116


Meniul programului ar putea fi de forma:


CREARE_BD
STUDENTI
NOTE
DISCIPLINE
ACTUALIZARE_BD
ADAUGARE
MODIFICARE
STERGERE
STUDENTI
NOTE
DISCIPLINE
RAPOARTE
LISTA STUDENTI
INTEGRALISTI
RESTANTIERI
STATISTICA DISCIPLINA
STATISTICA MEDII
LISTA BURSIERI
IESIRE
SUBMENIU
NIVELUL 2
SUBMENIURI
NIVELUL 1
BARA DE MENIURI
117
Baze de date



Aplicaii laborator

1. Modificarea structurii unui fiier

n fereastra de comenzi se introduc comenzile de creare a unui fiier i vizualizare:
CREATE TABLE STUD1 (MATR C(3), NUME C(30), AN C(1), GRUPA C(2))
BROWSE
Se lanseaz comenzile CTRL/Y i se populeaz cu 3-4 nregistrri. Salvm cu CTRL/W.
Se deschide fereastra DATA SESSION i se nchide fiierul STUD1 de la butonul CLOSE.
Se va crea programul de modificare a structurii fiierului anterior pentru adugarea unui nou cmp
cu numele MBAC (medie bacalaureat): FILE/NEW/PROGRAM/NEW FILE i introduc
urmtoarele linii:
SELECT 2
USE STUD1
COPY STRUCTURE EXTENDED TO TEMP
USE TEMP
BROWSE
APPEND BLANK
REPLACE FIELD_NAME WITH MBAC
REPLACE FIELD_TYPE WITH N
REPLACE FIELD_LEN WITH 5
REPLACE FIELD_DEC WITH 2
BROWSE
USE TEMP
CREATE STUD2 FROM TEMP
USE STUD2
APPEND FROM STUD1
BROWSE
CLOSE DATABASES
Salvm i rulm programul.

Aplicaii laborator
118


2. Adresarea prin macrosubstituie

Se va crea un program care va folosi macrosubstituia pentru numele de fiiere STUD1 i STUD2.
Se vor introduce urmtoarele linii de program:
PUBLIC FIS C(20)
FOR I=1 TO 2 DO
GOTO I
FIS=STUD+ALLTRIM(STR(I))+.DBF
USE &FIS
BROWSE
ENDFOR
CLOSE DATABASES
Salvm i rulm programul.

3. Crearea unui meniu

MENU BAR va avea urmtoarele componente:
CREARE BD results Submenu create Studenti/Note results - procedure
ACTUALIZARE - results Submenu create Studenti/Note results - procedure
MEDIA results- procedure
IESIRE results- procedure
Procedurile pentru crearea BD:
Pentru fiierul Studenti:
CREATE TABLE STUD (MATR C(3), NUME C(30), AN C(1), GRUPA C(2))
CLOSE DATABASES
Pentru fiierul Note:
CREATE TABLE NOTE (NOTA1 N(2), NOTA2 N(2), MEDIA N(5,2))
CLOSE DATABASES
b) Procedurile de actualizare:
Pentru fiierul Studenti:
USE STUD
BROWSE
CLOSE DATABASES
Pentru fiierul Note:
119
Baze de date


USE NOTE
BROWSE
CLOSE DATABASES
n fiecare fereastr BROWSE cu CTRL/Y se populeaz fiierele cu 3-4 nregistrri. La fiierul Note
nu se completeaz cmpul MEDIA.
c) Procedura de calcul a mediei:
USE NOTE
FOR I=1 TO RECCOUNT()
GOTO I

REPLACE MEDIA WITH (NOTA1+NOTA2)/2
ENDFOR
BROWSE
CLOSE DATABASES
d) Procedura de ieire:
CLEAR EVENTS
CLOSE DATABASES
SET SYSMENU TO DEFAULT
Anexa
120


Anexa

Limitele SISTEMULUI VFP 6.0

Caracteristic Valoare
Nr. maxim de nregistrri ntr-o tabel 1 miliard
Mrimea maxim a unei tabele 2 Gb
Nr. maxim de caractere pe nregistrare 65.500
Nr. maxim de cmpuri pe nregistrare 255
Nr. maxim de tabele deschise simultan 255
Nr. maxim de caractere pentru un
cmp
254
Nr. maxim de bytes pentru cheia de index
compus
100
Nr. maxim de bytes pentru cheia de index
simplu
240
Nr. maxim de fiiere de index deschise pentru o
tabel
nelimitat
Nr. maxim de fiiere de index deschise pentru toate zonele de
lucru
nelimitat
Nr. maxim de
legturi
nelimitat
Lungimea maxim a unei expresii
relaionale
nelimitat
Valoarea maxim pentru
ntregi
2.147.483.647
Precizia n calculul
numeric
16
Mrimea maxim pentru un cmp de tip
caracter
254
Mrimea maxim pentru un cmp de tip
numeric
20
121
Baze de date


Nr. maxim de caractere pentru un cmp dintr-o tabel
liber
10
Nr. maxim de caractere pentru un cmp dintr-o tabel care aparine unei
BD
128
Nr. maxim de
variabile
65.000
Nr. maxim de masive 65.000
Nr. maxim de elemente ntr-un
masiv
65.000
Nr. maxim de linii surs ntr-un
program
nelimitat
Mrimea maxim a modulului de program
compilat
64 Kb
Nr. maxim de proceduri
(subprograme)
nelimitat
Nr. maxim de apeluri DO
imbricate
128
Nr. maxim de comenzi de ciclare 384
Nr. maxim de parametri transmii 27
Nr. maxim de tranzacii 5
Nr. maxim de obiecte la definirea unui
raport
nelimitat
Nr. maxim de niveluri de grupare ntr-un
raport
128
Nr. maxim de ferestre deschise nelimitat
Nr. maxim de ferestre BROWSE
deschise
255
Nr. maxim de caractere ntr-un ir de
caractere
16.777.184
Nr. maxim de caractere ntr-o linie de
comand
8.192
Nr. maxim de fiiere
deschise
limit sistem
Anexa
122


Nr. maxim de cmpuri selectate prin comanda
SELECT-SQL
255

123
Baze de date


Bibliografie

1. Dima, G., Dima M. FoxPro, Editura Teora, Bucureti, 1993.
2. Dima, G., Dima M. FoxPro Meniuri, Editura Teora, Bucureti, 1994.
3. Lungu, I.si al. Sistemul FoxPro Prezentare i Aplicaii, Editura All, Bucureti, 1993.
4. Velicanu, M, Lungu,I Muntean, M. Dezvoltarea Aplicaiilor cu Baze de Date n Visual FoxPro,
Editura All, Bucureti, 2001.
5. *** Visual FoxPro 6.0 Manualele Microsoft

S-ar putea să vă placă și