Documente Academic
Documente Profesional
Documente Cultură
bd2 PDF
bd2 PDF
BUCURETI
BAZELE INFORMATICII
SI
LIMBAJE DE PROGRAMARE
Romic TRANDAFIR
Bucureti
2007
2007 Cuprins 2
Cuprins
Cuprins................................................................................................................................................1
1. Bnci i baze de date ......................................................................................................................5
1.1. Noiuni generale ....................................................................................................................5
1.2. Sisteme de baze de date.........................................................................................................6
1.3. Organizarea datelor ntr-o baz de date.................................................................................7
1.4. Modelarea la nivel logic a datelor ntr-o baz de date...........................................................8
1.5. Sistem de gestiune a bazelor de date ...................................................................................10
1.5.1. Interfee SGBD ..........................................................................................................11
1.5.2. Funcii i servicii oferite de un SGBD.......................................................................12
1.5.3. Activitile asigurate de SGBD..................................................................................14
1.5.4. Obiectivele unui SGBD .............................................................................................15
2. Etapele de realizare a unei bnci de date...................................................................................17
2.1. Etapa de analiz...................................................................................................................17
2.2. Etapa de programare............................................................................................................17
2.3. Punerea n funciune i exploatarea bazei de date ...............................................................18
2.4. Documentaia aplicaiei .......................................................................................................19
3. Sisteme de gestiune a bazelor de date relaionale .....................................................................20
3.1. Modelul relaional al datelor ...............................................................................................20
3.1.1. Structura relaional a datelor ....................................................................................20
3.1.2. Operaii n algebra relaional....................................................................................21
3.1.3. Optimizarea cererilor de date.....................................................................................28
3.1.4. Baze de date relaionale .............................................................................................30
3.1.5. Tipuri de relaii ..........................................................................................................31
3.1.6. Restricia de cardinalitate...........................................................................................33
3.2. Regulile lui Codd.................................................................................................................34
3.3. Normalizarea datelor ...........................................................................................................37
3.4. Cerinele minimale de definire a SGBDR ...........................................................................37
4. Componentele funcionale ale sistemului Visual FoxPro .........................................................39
4.1. Programarea orientat pe obiecte ........................................................................................39
4.2. Ierarhia claselor n Visual FoxPro.......................................................................................44
4.2. Arhitectura VFP 6.0.............................................................................................................45
4.3. Moduri de lucru n VFP.......................................................................................................46
4.3.1. Modul de lucru meniu sistem.....................................................................................47
4.3.2. Modul de lucru prin comenzi.....................................................................................52
5. Organizarea datelor nVisual FoxPro ........................................................................................53
5.1. Manipularea bazei de date i a tabelelor n VFP .................................................................53
5.1.1. Crearea bazei de date .................................................................................................53
5.1.2. Crearea tabelelor ........................................................................................................54
5.1.3. Validarea cmpurilor unei nregistrri la introducere................................................55
5.2. Deschiderea bazei de date/tabelei........................................................................................61
5.3. Consultarea i modificarea bazei de date/tabelei.................................................................62
5.3.1. Modificarea structurii de date a tabelelor n modul asistat........................................62
5.3.2. Deplasri n tabel. Cutri secveniale.....................................................................64
5.4. nchiderea bazei de date/tabelei...........................................................................................65
6. Utilizarea asistentului Wizard n VFP .......................................................................................67
6.1. Table Wizard .......................................................................................................................67
6.2. Form Wizard........................................................................................................................68
6.3. Report Wizard .....................................................................................................................69
3 Baze de date
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.
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.
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 trei
elemente:
colecie de date aflate n interdependen creare baza
descrierea datelor i a relaiilor dintre ele de date
APLICAII
BAZA DE
UTILIZATORI SGBD DATE
ALTE ELEMENTE
Fig. 1
7 Baze de date
Vizualizare Vizualizare
Nivel extern
grup utilizatori 1 grup utilizatori n
Date memorate
Fig. 2
1. Bnci i baze de date 8
Nivelul extern sau nivelul vizual (utilizator), include o colecie de scheme externe ce
descriu baze de date prin prisma diferiilor utilizatori.
n multe SGBD nu se poate face o distincie clar ntre cele trei niveluri, de multe ori nivelul
conceptual este puternic dezvoltat i suplinete aparent celelalte niveluri. De asemenea, la
dezvoltarea aplicaiilor se remarc o contopire a nivelului extern cu cel conceptual.
n funcie de categoria de personal implicat n folosirea bazei de date, datele dintr-o baz de
date pot fi structurate pe trei niveluri:
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.
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;
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 trei 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 baze 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
1. Bnci i baze de date 10
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.
Sistemele de gestiune a bazalor de date (DBMS DataBase Management System) 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.
n arhitectura unui sistem de baze de date SGBD ocup locul central.
Un SGBD este ansamblul software interpus ntre utilizatori i baza de date i este un interpretor
de cereri de acces sau regsire de date n baza de date, execut cererea i returneaz rezultatul.
SGBD este un sistem de programe care faciliteaz procesul definirii, construcei, organizrii i
manipulrii datelor pentru diverse aplicaii. Utilizatorul are acces la SGBD prin intermediul unei
interfee (aplicaie) cu ajutorul creia stabilesc parametrii interogrii i se primete rspuns; ntreg
ansamblul este descris n Figura 3.
Aplicaie SGBD
Utilizator Baza de
date
Fig. 3
Organizarea pe trei niveluri a sistemelor de baze de date este strns legat de conceptul de
independen a datelor, n sensul c sistemul bazei de date poate fi modificat la orice nivel fr a
11 Baze de date
afecta nivelurile superioare. Independena datelor poate fi privit n dou moduri, corespunztoare
nivelurilor conceptual (logic) i intern (fizic).
Funcionarea unui SGBD se realizeaz prin comenzi specifice limbajului SQL. Nivelele
conceptual i intern nefiind distinct delimitate sunt adresate printr-un limbaj comun numit DDL
Data Definition Language, utilizat pentru administrarea i proiectarea bazei de date n definirea
ambelor scheme. Dac SGBD are o delimitare clar ntre nivelul conceptual i cel intern, atunci
DDL se folosete pentru comenzile la nivel conceptual, iar pentru specificarea schemei interne se
folosete limbajul SDL Storage Definition Language. Pentru cel de al treilea nivel, extern, se
folosete limbajul VDL View Definition Language, destinat utilizatorilor i pentru interfaa
acestora cu nivelul conceptual. Pentru operaiile tipice legate de cutare, inserare, tergere i
modificarea datelor, SGBD dispune de un limbaj de manipulare numit DML - Data Manipulation
Language.
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
interacioneaz cu toate celelalte componente ale acestuia asigurnd legtura i interdependena
ntre ele.
Un SGBD ofer interfeele corespunztoare tuturor categoriilor de utilizatori pentru a facilita
legtura acestora cu baza de date. Principalele tipuri de interfee:
Interfee pe baz de meniuri care ofer utilizatorilor o list de opiuni (meniuri) pentru
formularea interogrilor.
1. Bnci i baze de date 12
Interfee grafice afieaz utilizatorului un set de diagrame, cererile sunt formulate prin
manipularea acestor diagrame. De cele mai multe ori interfeele grafice sunt asociate cu
meniurile.
Interfee bazate pe videoformate se utilizeaz pentru introducerea de noi date,
actualizarea bazei de date i cutare.
Interfee n limbaj natural accept comenzi scrise n limba englez sau alte limbi de
circulaie internaional. Interpretarea cererilor se face pe baza unui set de standard de
cuvinte cheie ce sunt interpretate pe baza schemei interne.
Interfee specializate pentru cereri repetate (limbaj de comand) sunt destinate unei
anumite categorii de utilizatori, de exemplu pentru angajaii unei bnci se
implementeaz un mic set de comenzi prescurtate pentru a micora timpul necesar
introducerii comenzii.
Interfee pentru administrarea bazei de date se utilizeaz pentru comenzile privilegiate
utilizate de administratorii bazei de date i se refer la crearea de conturi, parole, setarea
parametrilor sistemului, autorizarea intrrii pe un anumit cont, reorganizarea structurii de
stocare a datelor din baza de date, accsul la e, nregistrri.
Exemple de SGBD: MySQL, Microsoft SQL, Microsoft Access, Visual FoxPro, Oracle.
UTILIZATORI
FUNCIILE
SGBD UTILIZARE
BAZA DE
DATE
Fig. 4
Prin acestea, un SGBD trebuie s asigure:
definirea crearea bazei de date;
introducerea (adugarea) datelor n baza de date;
modificarea structurii sau a unor date deja existente n baza de date;
tergerea datelor din baza de date;
consultarea bazei de date interogare/extragerea datelor.
1. Bnci i baze de date 14
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.
Proiectarea unei baze de date const din proiectare logic i fizic a acesteia astfel nct s
rspund cerinelor utilizatorilor pentru un anumit set de aplicaii specifice. n general, proiectarea
corect a unei baze de date parcurge etapele de analiz i programare. Pentru etapa de analiz se
recomand parcurgerea pailor:
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.
Date de la Rezultate
utilizator Programul utilizator
Meniul principal
Rapoart
Programe de
Programe de
Programe Ecrane de Filtre extragere
pentru introducere date
introducere
date Export
Import Baza de date
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.
Deoarece etapa de analiz este proprie fiecrei aplicaii n parte, nu se recomand detalierea
etapelor 1 6. De aceea n cele ce urmeaz este detaliat documentarea programelor prin fia
tehnic, fi care trebuie s conin rubricile:
Program nume;
Scop;
Parametri;
Variabile de intrare, de ieire;
Ce programe apeleaz;
Care sunt programele care l apeleaz;
Ce fiiere utilizeaz;
Explicaii - sub form de comentarii n programele surs;
Programul surs.
n 12.2.2 se arat cum se obine n mod automat, cu ajutorul VFP, documentarea unei aplicaii
realizat cu acest sistem.
3. Sisteme de gestiune a bazelor de date relaionale 20
Domeniul este 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 D1 ,..., Dn
produsul cartezian al acestora reprezint ansamblul tuplurilor (v1 ,..., vn ) , unde v1 este o valoare din
D1, v2 este o valoare din D2, etc., iar tuplura corespunde unei linii din tabel.
Relaia (tabela) este 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
tabel este cardinalul tabelei, numrul valorilor dintr-un tuplu este gradul tabelei. 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 aprea de mai multe ori n produsul cartezian pe baza cruia este definit tabela.
Tabelul 1 prezint comparativ conceptele utilizate n organizarea datelor n fiiere, n baze de
date, conceptele din teoria relaional i din SGBDR.
21 Baze de date
Tabelul 1
Fiiere Teoria BD Teoria relaional SGBDR
Fiier Colecie de date Relaie Tabel
nregistrare Familie de caracteristici Tuplu Linie
Cmp Caracteristic Atribut Nume coloan
Valoare Domeniu de Valori Domenii Domeniu coloan
Reuniunea operaie n algebra relaional, definit pe dou relaii R1 i R2, ambele cu aceeai
schem (structur), ce const din construirea unei noi relaii R3, cu schema identic cu R1 i R2,
avnd drept extensie (nregistrrile) tuplurile din R1 i R2 luate mpreun, o singur dat.
Diferena definit pe dou relaii R1 i R2, cu aceeai schem, avnd drept extensie tupluri ale
relaiei R1 care nu se regsesc n relaia R2.
Produs cartezian definit pe dou relaii R1 i R2, operaie care const din construirea unei noi
relaii R3, a crei schem se obine din concatenarea schemelor relaiilor R1 i R2, i a crei extensie
cuprinde toate combinaiile tuplurilor din R1 cu cele din R2.
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. n practic, operaia de
proiecie se face considernd i un cmp care conine o cheie unic, astfel nct fiecare nregistrare
devine unic.
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:
Jonciunea (join-ul) operaie n algebra relaional definit pe dou relaii R1 i R2, care const din
construirea unei noi relaii R3, prin concatenarea unor tupluri din R1 cu tupluri din R2. Se
concateneaz acele tupluri din R1 i R2 care satisfac o anumit condiie, specificat explicit n cadrul
operaiei. Extensia relaiei R3 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:
Jonciunea natural se refer la equijoin-ul aplicat tuturor cmpurilor comune. Operatorul pentru
jonciunea natural este * .
Intersecia operaie din algebra relaional definit pe dou relaii R1 i R2, 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 R1 i R2.
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.
Exemple
Pentru a nelege mai bine aceste operaii s presupunem c avem urmtoarele trei structuri de
date:
23 Baze de date
2. S2 fiier clieni
Sofer_id Sofer _nume Permis_ani
22 Ionescu Paul 7
31 Leahu Mihai 8
58 Arsene Ion 10
3. S3 fiier clieni
Sofer_id Sofer _nume Permis_ani
28 Doncea Horia 5
31 Leahu Mihai 8
44 Coman Stefan 12
58 Arsene Ion 10
- Intersecia R3 = S2 S3
- Diferena S2 - S3
- Produs cartezian, Y 1 S 2 . Fiecare linie din relaia Y1 se combin cu fiecare linie din
relaia S2; ca rezultat al produsului cartezian, apare un conflict deoarece ambele relaii Y1 i
S2 au cte un cmp cu numele sofer_id, care poate fi rezolvat prin operaia de redenumire.
- Proiecia. Deoarece valorile dintr-un domeniu se pot repeta este necesar eliminarea
repetrilor:
25 Baze de date
Sofer_nume,Permis_ani(S3)
Sofer _nume Permis_ani
Doncea Horia 5
Leahu Mihai 8
Coman Stefan 12
Arsene Ion 10
Din relaia S3 au fost selectate numai acele nregistrri care satifac condiia de vechime a
permisului (mai mult de 8 ani).
Operaia de proiecie se poate combina cu cea de selecie pentru optimizarea cererilor de date;
de exemplu dac dorim extragerea datelor din relaia S3 numai pentru cmpurile Sofer_nume i
Permis_ani mai mare de 8 ani:
Sofer_nume,Permis_ani(Permis_ani > 8(S3))
Noua relaie rezultat din equijoin este similar cu produsul cartezian dintre S2 i Y1, dar
numai o copie a cmpului pentru care este specificat egalitatea, va fi specificat n noua relaie (nu
mai apare duplicarea cmpului).
Exemple de jonciuni exterioare
jonciune exterioar stnga
Y1 Y1.Sofer_id=S2.Sofer_id S2
Y1 Y1.Sofer_id=S2.Sofer_id S2
Y1 Y1.Sofer_id=S2.Sofer_id S2
27 Baze de date
Fig. 1
relaia obinut prin diviziune va conine toate tuplurile x care pentru fiecare tuplur y din B nu
are asociat un tuplu xy n A. Pentru a nelege mai bine operaia de diviziune vom considera
urmtorul exemplu, n care considerm tabelul A1 (cmpuri xx_no, yy_no) i tablele B1, B2, B3
(un singur cmp yy_no, corespondent cu cel din tabelul A) i realizm operaiile de diviziune
A1/B1, A1/B2, A1/B3:
Secvena de program care realizeaz cele trei operaii de diviziue se gsete n figura 1, ultima
seciune *Diviziune. Rezultatul celor trei comenzi SQL este:
Proprieti
Comutativitatea operaiilor de join i produs cartezian:
E1 >< E 2 = E 2 >< E1
E1 E 2 = E 2 E1
Asociativitatea operaiilor de join i produs cartezian:
( E1 >< E 2 ) >< E3 = E1 >< ( E 2 >< E3 )
( E1 E 2 ) E3 = E1 ( E 2 E3 )
Compunerea proieciilor
Compunerea seleciilor F1 ( F2 ( E )) = F1 F2 ( E ) , deoarece F1 I F2 = F 2 I F1 , seleciile se pot
comuta:
F 1 ( F 2 ( E ) ) = F 2 ( F 1 ( E ) )
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
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 cartezian
Combinarea seleciilor multiple se realizeaz cu ajutorul relaiei de compunere a
seleciilor.
3. Sisteme de gestiune a bazelor de date relaionale 30
- cu o singur valoare din setul de valori ale atributului pentru fiecare entitate exist numai
o singur valoare, nerepetabil la o alt entitate. De exemplu, CNP (Codul Numeric Personal)
pentru o persoan este unic i nici o alt persoan nu mai are atribuit aceeai valoare a CNP;
- cu set de valori atributul poate lua orice valoare din set i care se poate repeta pentru o alt
entitate. Este cazul culorilor (dou mrci de main diferite pot avea aceai culoare) sau gradul
cadrelor didactice;
- derivate sunt cele ce se pot determin din alte atribute, de exemplu vrsta unei persoane se
poate determina scznd din data curent data naterii persoanei respective, sau determinarea valorii
unei entiti prin produsul dintre preul unitar i cantitate. Prezena atributelor derivate mpreun cu
cele primare cresc gradul de redundan al datelor din baza de date i trebuie evitat;
- fr valoare (NULL) bazele de date accept i posibilitatea lipsei datelor pentru cmpurile
anumitor nregistrri, de exemplu, din atributul Adres, poate lipsi Numele_blocului sau Nr_Scara.
Cheile de restricie introduse n modelul relaional sunt asociate cu tipurile de entiti, de
exemplu, dou persoane diferite nu pot avea aceleai valori pentru atributele Nume i Adresa.
Schema n modelul relaional se definete ca fiind un tip de entitate compus din numele
tipului de entitate, colecia de atribute (cu domeniile asociate i indicaii n cazul n care un atribut
este complex sau cu valori unice) i cheile de restricie.
Reprezentarea diagramelor E-T tipurile de entiti reprezentate n diagramele E-T sunt sub
form de dreptunghiuri i atributele sub form de elipse. Atributele tip set de de valori (modelul
relaional permite atributelor s posede un set de valori din domeniu) sunt reprezentate n elipse
duble. Sublinierea unui atribut n diagram l desemneaz ca fiind cheie primar, adic un atribut cu
valoare unic. Figura 2 descrie o diagram E-R pentru entitatea PERSOANA:
PERSOANA
Fig. 2
Relaia unu-la-unu (1-1) este tipul cel mai simplu de relaie, prin care unui element din tabela
R1 i corespunde un singur element din tabela R2 i reciproc. Relaia 1-1 este mai rar folosit, n
general pentru a reduce numrul de atribute dintr-o tabel, de exemplu dac vrem s desprim
elementele fixe care se modific mai rar (datele personale) fa de cele care se modific mai des
(situaia colar anual).
Relaia unu-la-mai muli (1-N) este tipul de relaie prin care unui element din tabela R1 i
corespund unul sau mai multe elemente din tabela R2, iar unui element din tabela R2 i corespunde
un singur element din tabela R1. De exemplu, presupunem c avem:
- tabela FACULTATE cu atributele CodFac, Denumire, Adresa, NumeDecan;
- tabela STUDENTI cu atributele CodStud, CodFac, An, Grupa, Medie, Bursa;
ntre cele dou tabele exist o relaie 1-N prin intermediul cmpului CodFac.
Relaia mai muli-la-mai muli (M-N) prin care unui element din tabela R1 i corespunde unul
sau mai multe elemente din tabela R2 i reciproc. De exemplu, un student frecventeaz mai multe
cursuri i o disciplin este frecventat de mai muli studeni. Acest tip de relaie este frecvent
ntlnit, dar nu se poate implementa direct n bazele de date relaionale. Pentru modelare se
folosete o relaie suplimentar, de tip 1-N pentru fiecare din tabelele iniiale. Presupunnd c avem
dou tabele MATERII i STUDENTI se introduce suplimentar tabela NOTE care face legtura ntre
tabelele MATERII i STUDENTI:
- tabela MATERII are atributele CodMaterie, Denumire, An, NumeProfesor;
- tabela STUDENTI cu atributele: CodStud, CodFac, An, Grupa, Medie, Bursa;
- tabela NOTE cu atributele: CodStud, CodMaterie, Nota, Data.
Relaia unar este acea relaie care folosete o singur tabel care este asociat cu ea nsi.
Exemplul clasic este cel al managerului unei companii, care la rndul su este tot un angajat al
acestei companii.
Pentru fiecare tip de entitate participant n cadrul relaiei se definete un rol care primete un
nume pentru tipul relaiei. n diagramele E-T, tipul relaiei se reprezint sub forma unui romb. De
exemplu, tipul de relaie LUCREAZ cu atributul Data, definit n Figura 3, are dou roluri
Profesor i Departament:
Data
LUCREAZA
PROFESOR DEPARTAMENT
33 Baze de date
Fig. 3
Rolul Profesor identific entitatea PROFESOR implicat n relaia LUCREAZ, iar rolul
Departament identific entitatea DEPARTAMENT n cadrul relaiei.
n Figura 4 este prezentat o relaie ntre trei entiti: PROIECT (cu rolul Client),
PARTENER (cu rolul Produs), FURNIZOR (cu rolul Furnizor), cu tipul de relaie SOLD i
atributele Data i Pret.
Data
PRET
PROIECT PARTENER
SOLD
Produs
Client
FURNIZOR
Fig. 4
C
1..2 c
R
A
a1 a2 a3
D E d1 e1 d2 e2 d13 e3
Fig. 5
3. Sisteme de gestiune a bazelor de date relaionale 34
n general, modelul E-T suport restricia de cardinalitate de forma min..max, unde min este
un numr mai mare sau egal cu zero, max este un numr mai mare dect zero cu condiia
min max . n plus, max poate fi simbolizat i prin caracterul *, care reprezint infinitul. Astfel, o
restricie de forma 3..* asupra rolului R care conecteaz un tip de entitate C, cu un tip de relaie A,
nseamn c fiecare entitate de tip C trebuie s participe n rolul R, cu cel puin trei relaii de tip A
(fr limit superioar). Pentru restriciile de cardinalitate de forma N..N (unde min=max) este
adesea abreviat cu N, iar caracterul * se folosete pentru sintagma mai muli.
C
0..1
*
D B F
0..1
E
Fig. 6
n Figura 6 sunt prezentate tipuri de relaii de grad superior (4). Tipul relaiei este determinat
de restricia de cardinalitate a rolurilor unei relaii. De exemplu, relaia de tip B implic o
coresponden unu-la-unu ntre entitatea C i D. Aceasta nsemn c o entitate de tip C poate fi
asociat cu cel puin o entitate de tip D i vice versa. n acelai timp, relaia B implic o
corespunden unu-la-mai muli pentru entitile E la C i D (ca i pentru F la C i D). Aceasta
nseamn c o entitate de tip E poate fi asociat cu orice numr (inclusiv zero) de eniti de tip C i
D, dar o entitate de tip C (sau D) poate fi asociat cu cel mult o entitate de tip E. Relaia de
coresponden unu-la-mai muli nu este simetric; inversa acestei corespondene (C la E) este
numit mai muli-la-unul. Corespondena ntre E i F este numit mai muli-la-mai muli, adic o
entitate de tipul E poate fi asociat cu orice numr de entiti F i vice versa.
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.
urmtoarele operaii: definirea tabelelor de baz, definirea tabelelor virtuale, manipularea datelor,
definirea restriciilor de integritate, autorizarea accesului, precizarea limitelor tranzaciilor.
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
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.
N1. Toate atributele trebuie specificate o singur dat. Aceasta este forma inti normal.
N2. 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!
N3. 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.
Dintre primele versiuni aprute, practic nici un sistem de gestiune a bazelor de date 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, indeci, 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;
3. Sisteme de gestiune a bazelor de date relaionale 38
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.
39 Baze de date
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. 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.
Clasa de obiecte reprezint un tip abstract de date care definete structura obiectelor din acea
clas (proprietile) i mulimea de metode (operaii) pentru obiectele respective.
O clas este un model sau o schi care definete caracteristicile unui obiect i n care este
descris modul n care trebuie s arate i s se comporte obiectul. Se poate crea o clas nou
utiliznd comanda CREATE CLASS sau modulul de proiectare a clasei (Class Designer). Rezult
un fiier cu extensia .vcx (Visual Class Library) care va conine clasele definite de utilizator.
Subclass este folosit pentru definirea unei noi clase, pentru un obiect care are ca punct de
plecare definirea din alt clas (clas printe). Noua definire va moteni orice modificare din clasa
printe. O subclas poate avea toate funcionalitile unei clase existente i n plus orice control sau
funcionalitate care se dorete a fi inclus. Dac, de exemplu, clasa de baz este telefonul, se poate
4. Componentele funcionale ale sistemului Visual 40
construi o subclas care are toate funcionalitile telefonului original i n plus se pot aduga
caracteristici speciale. Astfel, subclasele permit reutilizarea secvenei de instruciuni surs
(reutilizarea codului). Utilizarea subclaselor este una din cile de reducere a mrimii codului care
trebuie scris. Se ncepe cu definirea unui obiect care este apropiat de cel dorit i se gestioneaz.
Proprietatea este un atribut al unui control, cmp sau obiect dintr-o baz de date, pe care
programatorul l stabilete pentru a defini una din caracteristicile obiectului sau un aspect al
comportrii acestuia. De exemplu, proprietatea Visible dac este fixat pe True, face ca obiectul
respectiv s fie vizibil la momentul rulrii videoformatului. Proprietile obiectului pot fi schimbate
41 Baze de date
Un obiect are anumite proprieti, de exemplu, un telefon are o anumit culoare i mrime.
Cnd instalm un telefon pe birou, el are o anumit poziie. Receptorul poate fi pus sau nu n furca.
Obiectele create au de asemenea proprieti care sunt determinate de clasa din care face parte
obiectul. Aceste proprieti pot fi stabilite n momentul proiectrii sau la momentul execuiei
aplicaiei. De exemplu, anumite proprieti pe care le poate avea un obiect de tip Check Box sunt
enumerate mai jos:
Proprietate Descriere
Caption Textul descriptiv de pe lng Check Box
Enabled Specific dac un obiect Check Box poate fi adresat de utilizator.
ForeColor Culoarea textului stabilit prin Caption.
Left Poziia fa de marginea din stnga a obiectului Check Box.
MousePointer Forma pointer-ului cnd trecem pe deasupra obiectului cu mouse-ul.
Top Poziia fa de marginea de sus a obiectului Check Box.
Visible Specific cnd un obiect Check Box este vizibil.
Fiecare obiect recunoate i rspunde la anumite aciuni numite evenimente. Un eveniment este
o activitate specific i predeterminat iniiat de utilizator sau de sistem. Evenimentele, n
majoritatea cazurilor, sunt generate de interaciunea cu utilizatorul. De exemplu, la telefon, un
eveniment este declanat n momentul n care un utilizator ridic receptorul din furc. Evenimentele
sunt declanate i atunci cnd utilizatotul apas pe butoane pentru a forma un numr de apel.
n Visula FoxPro aciunile utilizatorului care declaneaz evenimente includ: apsarea
butonului stng de la mouse (Click), micarea mouse-ului (MouseMove) i apsarea unei taste
4. Componentele funcionale ale sistemului Visual 42
(Keypress). Sistemul poate iniia evenimente n cazul n care ntlnete o linie de cod care cauzeaz
eroare, cum ar fi mesaje specifice i chiar ntreruperea execuiei aplicaiei.
Metodele sunt proceduri care sunt asociate cu un obiect. Metodele sunt diferite de procedurile
normale din Visual FoxPro: metodele sunt legate intrinsec de evenimente.
Evenimentele pot avea asociate metode. De exemplu, dac se scrie un cod pentru o metod
pentru evenimentul Click, acel cod este executat atunci cnd are loc evenimentul Click. De
asemenea, metodele pot exista independent de orice eveniment. Metodele trebuie s fie apelate
explicit n cod. Setul de evenimente este fix, nu se pot crea evenimente noi!
S considerm cteva evenimente asociate cu un obiect de tip check box:
Eveniment Descriere
Click Utilizatorul face click pe check box.
Utilizatorul selecteaz check box cu mouse-ul sau
GotFocus
apsnd tasta [TAB].
LostFocus Utilizatorul selecteaz un alt obiect.
n tabelul de mai jos sunt date cteva metode asociate cu obiectul de tip check box:
Metod Descriere
Valoarea din check box este actualizat pentru a reflecta orice
Refresh
modificare aprut n datele surs.
Controlul este dat ctre check box ca i cum utilizatorul ar
SetFocus
apsa tasta TAB pentru a selecta check box.
Toate proprietile, evenimentele i metode asociate unui obiect sunt specificate n definirea clasei.
Programarea orientat spre obiecte este un sistem de programare care permite abstractizarea i
organizarea modular de tip ierarhie i are caracteristici polimorfice, de motenire i ncapsulare.
Polimorfismul este abilitatea de a avea metode cu acelai nume, dar cu un coninut diferit pentru
clasele nrudite. Procedura de utilizare este determinat n momentul execuiei de ctre clasa unui
obiect. De exemplu, obiectele nrudite pot avea amndou metode Draw. O procedur transmite un
astfel de obiect ca parametru poate apela metoda Draw fr a mai fi nevoie s tie ce tip de obiect
43 Baze de date
Motenirea este un termen din programarea orientat spre obiecte i reprezint abilitatea unei
subclase de a prelua caracteristicile clasei printe (clasa de baz). Cnd caracteristicile clasei printe
se modific, subclasa derivat motenete noile modificri. De exemplu, dac se adaug o nou
proprietate IsBold la un control de editare, orice subclas care are la baz clasa acestui control va
avea de asemenea proprietatea IsBold. Asadar, motenirea reprezint capacitatea unui obiect de a-i
deriva datele i funcionalitatea din alte obiecte.
Prin intermediul motenirii dac se face o modificare ntr-o clas, modificarea se reflect n
toate subclasele care aparin clasei respective. Aceast actualizare automat facut prin motenire
aduce beneficii n privina timpului i a efortului de proiectare. De exemplu, dac un productor de
telefoane dorete s schimbe modul de formare a numrului prin trecerea de la sistemul bazat pe
disc la sistemul de telefon cu butoane, va economisi mult munc dac va fi capabil s fac
modificrile n schema principal i dac toate telefoanele realizate anterior pe baza acestei scheme
principale vor moteni automat modificrile aduse comparativ cu situaia n care ar trebui s fac
modificrile individual la toate telefoanele existente.
Dac se descoper o greeal n clasa de baz, n loc s fie modificat codul pentru fiecare
subclas se remediaz eroarea n clasa de baz i noua modificare se propag n toate subclasele
aferente.
Abstractizare este procesul de identificare a caracteristicilor distinctive a unei clase sau obiect fr
a fi nevoie de a procesa toate informaiile referitoare la clas sau obiect. Cnd se creaz o clas, de
exemplu, un set de butoane pentru navigare ntr-o tabel, setul se poate utiliza ca o singur entitate
n loc de a ine evidena componentelor individuale (butoane) i modul n care acestea
interacioneaz.
4. Componentele funcionale ale sistemului Visual 44
n Visula FoxPro videoformatele (Form) i controalele (Control) sunt obiecte care sunt
incluse n aplicaii. Aceste obiecte pot fi manipulate prin intermediul proprietilor, evenimentelor
i metodelor.
4.2. Ierarhia claselor n Visual FoxPro
La crearea unei noi clase este de mare ajutor cunoaterea ierarhiei obiectelor din Visual
FoxPro, preluat din [8]:
45 Baze de date
Arhitectura SGBD VFP 6.0 (Figura 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 ct i pentru manipularea datelor.
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).
2 INTERFEE
1 NUCLEU
3 INSTRUMENTE
HELP/DEMO INTERNET
Fig. 1
4. Componentele funcionale ale sistemului Visual 46
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 (Figura 2):
47 Baze de date
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.
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 (Figura 3) se face tastnd secvena [ALT] + [F] (litera subliniat din componena
numelui meniului).
4. Componentele funcionale ale sistemului Visual 48
Fig. 3 Fig. 4
Funciile opiunilor din meniul principal al sistemului sunt:
File apeleaz instrumente pentru ntreinerea fiierelor aferente unei baze de date VFP (Figura
3):
New creaz un obiect nou. Apare o list din care putem selecta: Project (crearea unui proiect),
Database (crearea de baz de date), Table (crearea unei tabele), Query (crearea unei cereri),
Connection (realizeaz oconexiune), View (crearea unei viziune local), Remote View (crearea
unei viziune la distan), Form (crearea unui videoformat), Report (crearea unui raport), Label
(crearea etichetelor), Program (pentru crearea unui program surs), Class (crearea unei clase de
obiecte), Text file (crearea de fiier de tip text - ASCII), Menu (crearea unui meniu utilizator). n
partea dreapt exist dou butoane, pentru crearea unui fiier nou (New) i pentru utilizarea
asistentului (Wizard) (Figura 4).
Open (deschide) apare o fereastr din care se alege 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.
49 Baze de date
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.
4. Componentele funcionale ale sistemului Visual 50
Relaiile ntre tabele se pot stabili n ambele cazuri. Exist trei tipuri de relaii ntre datele unor
tabele: 1 1 , 1 n , m n .
Deschiderea unei tabele individuale, cu secvena File/Open/Table/nume_tabel nu duce
automat la afiarea coninutului acesteia 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 (Figura 7):
Properties pentru modificarea/consultarea structurii tabelei (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. 7 Fig. 8
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 (Figura 8):
Go to Record regsirea unei nregistrri dup diferii parametri: numr nregistrare, deplasare la
nceputul/sfritul tabelei, 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 actualizarea cmpului unei nregistrri (schimbarea valorii cmpului).
51 Baze de date
n cazul n care se construiete o aplicaie n care va fi folosit 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 (Figura 9). 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 (12.2.2.).
Fig. 9
4. Componentele funcionale ale sistemului Visual 52
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.
53 Baze de date
Manipularea presupune urmtoarele operaii care pot fi executate fie n modul asistat, fie n
modul comand, fie n modul procedural:
Crearea bazei de date/tabelei
Deschiderea bazei de date/tabelei. Deschiderea unei tabele presupune rezervarea n memoria
intern a calculatorului a unei zone, numit zon de lucru, n care VFP va memora toate informaiile
necesare utilizrii acestei tabele (structur, numr de nregistrri etc).
ntr-o zon de lucru, la un moment dat, este deschis o singur tabel, iar simultan pot fi
deschise 32767 tabele. Identificarea zonelor de lucru de face printr-un numr natural cuprins ntre 1
i 32767, iar primele 10 zone i prin litere, A-J. La lansarea sistemului VFP, automat este selectat
zona de lucru A (sau 1).
Cu comanda
SELECT litera|cifra
se poate selecta o alt zon de lucru.
Efectuarea operaiilor de consultare, actualizare (adgare, modificare, tergere) asupra bazei de
date/tabelei
nchiderea bazei de date/tabelei
Sistemul VFP permite crearea unei baze de date i introducerea tabelelor care vor face parte
din baza de date:
definirea structurii acestora;
crearea fiierului (fiierelor) n care se pot stoca datele;
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>]?
5. Organizarea datelor nVisual FoxPro 54
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.
Not: 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. Cu [Ctrl]+[Esc] se iese din fereastra memo
fr salvarea datelor introduse n fiierul memo.
n exemplul care urmeaz se creaz o baz nou de date GESTIUNE.DBC (dbc - data base
container), Figura 10, care va conine tabelele: FURNIZOR.DBF i MATERIALE.DBF cu
urmtoarele cmpuri:
FURNIZOR.DBF MATERIALE.DBF
Cod_furn N(5) Cod_mat N(5)
Denumire C(20) Denumire C(20)
Adresa Memo Data_exp D
Cod_mat N(5) UM C(5)
Cant N(7) PU N(5)
Data_livr D
Fig. 10 Fig. 11
Fig. 12
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]
..............
)
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).
Tipul cmpului se declar cu una din urmtoarele litere:
Y moneda
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)
unde:
- nume_tabel numele tabelei nou create;
- FIELDS <list_cmpuri> specific cmpurile care urmeaz s apar n noua tabel. Dac nu se
specific nimic, implicit sunt luate toate cmpurile din tabel 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:
Exemplu. Folosind tabela creat 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:
unde:
nume_bd numele bazei de date care trebuie deschis;
EXCLUSIVE ali utilizatori nu pot s acceseze aceast baz 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).
unde:
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
5. Organizarea datelor nVisual FoxPro 62
fiierul. Lista de fiiere index conine orice fel de nume de fiier de index, simplu (.IDX) sau
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 (8.2.).
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.
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
tabelei, 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).
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
63 Baze de date
n primul caz, dup lansarea comenzii MODIFY STRUCTURE, se va afia fereastra de dialog
Open. Cu ajutorul sgeilor direcionale se poziioneaz cursorul pe tabela dorit a fi modificat. 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 tabelei deschise. 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 face
modificri.
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:
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 tabelei, 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:
5. Organizarea datelor nVisual FoxPro 64
Go to Record regsirea unei nregistrri dup diferii parametri: numr articol, deplasare la
nceputul/sfritul tabelei, 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.
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
o 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 [Sageata sus], [Sageata jos]. nchiderea ferestrei Browse se face apsnd
simultan tastele [Ctrl] + [End].
Odat cu deschiderea tabelei, acesteia 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, Next, Previous, Record n (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.
65 Baze de date
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
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.
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.
67 Baze de date
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: se alege opiunea New din meniul sistem File sau selectnd submeniului Wizards din meniul
sistem Tools.
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 noua 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:
n urmtorii pai
pasul 1 selectarea cmpurilor: din fereastra Sample tables se pot alege una 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
pasul 5 setarea relaiilor: dac tabela aparine unei baze de date, se pot stabili relaiile ntre
cmpuri, ntre tabela 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): noua 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-o singur tabel. Lansarea
asistentului se face utiliznd meniul sistem Tools, submeniul Wizard, opiunea Form, n urmtorii
pai:
pasul 1 selectarea cmpurilor: se face pe baza opiunilor utilizatorului exprimate n trei
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 Bbuttons. 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
pentru a fi 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.
69 Baze de date
Creaz rapoarte utiliznd o singur tabel liber sau o viziune ntr-o baz de date. Asistentul
pune ntrebri ntr-o succesiune de pai, prin care se specific sursa i cmpurile ce vor fi utilizate
pentru a crea controalele raportului. Pentru lansarea asistentului, se alege din meniul sistem Tools,
submeniul Wizard, opiunea Report. Din caseta de dialog Wizard Selection se alege Report
Wizard i se urmeaz paii:
pasul 1 selectarea cmpurilor: se introduc opiunile n cele trei ferestre de dialog: Databases
and Tables, Available Fields, Selected Fields. Selecia poate fi fcut dintr-o 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 Rezultat
calcul
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.
6. Utilizarea asistentului Wizard n VFP 70
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 se dorete s se sorteze 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.
Acesta este asistentul pentru generarea etichetelor cu date preluate dintr-o tabel. Pentru
lansarea asistentului se alege din meniul sistem Tools, submeniul Wizard, opiunea Label i se
urmresc paii:
pasul 1 selectarea tabelelor: se selecteaz o 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 trebuie s apar pe
etichet. Se pot folosi semne 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 dorete s sorteze 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.
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 i se
urmresc paii:
pasul 1 selectarea cmpurilor: se pot selecta cmpuri din diferite tabele sau viziuni. Mai nti
se selecteaz cmpurile dintr-o 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
coincid sunt incluse. Dac se dorete crearea unei jonciuni interne se selecteaz opiunea Only
matching row (numai nregistrrile care coincid). Dac se dorete crearea unei jonciuni externe, se
selecteaz 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 vor fi afiate. 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. Utilizarea asistentului Wizard n VFP 72
Acesta este 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 fie
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 i
se continu cu paii:
pasul 1 selectarea cmpurilor: se pot selecta cmpuri doar dintr-o singur tabel sau viziune.
pasul 2 alegerea procesorului de text: trebuie s fie instalat o versiune curent de Microsoft
Word n cazul n care se alege opiunea Microsoft Word. Dac se selecteaz opiunea Comma-
delimited text file, asistentul va sri peste paii 3 i 4 i va merge direct n ecranul de terminare.
pasul 3 selectarea tipului de document: se creaz un nou document sau se adaug date la un
document existent.
pasul 4 selectarea stiluilui documentului: se selecteaz unul din tipurile de fiiere pe care le
recunoate editorul Word. Dac se creaz un document nou, se va specifica tipul documentului
Form Letter, Label, Envelope, Catalog.
pasul 5 terminare (butonul Finish): dac s-a selectat crearea unui document nou n Word,
asistentul va deschide documentul n Microsoft Word. Dac s-a selectat opiunea de creare a unui
fiier de tip text, asistentul l va salva.
pe bara de instrumente pentru interclasare din opiunea pop-up Insert Merge Field se alege numele
cmpului ce trebuie inserat;
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.
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.
Asupra unei linii sau unui bloc de linii de text se pot executa urmtoarele operaii:
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.
7.1. Simboluri
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 da lmuriri asupra a ceea ce face programul surs, explicaii asura
aciunilor programului, numelor variabilelor etc, pentru a indicanceputul 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.
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. | .Y. (adevrat) i .F. | .N.(fals);
numeric, numere ntregi sau fracionare;
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 apostrof sau ghilimele;
calendaristic, de exemplu 01/12/2007.
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).
+, - adunare, scdere ? 4 + 15
Operaia modulo (%) se mai poate executa apelnd funcia MOD(n1,n2) care va calcula restul
mpririi numrului n1 la numrul n2.
log10 x 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)
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
*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).
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)
79 Baze de date
Exemplul 1. 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.
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 $.
7. Elemente ale limbajului propriu Visual FoxPro 6.0 80
B. Funcia PV returneaz valoarea sumei care trebuie s existe 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)
Exemplul 2. 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.
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 ?
Dac irul de caractere conine n componena sa caracterul () atunci pentru definirea irului
se folosesc caracterele ().
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 n2, din irul s, SUBSTR(s,n1,n2)
ncepnd cu poziia n1
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 ALLTRIM(s)
de la nceputul irului s LTRIM(s)
de la sfritul irului 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 PADC(s,n[, c_pad])
la stnga PADL(s,n[,c_pad])
la dreapta 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 AT(s,ss,n)
caractere ss ntr-un ir de caractere s
Returneaz poziia de nceput, la a n-a apariie, a unui subir de ATC(s,ss,n)
caractere ss ntr-un ir de caractere s, fr a se ine seama de litere
mari/mici
Returneaz poziia numeric, la a n-a apariie, a unui subir de RAT(s,ss,n)
caractere ss ntr-un ir de caractere s, ncepnd cutarea de la dreapta
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, PROPER(s)
n majuscul
83 Baze de date
Folosirea ntr-un program a unei constante de tip dat calendaristic, se face ntre acolade
({^31/01/01}).
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-o tabel, nu are o lungime cunoscut (sau
care nu poate fi aproximat). Utilizarea unui cmp memo ntr-o 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 tabela suplimentar. Lungimea unui cmp memo este 10 octei.
7.5.1. Variabile
7.5.2. Macrosubstituia
FOR I=1 TO 2
FIS='ESTUD'+ALLTRIM(STR(I))+'.DBF'
USE &FIS
BROWSE
ENDFOR
CLOSE DATABASES
Masivele de date (vectori i matrice) 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);
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:
87 Baze de date
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.
Funcia AINS(nume_masiv,n[,2])
Are ca efect:
inserarea unui element nou ntr-un vector, inaintea elementului de pe poziia n,dac
argumentul 2 lipsete;
inserarea unei linii ntr-o matrice, naintea liniei cu numrul n, dac argumentul 2 lipsete;
inserarea unei coloane ntr-o matrice, naintea coloanei cu numrul n, dac 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.
7. Elemente ale limbajului propriu Visual FoxPro 6.0 88
Funcia ADEL(nume_masiv,n,[2])
Are ca efect operaia invers comenzii AINS, deci 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.
Funcia 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.
Funcia 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.
DIMENSION LIT(3,2)
LIT(1) = 'G'
LIT(2) = 'A'
LIT(3) = 'C'
LIT(4) = 'Z'
LIT(5) = 'B'
89 Baze de date
LIT(6) = 'N'
Apoi masivul este sortat ncepnd cu elementul 4 (2,2) din masiv cu comanda ASORT(LIT,4)
Elementele din coloana a 2-a sunt plasate n ordine ascendent prin rearanjarea liniilor masivului,
ncepnd cu elementul 4 din masiv.
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.
Exemplul 2.
LIT(1) = 'G'
LIT(2) = 'A'
LIT(3) = 'C'
LIT(4) = 'Z'
LIT(5) = 'B'
LIT(6) = 'N'
@1,1 SAY "MATRICEA INITIALA"
K=1
FOR I=1 TO 3
@I+K,1 SAY LIT(I,1)
@I+K,2 SAY ""
@I+K,3 SAY LIT(I,2)
ENDFOR
@6,1 SAY "MATRICEA SORTATA INCEPAND CU PRIMUL ELEMENT"
K=6
ASORT(LIT,1)
FOR I=1 TO 3
@I+K,1 SAY LIT(I,1)
@I+K,2 SAY ""
@I+K,3 SAY LIT(I,2)
ENDFOR
@11,1 SAY "MATRICEA SORTATA INCEPAND CU ELEMENTUL 4"
K=11
ASORT(LIT,4)
FOR I=1 TO 3
@I+K,1 SAY LIT(I,1)
@I+K,2 SAY ""
@I+K,3 SAY LIT(I,2)
ENDFOR
@16,1 SAY "INSERAREA UNEI LINII INAINTE DE LINIA 3"
AINS(LIT,3)
LIT(3,1)="2"
LIT(3,2)="5"
K=16
91 Baze de date
FOR I=1 TO 3
@I+K,1 SAY LIT(I,1)
@I+K,2 SAY ""
@I+K,3 SAY LIT(I,2)
ENDFOR
@21,1 SAY "STERGEREA LINIEI 3"
K=21
ADEL(LIT,3)
FOR I=1 TO 3
@I+K,1 SAY LIT(I,1)
@I+K,2 SAY ""
@I+K,3 SAY LIT(I,2)
ENDFOR
Fig. 1
8. Accesul i actualizarea datelor 92
Lucrul cu baze de date i tabele n cadrul limbajului propriu VFP, presupune trei activiti, care
segmenteaz construcia unei aplicaii:
deschiderea/crearea bazei de date, a tabelelor, a fiierelor 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 baze de date (OPEN
DATABASES..., CREATE DATABASES, CLOSE DATABASES), a unei tabele de date
(USE..., CREATE TABLE..., CLOSE TABLES, USE), a unor 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.
MODIFY STRUCTURE
Dac nu este deschis nici o tabel n zona de lucru curent, se deschide caseta de dialog Open
care permite utilizatorului selectarea (deschiderea) unei tabele. 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).
Are ca efect afiarea structurii tabelei dintr-o zon de lucru, alta dect cea curent, sau a unei
tabele adresat prin alias. Semnificaia clauzelor este urmtoarea:
TO PRINTER [PROMPT] direcioneaz informaiile la imprimant.
93 Baze de date
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.
NOCONSOLE suprim afiarea datelor n ferestra principal a VFP.
Se mai poate folosi i comanda LIST STRUCTURE care are aceleai clauze.
Numai cmpurile din lista de cmpuri vor fi incluse n nregistrarea din noul fiier. Dac clauza
FIELDS este omis, vor fi incluse toate cmpurile tabelei surs.
Datele dintr-o tabel se pot ordona dup un singur criteriu sau dup mai multe (ordonare
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 dou 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 tabela surs.
SORT TO <nume_tabela>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>]
8. Accesul i actualizarea datelor 94
unde:
nume_tabela numele fiierului sortat.
nume_cmp_1 specific cmpul din tabela nesortat asupra creia 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 precizeaz care nregistrri particip la sortare, respectiv acelea pentru
care expresie_1 are valoarea True
WHILE expresie_2 precizeaz condiia pentru care atta vreme ct au valoarea True,
nregistrrile vor fi sortate.
FIELDS lista_cmpurilor precizeaz cmpurile din tabela original care vor fi incluse n
noul fiier sortat. Dac se omite clauza, toate cmpurile din tabela original vor fi incluse n
tabela 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
95 Baze de date
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.
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 tabela 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:
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).
Comanda
matricola N(5)
nume C(40)
data_n D
adresa C(40)
Secvena de comenzi
CLEAR
USE STUD
BROWSE
INDEX ON MATRICOLA TO IMATR.IDX
* Obinerea numelui fiierului IDX deschis pentru baza de date curent sau cea specificat
?? NDX(1)
* Afieaz primul fiier index activ
BROWSE
* nregistrrile din fiierul de date apar sortate dup cmpul matricola.
CLOSE DATABASES
CLEAR
matricola nr_nreg
110 2
200 4
210 5
215 1
250 6
300 3
Exemplul 2. S se indexseze tabela 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 tabela ESTUD1 dup cmpul NUME, s se creeze un fiier nestructural
INUM.CDX, ordonat ascendent dup valorile cheii:
8. Accesul i actualizarea datelor 98
USE ESTUD1
INDEX ON UPPER(NUME) TAG NUME OF INUM.CDX ASCENDING
BROWSE
CLOSE DATABASES
Exemplul 4. Utiliznd tabela ESTUD1 s se indexeze tabela dup o cheie compus (NUME,
MBAC), fr a permite existena dublurilor, ntr-un fiier de index INM.IDX. Structura tabelei 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 tabela 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
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>]
99 Baze de date
Funcia RECNO()
Returneaz numrul curent al nregistrrii pe care este poziionat pointer-ul n fiierul curent sau
specificat. Apelul funciei
RECNO(<nr_zon_de_lucru> | <alias_tabel>)
unde: nr_zon_de_lucru reprezint zona de lucru n care este activ tabela. Dac s-a lansat o
comand SEEK pentru a cuta o nregistrare i aceasta nu a fost gsit, se poate utiliza comanda GO
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 tabela curent sau specificat. Apelul funciei
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.).
Apelul funciei
EOF ([<nr_zon_de_lucru> | <alias_tabel>])
Funcia BOF()
Este o funcia logic i 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.).
Apelul funciei
BOF ([<nr_zon_de_lucru> | <alias_tabel>])
Comanda SKIP
8. Accesul i actualizarea datelor 100
unde: 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.
unde: expr_L condiia de accesare a nregistrrilor. Numai nregistrrile care satisfac expresia
logic expr_L sunt disponibile i toate comenzile care vor accesa tabela, vor respecta condiia
declarat n comanda SET FILTER TO. Dac este omis expresia logic, toate nregistrrile sunt
accesibile.
Comanda LOCATE
Realizeaz cutarea secvenial ntr-o tabel, a primei nregistrri care ndeplinete condiiile
specificate n expresia logic de cutare, expr_L .
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. Clauza implicit este ALL (toate nregistrrile).
WHILE expr_L_2 specific condiia pentru cutarea nregistrrilor, atta vreme ct
expr_L_2 este adevrat.
Comanda CONTINUE
101 Baze de date
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 exist o tabel CLIENTI i trebuie s se afle 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-o tabel o nregistrare la prima apariie, a crei cheie de index se potrivete cu
expresia general i mut pointer-ul pe nregistrarea gsit.
Exemplu. S se indexeze fiierul ESTUD2 dup cmpul NUME i s se caute nregistrrile care
ncep cu literele BAR. Structura tabelei ESTUD2 este: 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 '
ENDIF
CLOSE DATABASES
Funcia FOUND()
Returneaz valoarea logic adevrat (.T.), dac comenzile CONTINUE, LOCATE sau SEEK
s-au executat cu succes.
FOUND(<zon_de_lucru> | <alias_tabel>)
Dac argumentele zon_de_lucru, alias_tabel sunt omise, funcia va returna rezultatul pentru
fiierul deschis n zona de lucru curent.
[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.
Adugarea se poate face utiliznd comenzile de tip APPEND, prin preluarea datelor din alte
tabele, masive de date i variabile de memorie.
Comanda are ca efect adugarea unei nregistrri vide la sfritul unei tabele.
Comanda are ca efect adugarea unei nregistrri preluat din alt tabel, sau dintr-un fiier de
tip text, n tabela curent, unde:
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 tabelei selectate
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 o tabel VFP;
8. Accesul i actualizarea datelor 104
DELIMITED fiierul surs din care se adaug datele n tabela 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 apostrof;
DELIMITED WITH <delimitator> - cmpurile de tip carcater, sunt separate cu un caracter
diferit de apostrof;
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.
Comanda are ca efect adugarea unei nregistrri n tabela 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.
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:
105 Baze de date
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-o 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 unei tabele
ntr-un masiv:
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 tabelei 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 tabela ESTUD1.
USE ESTUD1
* se deschide tabela ESTUD1
SCATTER TO MASIV1 BLANK
* se creaz vectorul MASIV1, cu elemente vide i de acelai tip i mrime
* cu cmpurile din tabela ESTUD1
FOR I=1 TO ALEN(MASIV1)
@I,1 SAY FIELD(I) GET MASIV1(I)
8. Accesul i actualizarea datelor 106
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.
Comanda BROWSE este una dintre cele mai utilizate comenzi pentru afiarea i editarea
nregistrrilor dintr-o 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 108
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 (de exemplu 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;
109 Baze de date
USE ESTUD2
REPLACE ADRESA WITH "Cluj" FOR RECNO()=3
BROWSE
CLOSE DATABASE
8. Accesul i actualizarea datelor 110
Comanda SET SAFETY ON | OFF determin afiarea de ctre sistemul VFP a unei casete de
dialog nainte de a suprascrie un fiier.
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.
Comanda DELETE realizeaz tergerea la nivel logic. nregistrrile continu s existe n fiier
dar sunt marcate ca fiind terse.
Funcia DELETED() returneaz o valoare logic care indic dac nregistrarea curent a fost
marcat pentru tergere.
DELETED ([nr_zon_de_lucru | alias_tabel])
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 tabela curent.
Comanda ZAP terge fizic toate nregistrrile din tabel, rmnnd doar structura tabelei. Este
echivalent cu comanda DELETE ALL, urmat de comanda PACK, dar este mult mai rapid.
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.
Comanda COPY TO creaz un nou fiier cu acelai coninut ca i cel al tabelei curente.
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.
Comanda SET ALTERNATE direcioneaz la ecran sau la imprimant, ieirea rezultat din
folosirea comenzilor DISPLAY sau LIST.
unde:
expresie1 specific expresia relaional care stabilete legtura ntre tabela-printe i
tabela-fiu. Expresia relaional este de obicei cmpul indexat din tabela-fiu. Indexul pentru
tabela-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
tabelei-fiu;
IN nr_zon_de_lucru | alias_tabel specific zona de lucru sau alias-ul tabelei-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.
Exemplul 1.
Tabelele legate printr-o relaie au n general un cmp comun. De exemplu presupunem c avem
o tabel STUDENT, care conine informaii despre studeni i are cmpuri pentru nume, adres, i
un cod unic al studentului (matr). O a doua tabel, NOTE, conine informaii despre notele
studentului (matr, cod_disc, nota), care va avea de asemenea un cmp pentru codul unic al
studentului (matr). Se pot uni astfel informaiile despre studeni cu cele despre note. Comanda SET
RELATION leag cele dou tabele prin cmpul comun matr. Pentru a stabili relaia, tabela-fiu
(NOTE) trebuie s fie indexat dup cmpul comun. Dup stabilirea relaiei, de cte ori mutm
pointer-ul pe o nregistrare n fiierul STUDENT, pointer-ul din fiierul NOTE (fiu) se va muta pe
nregistrarea care are acelai cod matr corespunztor n fiierul STUDENT.
Integr L
USE STUDENT
REPORT FORM MEDIIG PREVIEW
CLOSE DATABASES
Fig. 1
Exemplul 2.
Presupunem c avem o tabel CLIENI, care conine informaii despre clieni, cmpuri pentru
nume, adres, i un cod unic al clientului (cod_client). O a doua tabel, FACTURI, conine
8. Accesul i actualizarea datelor 118
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, tabela-fiu
(FACTURI) trebuie s fie indexat dup cmpul comun. Dup stabilirea relaiei, de cte ori se mut
pointer-ul n fiierul CLIENI pe o nregistrare, pointer-ul din fiierul FACTURI (fiu) se va muta
pe nregistrarea care are acelai cod_client n fiierul CLIENI.
SELECT 2
USE CLIENTI
SELECT 3
USE FACTURI
INDEX ON COD_CLIENT TAG COD_CLIENT ADDITIVE
&& se indexeaz cmpul cod_client
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 stabileste relatia intre clieni, facturi
Unde:
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.
9. Programarea procedural 120
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.
Maniera de programare care folosete numai cele trei structuri de baz: structura liniar,
structura alternativ i structura repetitiv, este cunoscut sub numele de programare structurat. Se
poate demonstra ca orice program poate fi realizat utiliznd numai cele trei structuri de baz
Limbajul VFP 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 programrii 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.
Aceste subprobleme sunt apoi programate utiliznd tehnica programrii structurate.
Limbajul VFP ofer facilitatea de creare a unui proiect (12.2. Figura 1), 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 (Applications);
Other alte componente: meniuri (Menus), fiiere de tip text (Text Files);
Other Files alte fiiere utilizate: icon-uri, fiiere .BMP etc.
121 Baze de date
Toate aceste componente sunt nglobate n proiect, care constituie baza pentru crearea aplicaiei
n format executabil.
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.
exp_c2 Semnificaie
A Caractere alfabetice
N Litere i cifre
X Orice caractere
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
Exemplu.
@1,1 SAY "1.JPG" BITMAP CENTER ISOMETRIC
WAIT WINDOW
CLEAR
Comanda
@<linie>,<coloana> GET <var> [PICTURE <expr_c>]
permite editarea variabilei de memorie var (pentru a introduce o nou valoare), unde:
PICTURE <expr_c> - reprezint 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.
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.
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
GET EXPR 'INTRODUCETI CONDITIA DE LOCALIZARE' TO
GTEMP;
125 Baze de date
IF FOUND( )
&& dac este gsit
DISPLAY FIELDS PRODUS,CANT,PU&& afieaz cmpurile PRODUS, CANT, 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.
Comanda DO CASEENDCASE
Execut primul set de comenzi ale cror expresie condiional este adevrat. Comanda este
echivalentul unor instruciuni IF n cascad.
DO CASE
CASE <expr_L_1>
<comenzi1>
CASE <expr_L_2>
<comenzi2>
9. Programarea procedural 126
....
CASE <expr_L_n>
<comenzi_n>
[OTHERWISE
<comenzi>]
ENDCASE
Aciunea comenzii:
CASE <expr_L_1> <comenzi1>... - 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.
Exemplu
@1,1 SAY DATI N= GET N
READ
DO CASE
CASE N = 0
? 'ZERO'
CASE N > 0
? 'POZITIV'
OTHERWISE
? 'NEGATIV'
ENDCASE
WAIT WINDOW Apasati Enter
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
9. Programarea procedural 128
Comanda DO WHILE ... ENDDO execut un bloc de comenzi n interiorul unui ciclu
condiionat anterior.
DO WHILE <expr_L> <comenzi> [LOOP] [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 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
129 Baze de date
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
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.
9. Programarea procedural 130
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
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.
9.2.2. Funcii
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 unui parametru
prin referin se face punnd n faa parametrului 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***
133 Baze de date
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))
9. Programarea procedural 134
FUNCTION PLUSUNU(GNZ)
GNZ = GNZ + 1
RETURN GNZ
135 Baze de date
Sistemul VFP suport comenzile SQL care opereaz 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:
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 precizeaz 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 136
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.
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 tabelei a crei 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
NUL;
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 tabela printe ctre care se
stabilete o relaie persistent. TAG nume_etichet specific eticheta de index din tabela
printe pe baza creia se stabilete relaia.
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 tabela n care vor fi actualizate nregistrrile, cu noile
valori;
10. Comenzi ale nucleului SQL 140
Exemplu. n fiierul CLIENI din baza de date TEST, s se modifice cmpul cantitate maxim
(CANT_MAX) la valoarea 25.
4. Comanda INSERT SQL adaug o nou nregistrare la sfritul unei tabele existente. 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:
tabel specific numele tabelei 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;
(valoare_1, valoare_2,...]) specific valorile cmpurilor care vor fi inserate n noua
nregistrare;
nume_masiv specific numele masivului din care vor fi inserate datele n noua nregistrare;
141 Baze de date
Exemplu. n tabela CLIENI din baza de date TEST coninutul nregistrrii curente va fi transmis
n memorie ca variabile i structura tabelei va fi copiat ntr-un noua tabel CLIENI2.
CLOSE DATABASES
CLEAR
OPEN DATABASES (TEST)
USE CLIENTI
* Se transmite nregistrarea curent n memorie ca variabile
SCATTER MEMVAR
* Se copiaz structura tabelei curente n tabela 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 o tabel temporar. Fiecare cmp din tabela
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 tabelei temporare creat, care poate fi i numele unei
expresii;
nume_cmp_1 specific numele unui cmp din fiierul temporar;
10. Comenzi ale nucleului SQL 142
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 tabela temporar.
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
143 Baze de date
6. Comanda CREATE TABLE SQL determin crearea unei tabele. 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 tabelei 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 noua 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). O tabel poate conine pn la 255
10. Comenzi ale nucleului SQL 144
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 tabelei printe, la
stabilirea unei relaii persistente. Dac se omite clauza TAG etich_1_index, relaia se
stabilete utiliznd cheia primar de index a tabelei printe. Dac tabela 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 tabela printe;
NOCPTRANS previne trecerea la o alt pagin de cod pentru caractere i cmpuri memo.
Dac tabela 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 tabelei. 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 o 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;
145 Baze de date
FOREIGN KEY expr_4 TAG etich_4_index [NODUP] creaz un index extern (non-
primar) i stabilete o relaie cu tabela 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 tabela printe ctre care se
stabilete o relaie persistent. Includerea clauzei TAG etich_5_index determin stabilirea
relaiei pe baza unei etichete de index a tabelei printe. Dac este omis clauza, relaia se
stabilete utiliznd implicit cheia primar de indexare din tabela 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 tabelei. Coninutul masivului poate fi
definit cu funcia AFIELDS().
7. Comnda DELETE SQL realizeaz tergerea la nivel logic (marcarea pentru tergere) a
nregistrrilor dintr-o 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 tabelei 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 146
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 principal, submeniurile i
opiunile din meniu.
147 Baze de date
12. Aplicaii
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 normanal;
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
12. Aplicaii 148
Codul judeului;
Codurile disciplinelor;
An studii 1-6, an calendaristic 2006-2007.
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.
149 Baze de date
VIDEOFORMAT INTRODUCERE DE LA
STUDENT TASTATUR
STUDENT
VIDEOFORMAT NOTE
PROGR. MONITOR NOTE
DISCIPLINE
VIDEOFORMAT
DISCIPLINE
CODIFICARI
O - OBLIGATORIU
TIP_CURSF - FACULTATIV
P - OPTIONAL
O - OBLIGATORIU
TIP_PROMO
N - Nu este obligatoriu pentru promovare
BARA DE MENIURI
SUBMENIU
NIVELUL 2
SUBMENIURI
NIVELUL 1
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
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
151 Baze de date
BROWSE
USE TEMP
CREATE STUD2 FROM TEMP
USE STUD2
APPEND FROM STUD1
BROWSE
CLOSE DATABASES
CREATE TABLE STUD (MATR C(3), NUME C(30), AN C(1), GRUPA C(2))
CLOSE DATABASES
b) Procedurile de actualizare
Pentru fiierul Studenti
USE STUD
BROWSE
CLOSE DATABASES
USE NOTE
BROWSE
CLOSE DATABASES
USE NOTE
FOR I=1 TO RECCOUNT()
GOTO I
REPLACE MEDIA WITH (NOTA1+NOTA2)/2
ENDFOR
153 Baze de date
BROWSE
CLOSE DATABASES
d) Procedura de ieire
CLEAR EVENTS
CLOSE DATABASES
SET SYSMENU TO DEFAULT
S se realizeze o aplicaie n Visual Fox Pro 6 prin care s se gestioneze intrrile de materiale,
furnizorii i materialele ntr-o magazie a unei secii de producie.
Aplicaia va cuprinde un modul pentru definirea bazei de date, un modul pentru actualizare
(adugare, modificare, tergere) i un modul de exploatare a bazei de date prin rapoarte.
Sunt prevzute trei tabele independente care au urmtoarea structur:
Existena cmpurilor comune din fiierul intrari.dbf cu cele ale celorlalte fiiere ofer
posibilitatea ca n etapa de proiectare a rapoartelor s se poat stabili relaii ntre tabele pentru a
extrage date corelate din toate sursele.
Se vor realiza dou rapoarte:
154
- pentru obinerea unei liste de intrri de materiale sortat ascendent dup data calendaristic
cu cteva comenzi SQL de manipulare a tabelelor;
- pentru obinerea unei liste cu furnizori i materiale folosind facilitatea de grupare a
modulului de rapoarte. Se vor utiliza date extrase din toate cele trei fiiere (stabilind relaii
ntre acestea), calculndu-se valoarea pltit fiecrui furnizor.
Aplicaia conine proceduri pentru ntreinerea i exploatarea bazei de date fiind construit cu o
interfa accesibil i logic. Structura proiectului este prezentat n Figura 1.
Se va utiliza programare vizual, orientat spre obiecte i procedural n realizarea aplicaiei
care rezolv problema formulat mai sus.
n programul principal init_var sunt declarate i iniializate variabilele globale, se deschid sau
se creaz fiierele utilizate i se lanseaz meniul aplicaiei.
Fig. 1
PUBLIC CODF, DEN, ADR, TL, CODM, DENM, PUN, DATAIN, CANTIT
155 Baze de date
IF EMPTY(SYS(2000,'FURNIZORI.DBF'))
CREATE TABLE FURNIZORI (COD_FURN N(4), DENUMIRE C(40), ADRESA M, TEL
C(10))
ELSE
USE FURNIZORI
ENDIF
INDEX ON COD_FURN TAG COD_FURN ADDITIVE
CLOSE DATABASE
156
SELECT 2
USE MATERIALE
SELECT 3
USE FURNIZORI
SELECT 4
USE INTRARI
DO MENU1.MPR
READ EVENTS
Fig. 2
Crearea submeniului Vizualizare BD
* Vizualizarea tabelei Materiale
SELECT 2
BROWSE FIELDS COD_MAT, DENUMIRE, PU, DATA_IN NOEDIT
Fig. 3
Opiunea Adaugare
DO FORM ADAUG
Opiunea Modificare/Stergere
DO FORM MODIFICARE
Fig. 4
SELECT 4
SET ORDER TO TAG COD_MAT OF MATERIALE.CDX IN MATERIALE
SET RELATION TO COD_MAT INTO MATERIALE ADDITIVE
158
care stabilete o relaie ntre nregistrrile fiierului materiale.dbf i intrari.dbf prin intermediul
cmpului comun cod_mat i pe de alt parte o relaie ntre nregistrrile fiierului furnizori.dbf i
intrari.dbf prin intermediul cmpului comun cod_furn.
Pentru stabilirea relaiilor ntre fiiere trebuie ca n prealabil fiierele copil s fie indexate dup
cmpul de legtur (cod_mat n fiierul materiale, cod_furn n fiierul furnizori), etap realizat n
programul principal init_var.
Dup vizualizarea raportului furniz_mater cele dou relaii sunt anulate.
Opiunea Iesire
CLEAR EVENTS
CLOSE DATABASE
SET SYSMENU TO DEFAULT
* Videoformat Adaug
Aceast videoformat are numele intern Form1, numele extern Adaug.scx, iar pentru proprietatea
Caption se alege textul Adaugare, Figurile 5a i 5b.
Butonul Iesire este primul strat i se aplica deasupra obiectului PageFrame1 (de tip container)
avnd proprietatea PageCount =3 (pagini). Pe butonul Iesire la evenimentul Click se asociaza
comanda THISFORM.RELEASE.
Se face click cu butonul din dreapta al mouse-ului i se alege opiunea Edit pentru a accesarea
elementelor containerului, respectiv cele trei pagini: Furnizori, Materiale, Intrari. Numele extern i
grosimea de caracter a paginilor se stabilete utiliznd proprietile Caption i FontBold= True.
Adresarea paginilor se realizeaz fcnd click cu butonul stng al mouse-ului pe fiecare pagin.
Numele intern poate fi schimbat, dar vor fi pstrate cele implicite (Page1, Page2, Page3), respectiv
adresarea paginii Furnizori n procedurile ataate va fi una ierarhic, prin calificare:
159 Baze de date
THISFORM.PAGEFRAME1.PAGE1.proprietate
Tabela Furnizori
Fig. 5a Fig.5b
Urmeaz stabilirea obiectelor pentru pagina Page1 (cu proprietatea caption=Furnizori). Sunt
patru regiuni de tip text, notate de la Text1 la Text4, un buton de comand (Command1) i patru
etichete, de la Label1 la Label4. Ordinea lor se stabilete din meniul View, submeniul TabOrder.
Dac se dorete trecerea de la vizualizarea interactiv a ordinii obiectelor la vizualizarea de tip list,
se selecteaz meniul Tools, submeniul Options, submeniul Forms, opiunea Tab Ordering i se
alege By list.
ADR=' '
TL=''
* ACTUALIZAREA REGIUNILOR DE EDITARE CU NOILE VALORI
THISFORM.PAGEFRAME1.PAGE1.REFRESH
Secvena de cod realizeaz dou validri, una pentru codul de furnizor i una pentru denumirea
firmei, verificnd dac mai exist o nregistrare similar. Verificarea se face pentru a pstra
caracterul de unicitate al codului i denumirii. n caz ca se gsete un duplicat se afieaz un mesaj
specific. Dac codul i denumirea sunt valide din punct de vedere al unicitii, se trece la scrierea n
fiierul de furnizor.dbf a noilor informaii. Se reiniializeaz variabilele, se actualizeaz cmpurile
afiate i se trimite focusul (prompter-ul) pe obiectul Text1.
Tabela Materiale
Fig. 6
SELECT 2
CODM=0
DENM=' '
THISFORM.PAGEFRAME1.PAGE2.REFRESH
THISFORM.PAGEFRAME1.PAGE2.TEXT1.SETFOCUS
162
PUBLIC UMAS(6)
UMAS(1)='BUC'
UMAS(2)='KG'
UMAS(3)='TO'
UMAS(4)='MC'
UMAS(5)='MP'
UMAS(6)='ML'
pentru obiectul Page2 se selecteaz procedura Activate la care se ataeaz urmtorul cod
SELECT 2
CODM=0
DENM=' '
THISFORM.PAGEFRAME1.PAGE2.REFRESH
THISFORM.PAGEFRAME1.PAGE2.TEXT1.SETFOCUS
WITH THISFORM.PAGEFRAME1.PAGE2
TEXT3.VALUE=.LIST1.VALUE
TEXT3.REFRESH
COMMAND1.SETFOCUS
163 Baze de date
ENDWITH
prin care se preia valoarea selectat n List1 i se afieaz n Text3. S-a folosit combinaia
With...EndWith pentru a adresa proprietile obiectelor List1, Text3 i Command1 din Page2
ntr-o form mai scurt (calificare global).
pentru obiectul command1 din lista de proprieti se stabilesc valorile pentru
Caption=validare i Fontbold= True. Din lista de evenimente se selecteaz Click Event
pentru care se ataeaz urmtoarele linii de cod:
Tabela Intrari
164
Fig. 7
SELECT 2
GO TOP
SELECT 3
GO TOP
SELECT 4
PUN=0
CANTIT=0
CODM=MATERIALE.COD_MAT
CODF=FURNIZORI.COD_FURN
DATAIN={ / / }
THISFORM.PAGEFRAME1.PAGE3.LIST1.SETFOCUS
THISFORM.PAGEFRAME1.PAGE3.REFRESH
165 Baze de date
Procedura selecteaz tabelele care vor fi folosite, iniializeaz variabilele pentru cantitate, pre
unitar, cod material, cod furnizor i data intrrii. Se trimite focusul pe obiectul List1 i se
actualizeaz pagina cu noile valori.
pentru obiectul List1 se alege din fereastra de proprieti RowSource, unde se declar
materiale, RowsourceType, se alege fields, ControlSource, se declar denumire (cmpul
cu acelai nume ca n fiierul materiale.dbf). Pentru evenimentul Click se asociaz
urmtoarele linii de cod
SELECT 2
CODM=COD_MAT
THISFORM.PAGEFRAME1.PAGE3.TEXT1.REFRESH
pentru obiectul List2 se alege din fereastra de proprieti RowSource, aici se declar
furnizori, RowsourceType, se alege Fields, ControlSource se declar denumire (cmpul cu
acelai nume al fiierului furnizori.dbf). Evenimentul Click are ataate urmtoarele linii de
cod
SELECT 3
CODF=COD_FURN
THISFORM.PAGEFRAME1.PAGE3.TEXT2.REFRESH
THISFORM.PAGEFRAME1.PAGE3.TEXT3.SETFOCUS
SELECT 4
APPEND BLANK
REPLACE COD_FURN WITH CODF, COD_MAT WITH CODM, CANT WITH CANTIT, PU
WITH PUN,;
DATA_IN WITH DATAIN
PUN=0
CANTIT=0
SELECT 2
GO TOP
CODM=MATERIALE.COD_MAT
SELECT 3
GO TOP
CODF=FURNIZORI.COD_FURN
DATAIN={ / / }
THISFORM.PAGEFRAME1.PAGE3.REFRESH
THISFORM.PAGEFRAME1.PAGE3.LIST1.SETFOCUS
Fig. 8
Aceast videoformat are numele intern Form1, numele extern este modificare.scx, iar pentru
proprietatea Caption se alege textul Modificare, Figura 8.
Butonul Iesire este primul strat i se aplica deasupra obiectului PageFrame1 (de tip container
avnd proprietatea PageCount =3); pe butonul Iesire la evenimentul Click se asociaz comanda
THISFORM.RELEASE.
Se face click cu butonul din dreapta al mouse-ului i se alege opiunea Edit pentru a accesa
elementele containerului, respectiv cele trei pagini: Furnizori, Materiale, Intrari. Numele extern i
grosimea de caracter a paginilor se stabilete utiliznd proprietile Caption i FontBold= True.
Adresarea paginilor se realizeaz fcnd click cu butonul stng al mouse-ului pe fiecare pagin.
168
La fel ca i la videoformatul precedent numele intern al paginii poate fi schimbat, dar vor fi pstrate
cele implicite (Page1, Page2, Page3).
Pentru stabilirea obiectelor pentru prima pagin Page1 (proprietatea caption=Furnizori) din
setul de pagini PageFrame1 se procedeaz astfel: se insereaz urmtoarele obiecte Text1, Text2,
Text3, Text4, Ttext5, cinci butoane de comand (Command1..Command5) i cinci etichete
(Label1..Label5).
SELECT 3
GO TOP
DENF=' '
THISFORM.PAGEFRAME1.PAGE1.REFRESH
THISFORM.PAGEFRAME1.PAGE1.TEXT1.SETFOCUS
pentru obiectele de tip text la proprieti, seciunea Data, se aleg pentru ControlSource
numele cmpurilor din fiiserul furnizori.dbf: Text1- cod_furn, Text2- denumire, Text3-
adresa, Text4- tel, iar pentru Text5- denf, care este variabila de preluare a irului de
caractere utilizat pentru cutarea n fiier a denumirii furnizorului.
Obiectul Text5 va avea ataat pe procedura Valid urmtoarele linii de cod pentru cutarea
irului de caractere preluat n variabila codf
Etichetele vor avea trecute la proprietatea Caption denumirile explicite ale variabilelor
utilizate: Cod furnizor (Label1), Denumire (Label2), Adresa (Label3), Telefon (Label4) i
Cauta furnizor (Label5). Proprietatea FontBold se seteaz pe valoarea True.
Butonul de tergere (nume intern Command1, proprietatea Caption=Stergere,
FontBold=True, ForeColor=255,0,0) va avea ataate urmtoare linii de cod pentru
evenimentul Click
Obiect Picture
Command2 c:\proiect_ex\top.bmp
Command3 c:\proiect_ex\prev.bmp
Command4 c:\proiect_ex\next.bmp
Command5 c:\proiect_ex\end.bmp
Fiecare buton are ataat cte o procedur pe evenimentul Click care execut deplasarea.
Butonul Command2 deplasare pe prima nregistrare
GO TOP
THISFORM.PAGEFRAME1.PAGE1.REFRESH
SKIP -1
IF BOF(3)
GO TOP
MESSAGEBOX('INCEPUT FISIER !',64)
ENDIF
THISFORM.PAGEFRAME1.PAGE1.REFRESH
Fig. 9
PUBLIC UMAS(6)
UMAS(1)='BUC'
UMAS(2)='KG'
UMAS(3)='TO'
UMAS(4)='MC'
UMAS(5)='MP'
172
UMAS(6)='ML'
pentru obiectul Page2 se selecteaz procedura Activate la care se ataeaz urmtorul cod
SELECT 2
GO TOP
DENM=' '
THISFORM.PAGEFRAME1.PAGE2.REFRESH
THISFORM.PAGEFRAME1.PAGE2.TEXT1.SETFOCUS
Obiectul Text4 se utilizeaz pentru a afia unitatea de msur care este declarat n cmpul
um al fiierului materiale.dbf i pentru a afia noua modificare n cazul operrii n List1.
173 Baze de date
Secvena de cod realizezaz cutarea materialului dup irul de caractere preluat n variabila
denm, dac gsete o nregistrare cu valoarea cmpului denumire=denm se afieaz datele, dac nu,
apare un mesaj specific.
pentru obiectul List1 vom alege din fereastra de proprieti RowSource unde declarm
variabila umas iar la RowsourceType alegem Aarray i atam urmtorul cod pe
evenimentul Click:
WITH THISFORM.PAGEFRAME1.PAGE2
TEXT4.VALUE=.LIST1.VALUE
UM=.TEXT4.VALUE
TEXT4.REFRESH
TEXT3.SETFOCUS
ENDWITH
Secvena realizeaz actualizarea valorii stocate n obiectului Text4 cu valoarea selectat din
List1 n cazul unei modificri, noua valoare se scrie n cmpul um din fiierul intrari.dbf i
trimiterea controlului la urmtorul obiect Text3 (cutare material).
pentru cele patru etichete se stabilesc valorile pentru proprietile Caption i FontBold
Obiect Picture
Command2 c:\proiect_ex\top.bmp
Command3 c:\proiect_ex\prev.bmp
174
Command4 c:\proiect_ex\next.bmp
Command5 c:\proiect_ex\end.bmp
SKIP -1
IF BOF(2)
GO TOP
MESSAGEBOX('INCEPUT FISIER !',64)
ENDIF
THISFORM.PAGEFRAME1.PAGE2.REFRESH
SKIP 1
IF EOF(2)
GO BOTTOM
MESSAGEBOX('SFRSIT FISIER !',64)
ENDIF
THISFORM.PAGEFRAME1.PAGE2.REFRESH
GO BOTTOM
THISFORM.PAGEFRAME1.PAGE2.REFRESH
Fig. 10
SELECT 2
GO TOP
SELECT 3
GO TOP
SELECT 4
GO TOP
THISFORM.PAGEFRAME1.PAGE3.REFRESH
pentru obiectul List1 - se alege din fereastra de proprieti RowSource, unde se declar
materiale, RowsourceType, se alege Fields, ControlSource, se declar denumire (cmpul
cu acelai nume ca n fiierului materiale.dbf) i se ataez la evenimentul Click codul:
176
SELECT 2
CODM=COD_MAT
THISFORM.PAGEFRAME1.PAGE3.TEXT1.REFRESH
pentru obiectul List2 se alege din fereastra de proprieti RowSource, unde se declar
furnizori, RowsourceType, se alege Fields, ControlSource, se declar denumire (cmpul
cu acelai nume ca n fiierul furnizori.dbf) i se ataeaz la evenimentul Click codul:
SELECT 3
CODF=COD_FURN
THISFORM.PAGEFRAME1.PAGE3.TEXT2.REFRESH
THISFORM.PAGEFRAME1.PAGE3.TEXT3.SETFOCUS
BTNVALUE=0
BTNVALUE=MESSAGEBOX('STERGERE ?',4+32+256)
IF BTNVALUE=6 THEN
DELETE
PACK
177 Baze de date
ENDIF
THISFORM.PAGEFRAME1.PAGE3.REFRESH
Secvena de cod realizeaz tergerea nregistrrii curente n urma unei confirmri suplimentare
solicitate prin cutia de dialog Messagebox; valoarea returnat de cutia de dialog preluat n
variabila btnvalue este testat i dac s-a ales butonul OK se realizeaz tergerea. Parametrii cutiei
de dialog Messagebox sunt:
MESSAGEBOX(cMessageText [, nDialogBoxType [, cTitleBarText]])
cMessageText -textul care va fi afiat;
nDialogBoxType specific tipurile de butoane ,butonul implicit i icon-ul afiat n antet;
cTitleBarText titlul cutiei de dialog (antet) .
Valorile pentru nDialogBoxType sunt date n tabelul de mai jos:
Valoare Icon
16 Stop
32 Semnul ntrebrii
48 Semnul exclamrii
64 Semnul Informaie (I)
(4- butoanele YES i NO, 32- tipul de icon afiat- semnul ntrebrii i 256- butonul doi, NO este
implicit).
Obiect Picture
Command2 c:\proiect_ex\top.bmp
Command3 c:\proiect_ex\prev.bmp
Command4 c:\proiect_ex\next.bmp
Command5 c:\proiect_ex\end.bmp
SELECT 4
SKIP -1
IF BOF(4)
GO TOP
MESSAGEBOX('INCEPUT FISIER !',64)
ENDIF
SELECT 4
THISFORM.PAGEFRAME1.PAGE3.REFRESH
SELECT 4
SKIP 1
179 Baze de date
IF EOF(4)
GO BOTTOM
MESSAGEBOX('SFRSIT FISIER !',64)
ENDIF
SELECT 4
THISFORM.PAGEFRAME1.PAGE3.REFRESH
SELECT 4
GO BOTTOM
THISFORM.PAGEFRAME1.PAGE3.REFRESH
Fig. 11
180
Acest videoformat are 5 obiecte: dou obiecte TextBox (Text1, Text2), dou etichete (Label1,
Label2) i un buton de comand (Command1) , Figura 11.
PUBLIC DATAIN1,DATAIN2
DATAIN1={ / / }
DATAIN2={ / / }
Se utilizeaz dou variabile pentru a prelua intervalul calendaristic pentru care se face selecia
nregistrrilor din fiierul intrari.dbf.
DATAIN1={ / / }
DATAIN2={ / / }
THISFORM.TEXT1.SETFOCUS
THISFORM.REFRESH
Se iniializeaz cele dou variabile declarate anterior i se trimite controlul catre obiectul
Text1.
cele dou etichete Label1 i Label2 vor avea stabilite urmtoarele proprietati:
IF DATAIN1>DATAIN2 THEN
181 Baze de date
n cazul n care perioada este validat se realizez o selecie din fiierul intrari.dbf n fiierul
temp1.dbf a tuturor nregistrrilor care respect condiia ca data calendaristic stocat n cmpul
data_in s fie cuprins n perioada care este preluat n variabilele datain1 i datain2, ordonate
ascendent dup cmpul data_in.
Se terge coloana cod_furn din fiierul temp1.dbf i se adaug o nou coloan cu numele
denumire de tip caracter (se utilizeaz comanda SQL ALTER TABLE).
Se selecteaz zona de lucru 5 i se deschide tabela temp.dbf i ntr-un ciclu FOR se parcurg
secvenial nregistrrile din acest fiier concomitent cu cutarea denumirii materialului n fiierul
materiale.dbf deschis n zona de lucru 2 (pe baza cmpului comun cod_mat). Se transfer coninutul
cmpului denumire din fiierul materiale.dbf n cmpul denumire din fiierul temp1.dbf.
La ieirea din ciclu se lanseaz execuia raportului mater_intr.frx cu datele fiierului temp1.dbf.
Dup terminarea execuiei raportului, se terge fiierul temp1.dbf i se d controlul meniului
menu1.mpr.
Fig. 12
183 Baze de date
Fig. 13
n meniul Report la opiunea Variables, se definete variabila valoare n care se va stoca suma
produselor pu*cant, obinute de la fiecare nregistrare pentru a afia o valoare total a materialelor
achiziionate ntr-o anumt perioad de timp, Figura 14.
n seciunea Page Header sunt ase etichete corespunztoare titlului raportului i capului de
tabel pentru care se afieaz datele din fiierul temp1.dbf.
n seciunea Detail sunt patru cmpuri de editare corespunztoare datelor din fiier (data_in,
denumire, cant, pu) i un cmp utilizat pentru a afia valoarea mrfii (pu*cant) pentru fiecare
nregistrare.
n seciunea Page Footer nu se trece nimic.
n seciunea Summary se declar cmpul pentru afiarea variabilei valoare care sumeaz
produsele pariale pu*cant.
184
Fig. 14
Fig. 15
n meniul Report, opiunea Data Grouping, se declar cmpul denumire din fiierul
materiale.dbf, dup care se va face gruparea datelor, utilizndu-se adresarea prin calificare
185 Baze de date
Fig. 16
Din meniul Report se selecteaz opiunea Variables i se definete variabila NR, iar la
opiunea Calculations, se selecteaz Count, Figura 17. Variabila se utilizeaz pentru numrarea
nregistrrilor tiprite obinndu-se astfel numrul curent.
Fig. 17
186
Ca efect al opiunii selectate (Data Grouping), raportul se mparte n mai multe seciuni,
astfel:
- seciunea Header n care este declarat sub form de etichet denumirea raportului (se alege
din meniul Format opiunea Font i se stabilete Verdana, iar pentru FontStyle=Bold,
Size=20);
- seciunea Group Header1: denumire n care se declar variabila NR i cmpul de grupare,
respectiv materiale.denumire. Pentru aceste cmpuri din meniul Format, la opiunea Font,
se alege Verdana i FontStyle=Regular i Bold (pentru materiale.denumire). Se observ
c exist posibilitatea de a definii mai multe cmpuri de grupare;
- seciunea Detail se prevd patru etichete pentru (furnizor, pret unitar, cantitate, valoare) i
patru cmpuri pentru afiarea datelor din fiierele ntre care s-au stabilit relaii:
furnizori.denumire, intrari.pu, intrari.cant i produsul intrari.pu*intrari.pu. Pentru aceste
cmpuri caracterul de tiprire este Verdana i stilul caracterului Regular;
- n seciunea Group Footer1: denumire nu se trece nimic.
n continuare este prezentat codul surs generat de wizard pentru aplicaia de mai sus.
IF empty(sys(2000,'intrari.dbf'))
CREATE table intrari (cod_mat n(5),cod_furn n(4),cant n(6), pu
n(8,2),data_in d)
ELSE
USE intrari
ENDIF
IF empty(sys(2000,'furnizori.dbf'))
CREATE table furnizori (cod_furn n(4),denumire c(40),adresa m,tel c(10))
ELSE
USE furnizori
ENDIF
INDEX on cod_furn tag cod_furn additive
CLOSE database
SELECT 2
USE materiale
SELECT 3
USE furnizori
188
SELECT 4
USE intrari
DO MENU1.MPR
READ EVENTS
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\ADAUG.SCX
Name = "Dataenvironment"
Top = -1
Left = -1
Height = 272
Width = 408
DoCreate = .T.
Caption = "Adaugare"
Name = "Form1"
ErasePage = .T.
PageCount = 3
Top = 3
Left = 4
Width = 400
Height = 266
TabIndex = 1
Name = "Pageframe1"
Page1.FontBold = .T.
Page1.Caption = "Furnizori"
Page1.Name = "Page1"
Page2.FontBold = .T.
Page2.Caption = "Materiale"
Page2.Name = "Page2"
Page3.FontBold = .T.
Page3.Caption = "Intrari"
Page3.Name = "Page3"
PROCEDURE Page1.Activate
SELECT 3
codf=0
den=''
adr=' '
tl=''
thisform.Pageframe1.Page1.refresh
thisform.Pageframe1.Page1.text1.setfocus
ENDPROC
PROCEDURE Page2.Activate
189 Baze de date
SELECT 2
codm=0
denm=''
thisform.Pageframe1.Page2.refresh
thisform.Pageframe1.Page2.text1.setfocus
ENDPROC
PROCEDURE Page2.Init
PUBLIC umas(6)
umas(1)='BUC'
umas(2)='KG'
umas(3)='TO'
umas(4)='MC'
umas(5)='MP'
umas(6)='ML'
ENDPROC
PROCEDURE Page3.Activate
SELECT 2
GO top
SELECT 3
GO top
SELECT 4
pun=0
cantit=0
codm=materiale.cod_mat
codf=furnizori.cod_furn
datain={ / / }
thisform.Pageframe1.Page3.list1.setfocus
thisform.Pageframe1.Page3.refresh
ENDPROC
ControlSource = "codf"
Height = 21
Left = 104
TabIndex = 1
Top = 22
Width = 81
Name = "Text1"
ControlSource = "den"
Height = 23
Left = 103
190
TabIndex = 2
Top = 55
Width = 250
Name = "Text2"
ControlSource = "adr"
Height = 38
Left = 106
TabIndex = 3
Top = 96
Width = 245
Name = "Text3"
ControlSource = "tl"
Height = 23
Left = 106
TabIndex = 4
Top = 144
Width = 113
Name = "Text4"
Top = 157
Left = 337
Height = 26
Width = 53
FontBold = .T.
Caption = "Validare"
TabIndex = 5
Name = "Command1"
PROCEDURE Click
LOCATE for codf=cod_furn
IF found(3) then
WAIT window 'Cod furnizor duplicat !'
ELSE
LOCATE for upper(alltrim(den))=upper(alltrim(denumire))
IF found(3) then
WAIT window 'Denumire duplicat !'
ELSE
APPEND blank
REPLACE cod_furn with codf,denumire with den,adresa with adr,tel
with tl
ENDIF
ENDIF
codf=0
191 Baze de date
den=''
adr=' '
tl=''
thisform.Pageframe1.Page1.refresh
thisform.Pageframe1.Page1.text1.setfocus
ENDPROC
FontBold = .T.
Caption = "Cod furnizor"
Height = 21
Left = 19
Top = 22
Width = 72
TabIndex = 6
Name = "Label1"
FontBold = .T.
Caption = "Denumire"
Height = 21
Left = 18
Top = 54
Width = 80
TabIndex = 7
Name = "Label2"
FontBold = .T.
Caption = "Adresa"
Height = 22
Left = 15
Top = 94
Width = 85
TabIndex = 8
Name = "Label3"
FontBold = .T.
Caption = "Telefon"
Height = 20
Left = 14
Top = 146
Width = 74
TabIndex = 9
Name = "Label4"
ControlSource = "codm"
Height = 25
Left = 115
192
TabIndex = 1
Top = 16
Width = 76
Name = "Text1"
ControlSource = "denm"
Height = 27
Left = 115
TabIndex = 2
Top = 64
Width = 256
Name = "Text2"
PROCEDURE Valid
thisform.Pageframe1.Page2.list1.setfocus
ENDPROC
Top = 165
Left = 330
Height = 29
Width = 53
FontBold = .T.
Caption = "Validare"
TabIndex = 4
Name = "Command1"
PROCEDURE Click
LOCATE for codm=cod_mat
IF found(2) then
WAIT window 'Cod material duplicat !'
ELSE
LOCATE for upper(alltrim(denm))=upper(alltrim(denumire))
IF found(2) then
WAIT window 'Denumire duplicat !'
ELSE
APPEND blank
REPLACE cod_mat with codm,denumire with denm,;
um with thisform.Pageframe1.Page2.list1.value
ENDIF
ENDIF
codm=0
denm=''
thisform.Pageframe1.Page2.refresh
thisform.Pageframe1.Page2.text1.setfocus
ENDPROC
193 Baze de date
FontBold = .T.
Caption = "Cod material"
Height = 24
Left = 10
Top = 20
Width = 82
TabIndex = 5
Name = "Label1"
FontBold = .T.
Caption = "Denumire"
Height = 21
Left = 10
Top = 70
Width = 81
TabIndex = 6
Name = "Label2"
RowSourceType = 5
RowSource = "umas"
Height = 108
Left = 125
TabIndex = 3
Top = 110
Width = 100
Name = "List1"
PROCEDURE Click
WITH thisform.Pageframe1.Page2
.Text3.value=.list1.value
.Text3.refresh
.Command1.setfocus
ENDWITH
ENDPROC
FontBold = .T.
Caption = "Unitate de masura"
Height = 22
Left = 10
Top = 120
Width = 105
Name = "Label3"
FontBold = .T.
Height = 25
194
Left = 11
ReadOnly = .T.
Top = 142
Width = 102
Name = "Text3"
FontBold = .T.
ControlSource = "codm"
Height = 25
Left = 86
ReadOnly = .T.
TabIndex = 1
Top = 85
Width = 84
Name = "Text1"
FontBold = .T.
ControlSource = "codf"
Height = 25
Left = 85
ReadOnly = .T.
TabIndex = 3
Top = 204
Width = 82
Name = "Text2"
ControlSource = "cantit"
Height = 25
Left = 276
TabIndex = 5
Top = 30
Width = 84
Name = "Text3"
ControlSource = "pun"
Height = 25
Left = 276
TabIndex = 6
Top = 67
Width = 107
Name = "Text4"
ControlSource = "datain"
Height = 25
Left = 276
TabIndex = 7
195 Baze de date
Top = 102
Width = 75
Name = "Text5"
BoundColumn = 1
RowSourceType = 6
RowSource = "materiale"
ControlSource = "denumire"
Height = 51
Left = 5
Sorted = .F.
TabIndex = 2
Top = 28
Width = 164
BoundTo = .T.
Name = "List1"
PROCEDURE Click
SELECT 2
codm=cod_mat
thisform.Pageframe1.Page3.text1.refresh
ENDPROC
RowSourceType = 6
RowSource = "furnizori"
ControlSource = "denumire"
Height = 52
Left = 4
Sorted = .F.
TabIndex = 4
Top = 142
Width = 163
Name = "List2"
PROCEDURE Click
SELECT 3
codf=cod_furn
thisform.Pageframe1.Page3.Text2.refresh
thisform.Pageframe1.Page3.Text3.setfocus
ENDPROC
Top = 156
Left = 280
Height = 27
Width = 77
FontBold = .T.
196
Caption = "Adaugare"
TabIndex = 8
Name = "Command1"
PROCEDURE Click
SELECT 4
APPEND blank
REPLACE cod_furn with codf, cod_mat with codm, cant with cantit,pu with
pun,;
data_in with datain
pun=0
cantit=0
SELECT 2
GO top
codm=materiale.cod_mat
SELECT 3
GO top
codf=furnizori.cod_furn
datain={ / / }
thisform.Pageframe1.Page3.refresh
thisform.Pageframe1.Page3.list1.setfocus
ENDPROC
FontBold = .T.
Caption = "Cod material"
Height = 23
Left = 7
Top = 87
Width = 81
TabIndex = 9
Name = "Label1"
FontBold = .T.
Caption = "Cod furnizor"
Height = 24
Left = 8
Top = 207
Width = 69
TabIndex = 10
Name = "Label2"
FontBold = .T.
Caption = "Cantitate"
Height = 28
Left = 204
197 Baze de date
Top = 34
Width = 57
TabIndex = 11
Name = "Label3"
FontBold = .T.
Caption = "Pret unitar"
Height = 28
Left = 204
Top = 72
Width = 66
TabIndex = 12
Name = "Label4"
FontBold = .T.
Caption = "Data intrarii"
Height = 26
Left = 204
Top = 105
Width = 69
TabIndex = 13
Name = "Label5"
FontBold = .T.
Caption = "Denumire material"
Height = 16
Left = 14
Top = 7
Width = 125
TabIndex = 14
ForeColor = 0,64,0
Name = "Label6"
FontBold = .T.
Caption = "Denumire furnizor"
Height = 22
Left = 7
Top = 122
Width = 142
TabIndex = 15
ForeColor = 255,0,0
Name = "Label7"
Top = 235
Left = 348
Height = 25
198
Width = 49
FontBold = .T.
Caption = "Iesire"
TabIndex = 2
Name = "Command1"
PROCEDURE Click
thisform.release
ENDPROC
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\END.BMP
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\FURNIZ_MATER.FRX
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\MAT_DATA.SCX
Name = "Dataenvironment"
Top = 1
Left = 67
Height = 94
Width = 214
DoCreate = .T.
Caption = "Materiale-Data"
Name = "Form1"
PROCEDURE Activate
datain1={ / / }
datain2={ / / }
thisform.text1.setfocus
thisform.refresh
ENDPROC
PROCEDURE Init
PUBLIC datain1,datain2
datain1={ / / }
datain2={ / / }
ENDPROC
Top = 39
Left = 170
Height = 21
Width = 45
FontBold = .T.
Caption = "OK"
TabIndex = 3
Name = "Command1"
199 Baze de date
PROCEDURE Click
IF datain1>datain2 then
MESSAGEBOX('A doua data calendaristica trebuie sa fie mai mare dect
prima !',48)
datain2={ / / }
thisform.Text2.setfocus
thisform.refresh
ELSE
SELECT * from intrari into table temp1 having
between(data_in,datain1,datain2) order by data_in asc
ALTER table temp1 drop column cod_furn
ALTER table temp1 add column denumire c(40)
USE
SELECT 5
USE temp1
FOR i=1 to reccount(5)
GOTO i
codm=cod_mat
SELECT 2
LOCATE for codm=cod_mat
IF found(2) then
denm=denumire
ENDIF
SELECT 5
REPLACE denumire with denm
ENDFOR
SELECT 5
REPORT form mater_intr preview
USE
Delete file 'temp1.dbf'
thisform.release
ENDIF
ENDPROC
ControlSource = "datain1"
Height = 25
Left = 80
TabIndex = 1
Top = 23
Width = 84
Name = "Text1"
200
ControlSource = "datain2"
Height = 25
Left = 80
TabIndex = 2
Top = 55
Width = 84
Name = "Text2"
FontBold = .T.
Caption = "De la data"
Height = 22
Left = 11
Top = 25
Width = 61
TabIndex = 4
Name = "Label1"
FontBold = .T.
Caption = "La data"
Height = 22
Left = 11
Top = 60
Width = 61
TabIndex = 5
Name = "Label2"
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\MATER_INTR.FRX
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\MENU1.MNX
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\MENU1.MPR
*:******************************************************************************
*:
*: Procedure File C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\DOC\MENU1.MPR
*:
*:
*:
*:
*:
*:
*:
*:
201 Baze de date
*:
*:
*:
*:
*:
*:
*:
*: Documented using Visual FoxPro Formatting wizard version .05
*:******************************************************************************
*: MENU1
*: _1j10vft5m
*: _1j10vft5n
*: _1j10vft5o
*: _1j10vft5p
*: _1j10vft5q
*: _1j10vft5r
*: _1j10vft5s
* *********************************************************
* *
* * 26/05/05 MENU1.MPR 14:40:05
* *
* *********************************************************
* *
* * Author's Name
* *
* * Copyright (C) 2005 Company Name
* * Address
* * City, Zip
* *
* * Description:
* * This PROGRAM was automatically generated BY GENMENU.
* *
* *********************************************************
* *********************************************************
* *
* * Menu Definition
* *
* *********************************************************
202
SET SYSMENU TO
SET SYSMENU AUTOMATIC
* *********************************************************
* *
* * _1J10VFT5M ON SELECTION PAD
* *
* * Procedure Origin:
* *
* * From Menu: MENU1.MPR, Record: 16
* * Called By: ON SELECTION PAD
* * Prompt: Iesire
* * Snippet: 1
* *
* *********************************************************
PROCEDURE _1j10vft5m
Clear events
CLOSE database
SET sysmenu to default
* *********************************************************
* *
* * _1J10VFT5N ON SELECTION BAR 1 OF POPUP vizualizar
* *
* * Procedure Origin:
* *
* * From Menu: MENU1.MPR, Record: 5
* * Called By: ON SELECTION BAR 1 OF POPUP vizualizar
* * Prompt: Materiale
* * Snippet: 2
* *
* *********************************************************
PROCEDURE _1j10vft5n
204
SELECT 2
BROWSE fields cod_mat, denumire noedit
* *********************************************************
* *
* * _1J10VFT5O ON SELECTION BAR 2 OF POPUP vizualizar
* *
* * Procedure Origin:
* *
* * From Menu: MENU1.MPR, Record: 6
* * Called By: ON SELECTION BAR 2 OF POPUP vizualizar
* * Prompt: Furnizori
* * Snippet: 3
* *
* *********************************************************
PROCEDURE _1j10vft5o
SELECT 3
BROWSE fields cod_furn, denumire noedit
* *********************************************************
* *
* * _1J10VFT5P ON SELECTION BAR 3 OF POPUP vizualizar
* *
* * Procedure Origin:
* *
* * From Menu: MENU1.MPR, Record: 7
* * Called By: ON SELECTION BAR 3 OF POPUP vizualizar
* * Prompt: Intrari
* * Snippet: 4
* *
* *********************************************************
PROCEDURE _1j10vft5p
SELECT 4
BROWSE noedit
* *********************************************************
* *
* * _1J10VFT5Q ON SELECTION BAR 1 OF POPUP actualizar
205 Baze de date
* *
* * Procedure Origin:
* *
* * From Menu: MENU1.MPR, Record: 10
* * Called By: ON SELECTION BAR 1 OF POPUP actualizar
* * Prompt: Adaugare
* * Snippet: 5
* *
* *********************************************************
PROCEDURE _1j10vft5q
DO form adaug
* *********************************************************
* *
* * _1J10VFT5R ON SELECTION BAR 2 OF POPUP actualizar
* *
* * Procedure Origin:
* *
* * From Menu: MENU1.MPR, Record: 11
* * Called By: ON SELECTION BAR 2 OF POPUP actualizar
* * Prompt: Modificare/Stergere
* * Snippet: 6
* *
* *********************************************************
PROCEDURE _1j10vft5r
DO form modificare
* *********************************************************
* *
* * _1J10VFT5S ON SELECTION BAR 2 OF POPUP rapoarte
* *
* * Procedure Origin:
* *
* * From Menu: MENU1.MPR, Record: 15
* * Called By: ON SELECTION BAR 2 OF POPUP rapoarte
* * Prompt: Lista Furnizori/Materiale
* * Snippet: 7
* *
* *********************************************************
206
PROCEDURE _1j10vft5s
SELECT 4
SET order to tag cod_mat of materiale.cdx in materiale
SET relation to cod_mat into materiale additive
SET order to tag cod_furn of furnizori.cdx in furnizori
SET relation to cod_furn into furnizori additive
REPORT form furniz_mater preview
SET relation off into materiale
SET relation off into furnizori
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\MODIFICARE.SCX
Name = "Dataenvironment"
Top = 0
Left = -1
Height = 294
Width = 424
DoCreate = .T.
Caption = "Modificare / Stergere"
Name = "Form1"
ErasePage = .T.
PageCount = 3
Top = 9
Left = 10
Width = 400
Height = 266
TabIndex = 1
Name = "Pageframe1"
Page1.FontBold = .T.
Page1.Caption = "Furnizori"
Page1.Name = "Page1"
Page2.FontBold = .T.
Page2.Caption = "Materiale"
Page2.Name = "Page2"
Page3.FontBold = .T.
Page3.Caption = "Intrari"
Page3.Name = "Page3"
PROCEDURE Page1.Activate
SELECT 3
GO top
denf=''
thisform.Pageframe1.Page1.refresh
207 Baze de date
thisform.Pageframe1.Page1.text1.setfocus
ENDPROC
PROCEDURE Page2.Init
PUBLIC umas(6)
umas(1)='BUC'
umas(2)='KG'
umas(3)='TO'
umas(4)='MC'
umas(5)='MP'
umas(6)='ML'
ENDPROC
PROCEDURE Page2.Activate
SELECT 2
GO top
denm=''
thisform.Pageframe1.Page2.refresh
thisform.Pageframe1.Page2.text1.setfocus
ENDPROC
PROCEDURE Page3.Activate
SELECT 2
GO top
SELECT 3
GO top
SELECT 4
GO top
thisform.Pageframe1.Page3.refresh
ENDPROC
ControlSource = "cod_furn"
Height = 21
Left = 92
TabIndex = 1
Top = 11
Width = 81
Name = "Text1"
ControlSource = "denumire"
Height = 23
Left = 92
TabIndex = 2
Top = 44
208
Width = 250
Name = "Text2"
ControlSource = "adresa"
Height = 38
Left = 92
TabIndex = 3
Top = 85
Width = 245
Name = "Text3"
ControlSource = "tel"
Height = 23
Left = 92
TabIndex = 4
Top = 133
Width = 113
Name = "Text4"
Top = 174
Left = 246
Height = 21
Width = 62
FontBold = .T.
Caption = "Stergere"
TabIndex = 5
ForeColor = 255,0,0
Name = "Command1"
PROCEDURE Click
codf=cod_furn
Delete
PACK
SELECT 4
LOCATE for codf=cod_furn
DO while found(4)
Delete
CONTINUE
ENDDO
PACK
SELECT 3
thisform.Pageframe1.Page1.refresh
thisform.Pageframe1.Page1.text1.setfocus
ENDPROC
FontBold = .T.
209 Baze de date
ENDPROC
Top = 135
Left = 317
Height = 20
Width = 31
Picture = next.bmp
Caption = ""
Name = "Command3"
PROCEDURE Click
Skip 1
IF eof(3)
GO bottom
MESSAGEBOX('Sfrsit fisier !',64)
ENDIF
thisform.Pageframe1.Page1.refresh
ENDPROC
Top = 135
Left = 361
Height = 20
Width = 31
Picture = end.bmp
Caption = ""
Name = "Command4"
PROCEDURE Click
GO bottom
thisform.Pageframe1.Page1.refresh
ENDPROC
Top = 135
Left = 278
Height = 20
Width = 31
Picture = prev.bmp
Caption = ""
Name = "Command5"
PROCEDURE Click
Skip -1
IF bof(3)
GO top
MESSAGEBOX('Inceput fisier !',64)
ENDIF
211 Baze de date
thisform.Pageframe1.Page1.refresh
ENDPROC
ControlSource = "denf"
Height = 24
Left = 92
Top = 173
Width = 145
Name = "Text5"
PROCEDURE KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
ENDPROC
PROCEDURE Valid
LOCATE for upper(left(denf,len(alltrim(denf))))=;
upper(left(denumire,len(alltrim(denf))))
IF found(3) then
thisform.Pageframe1.Page1.refresh
ELSE
MESSAGEBOX('Nu exista !',64)
ENDIF
ENDPROC
FontBold = .T.
Caption = "Cauta furnizor"
Height = 22
Left = 3
Top = 176
Width = 78
Name = "Label5"
ControlSource = "cod_mat"
Height = 25
Left = 115
TabIndex = 1
Top = 16
Width = 76
Name = "Text1"
ControlSource = "denumire"
Height = 25
Left = 115
TabIndex = 2
Top = 64
212
Width = 256
Name = "Text2"
FontBold = .T.
Caption = "Cod material"
Height = 24
Left = 10
Top = 20
Width = 82
TabIndex = 5
Name = "Label1"
FontBold = .T.
Caption = "Denumire"
Height = 21
Left = 10
Top = 70
Width = 81
TabIndex = 6
Name = "Label2"
RowSourceType = 5
RowSource = "umas"
Enabled = .T.
Height = 71
Left = 115
TabIndex = 3
Top = 110
Width = 100
Name = "List1"
PROCEDURE Click
WITH thisform.Pageframe1.Page2
.Text4.value=.list1.value
um=.Text4.value
.Text4.refresh
.Text3.setfocus
ENDWITH
ENDPROC
FontBold = .T.
Caption = "Unitate de masura"
Height = 22
Left = 10
Top = 120
213 Baze de date
Width = 105
Name = "Label3"
ControlSource = "denm"
Height = 25
Left = 115
Top = 191
Width = 198
Name = "Text3"
PROCEDURE Valid
LOCATE for upper(left(denm,len(alltrim(denm))))=;
upper(left(denumire,len(alltrim(denm))))
IF found(2) then
thisform.Pageframe1.Page2.list1.value=um
thisform.Pageframe1.Page2.refresh
ELSE
MESSAGEBOX('Nu exista !',64)
ENDIF
ENDPROC
FontBold = .T.
Caption = "Cauta material"
Height = 24
Left = 10
Top = 197
Width = 102
Name = "Label4"
Top = 160
Left = 236
Height = 20
Width = 31
Picture = top.bmp
Caption = ""
Name = "Command2"
PROCEDURE Click
GO top
thisform.Pageframe1.Page2.refresh
ENDPROC
Top = 160
Left = 314
Height = 20
Width = 31
Picture = next.bmp
214
Caption = ""
Name = "Command3"
PROCEDURE Click
Skip 1
IF eof(2)
GO bottom
MESSAGEBOX('Sfrsit fisier !',64)
ENDIF
thisform.Pageframe1.Page2.refresh
ENDPROC
Top = 160
Left = 358
Height = 20
Width = 31
Picture = end.bmp
Caption = ""
Name = "Command4"
PROCEDURE Click
GO bottom
thisform.Pageframe1.Page2.refresh
ENDPROC
Top = 160
Left = 275
Height = 20
Width = 31
Picture = prev.bmp
Caption = ""
Name = "Command5"
PROCEDURE Click
Skip -1
IF bof(2)
GO top
MESSAGEBOX('Inceput fisier !',64)
ENDIF
thisform.Pageframe1.Page2.refresh
ENDPROC
FontBold = .T.
ControlSource = "um"
Enabled = .T.
Height = 24
215 Baze de date
Left = 18
ReadOnly = .T.
Top = 144
Width = 83
Name = "Text4"
FontBold = .T.
ControlSource = "cod_mat"
Height = 25
Left = 86
ReadOnly = .T.
TabIndex = 1
Top = 85
Width = 84
Name = "Text1"
FontBold = .T.
ControlSource = "cod_furn"
Height = 25
Left = 85
ReadOnly = .T.
TabIndex = 3
Top = 204
Width = 82
Name = "Text2"
ControlSource = "cant"
Height = 25
Left = 276
TabIndex = 5
Top = 30
Width = 84
Name = "Text3"
ControlSource = "pu"
Height = 25
Left = 276
TabIndex = 6
Top = 67
Width = 107
Name = "Text4"
ControlSource = "data_in"
Height = 25
Left = 276
TabIndex = 7
216
Top = 102
Width = 75
Name = "Text5"
BoundColumn = 1
RowSourceType = 6
RowSource = "materiale"
ControlSource = "denumire"
Height = 51
Left = 5
Sorted = .F.
TabIndex = 2
Top = 28
Width = 164
BoundTo = .T.
Name = "List1"
PROCEDURE Click
SELECT 2
codm=cod_mat
thisform.Pageframe1.Page3.text1.refresh
ENDPROC
RowSourceType = 6
RowSource = "furnizori"
ControlSource = "denumire"
Height = 52
Left = 4
Sorted = .F.
TabIndex = 4
Top = 142
Width = 163
Name = "List2"
PROCEDURE Click
SELECT 3
codf=cod_furn
thisform.Pageframe1.Page3.Text2.refresh
thisform.Pageframe1.Page3.Text3.setfocus
ENDPROC
FontBold = .T.
Caption = "Cod material"
Height = 23
Left = 7
Top = 87
217 Baze de date
Width = 81
TabIndex = 9
Name = "Label1"
FontBold = .T.
Caption = "Cod furnizor"
Height = 24
Left = 8
Top = 207
Width = 69
TabIndex = 10
Name = "Label2"
FontBold = .T.
Caption = "Cantitate"
Height = 28
Left = 204
Top = 34
Width = 57
TabIndex = 11
Name = "Label3"
FontBold = .T.
Caption = "Pret unitar"
Height = 28
Left = 204
Top = 72
Width = 66
TabIndex = 12
Name = "Label4"
FontBold = .T.
Caption = "Data intrarii"
Height = 26
Left = 204
Top = 105
Width = 69
TabIndex = 13
Name = "Label5"
FontBold = .T.
Caption = "Denumire material"
Height = 16
Left = 14
Top = 7
Width = 125
218
TabIndex = 14
ForeColor = 0,64,0
Name = "Label6"
FontBold = .T.
Caption = "Denumire furnizor"
Height = 22
Left = 7
Top = 122
Width = 142
TabIndex = 15
ForeColor = 255,0,0
Name = "Label7"
Top = 156
Left = 213
Height = 20
Width = 31
Picture = top.bmp
Caption = ""
Name = "Command2"
PROCEDURE Click
SELECT 4
GO top
thisform.Pageframe1.Page3.refresh
ENDPROC
Top = 156
Left = 291
Height = 20
Width = 31
Picture = next.bmp
Caption = ""
Name = "Command3"
PROCEDURE Click
SELECT 4
Skip 1
IF eof(4)
GO bottom
MESSAGEBOX('Sfrsit fisier !',64)
ENDIF
thisform.Pageframe1.Page3.refresh
SELECT 2
LOCATE for intrari.cod_mat=materiale.cod_mat
219 Baze de date
IF found(2)
thisform.Pageframe1.Page3.list1.value=denumire
ENDIF
SELECT 4
thisform.Pageframe1.Page3.refresh
ENDPROC
Top = 156
Left = 335
Height = 20
Width = 31
Picture = end.bmp
Caption = ""
Name = "Command4"
PROCEDURE Click
SELECT 4
GO bottom
thisform.Pageframe1.Page3.refresh
ENDPROC
Top = 156
Left = 252
Height = 20
Width = 31
Picture = prev.bmp
Caption = ""
Name = "Command5"
PROCEDURE Click
SELECT 4
Skip -1
IF bof(4)
GO top
MESSAGEBOX('Inceput fisier !',64)
ENDIF
thisform.Pageframe1.Page3.refresh
SELECT 3
LOCATE for intrari.cod_furn=furnizori.cod_furn
IF found(3)
thisform.Pageframe1.Page3.List2.value=denumire
ENDIF
SELECT 4
220
thisform.Pageframe1.Page3.refresh
ENDPROC
Top = 195
Left = 222
Height = 25
Width = 63
FontBold = .T.
Caption = "Stergere"
ForeColor = 255,0,0
Name = "Command1"
PROCEDURE Click
btnvalue=0
btnvalue=messagebox('Stergere ?',4+32+256)
IF btnvalue=6 then
Delete
PACK
ENDIF
thisform.Pageframe1.Page3.refresh
ENDPROC
Top = 236
Left = 345
Height = 25
Width = 49
FontBold = .T.
Caption = "Iesire"
Name = "Command2"
PROCEDURE Click
thisform.release
ENDPROC
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\NEXT.BMP
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\PREV.BMP
****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY
DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\TOP.BMP
Fiierul MAGAZIE.LST va conine codul surs (fiier de tip text care poate fi ulterior trecut
ntr-un fiier Word) pentru toate programele i procedurile ataate obiectelor componentelor folosite
n proiect.
Se genereaz un tabel care va conine toate toate fiierele proiectului, generate, primare i
implicite (videoformate, rapoarte, meniuri), fiierele de tip BMP etc.
De exemplu, videoformatele (Forms) sunt salvate ntr-un fiier cu extensia .scx. La crearea
videoformatului, tabelul cu extensia .scx conine o nregistrare pentru videoformat, o nregistrare
pentru datele de mediu i dou nregistrri pentru uz intern. Pentru fiecare obiect adugat n
videoformat se adaug o nou nregistrare.
Anumite componente ale Visual FoxPro constau din fiiere multiple: un fiier primar i unul
sau mai multe fiiere implicite.
De exemplu, cnd se creaz un videoformat, Visual FoxPro creaz un fiier .scx (fiier primar)
i un fier .sct (fiier implicit)
Tabelul 2 prezint extensiile i tipurile de fiiere asociate care sunt utilizate n Visual FoxPro
Tabel 2
.dbc Database
.dbf Table
.fky Macro
.frx Report
223 Baze de date
.hlp WinHelp
.htm HTML
.lbx Label
.mnx Menu
.pjx Project
.prg Program
.scx Form
.txt Text
Fig. 1
Opiunile de construire se referer la urmtoarele aciuni:
- reconstruirea proiectului (Rebuild Project);
- construirea aplicaiei (Build Application);
- construirea programului executabil (Build Executable);
- construirea componentelor COM (Component Object Model pentru includerea
controalelor ActivX sau dac s-a creat un Automation server) sub form de DLL (librrie
de legtur dinamic).
Programul executabil generat poate fi rulat pe acelai calculator sau pe un altul, cu condiia ca
acesta s aib Visual FoxPro instalat.
Din meniul Tools se alege submeniul Wizard, apoi opiunea Setup. Se parcurg 7 pai:
1. Localizarea fiierelor se specific subdirectorul care conine fiierele i subdirectoarele ce
trebuie distribuite. Nu se poate folosi Distrib ca nume de subdirector n care se afl fiierele
i subdirectoarele ce se vor distribui;
2. Specificarea componentelor care vor fi incluse n pachetul de distribuie, i anume:
- Visual FoxPro 6.0 Runtime librriile Visual FoxPro;
- Microsoft 8.0 Graph Runtime;
- ODBC Drivers;
- COM Components;
- ActiveX Controls;
- HTML help engine;
3. Crearea subdirectorului pentru Disk Image:
- 1.44 MB 3.5 wizard-ul creaz imagini pentru floppy disk;
- Websetup (compressed) wizard-ul creaz un program de instalare dens compresat
proiectat pentru descrcare rapid de pe un web site;
- Netsetup wizard-ul creaz un singur director care va conine toate fiierele.
4. Specificarea opiunilor de instalare referitoare la:
- Setup dialog box caption titlul ferestrei de Setup, opional;
226
A. Anexa
Limite ale 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
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
A. Anexa 228
Index de termeni
accesul la date funcie utilizator, 129
direct, 97 nchiderea bazei de date/tabelei, 64
secvential, 97 Independena datelor
actualizarea bazei de date, 13 fizic, 10
algebr relaional logic, 10
diferen, 20 indexarea tabelei, 92
diviziunea, 21 nregistrare, 4
intersecia, 21 fizic, 4
jonciune, 21 logic, 4
jonciune exterioar, 21 interclasarea documentelor, 71
jonciune exterioar complet, 21 interogarea bazei de date, 13
jonciune exterioar dreapta, 21 legtura ntre tabele, 113
jonciune exterioar stnga, 21 matrice, 85
jonciune natural, 21 metadate, 4
produs cartezian, 20 model de date, 6, 7
proiecia, 20 distribuit, 8
reuniunea, 20 ierarhic, 8
selecia, 20 in reea, 8
anularea marcrii pentru tergere fizic, 49 primitiv, 8
apelul unui (sub)program, 130 semantic (orientat obiect), 9
arhitectura sistemului de baze de date, 6 modificarea nregistrrilor, 106
atribut, 4 modificarea structurii, 91
complex, 29 bazei de date, 62
cu o singur valoare, 29 tabelei, 62
cu set de valori, 29 procedur utilizator, 129
derivat, 29 programare
fr valoare, 29 modular, 119
bnci de date, 5 orientat pe obiecte, 37
baz de date, 4 procedural, 119
baz de date relaional, 28 structurat, 119
cmp, 4 programarea orientat pe obiecte
crearea etichetelor, 69 abstractizarea, 42
crearea interogrilor, 70 clasa, 37
crearea rapoartelor, 68 clasa parinte, 38
crearea structurii unei tabele, 149 evenimentul, 39
crearea tabelelor, 66 ncapsularea, 41
crearea videoformatelor, 67 mesaj, 38
de date metoda, 38
relaional, 8 motenirea, 41
deschiderea bazei de date, 52, 60 obiect, 38
deschiderea unei tabele, 49 polimorfism, 41
dictionar de date, 4 proprietatea, 39
domeniu, 19 restricii de integritate, 38
entitate, 4 subclasa, 37
fiier index, 94 redenumire fiier, 117
compus, 94 redundan minim, 14
simplu, 94 relaie, 19
Index de termeni 230
Bibliografie
1. Dima, G., Dima M. FoxPro, Editura Teora, Bucureti, 1993.
2. Dima, G., Dima M. FoxPro Meniuri, Editura Teora, Bucureti, 1994.
3. Kifer, M., Bernstein, A., Lewis, Ph. Database Systems An Application-Oriented Approach,
State University of New York, Stony Brook, 2005.
4. Lungu, I. i al. Sistemul FoxPro Prezentare i Aplicaii, Editura All, Bucureti, 1993.
5. M. Velicanu, i al. Sisteme de Gestiune a Bazelor de Date, Editura Petrion, Bucureti, 2000;
6. Velicanu, M., Lungu, I., Muntean, M. Dezvoltarea Aplicaiilor cu Baze de Date n Visual
FoxPro, Editura All, Bucureti, 2001.
7. *** Visual FoxPro 6.0 Manualele Microsoft
8. *** MSDN Library, April 2003.