Sunteți pe pagina 1din 24

BAZE DE DATE INTRODUCERE

Principalul domeniu de utilizare a calculatorului l reprezint cel al prelucrrii


informaiilor. Pe msur ce societatea se dezvolt cresc i necesitile de informare ale
acesteia, deci crete i volumul de informaii ce trebuie prelucrate. Astfel apare problema
memorrii acestor informaii, a prelucrrii lor n vederea obinerii diverselor rezultate
solicitate. Acesta este tocmai domeniul n care este specializat FoxPro, domeniul bazelor
de date.
Datorit capacitilor relativ mici ale memoriilor interne ale calculatoarelor, stocarea unor
volume mari de informaie se face pe dispozitive de memorie extern, cum ar fi unitile
de benzi, unitile de disc, etc. Cele mai folosite sunt unitile de disc, acestea ajungnd
astzi la capaciti de memorare de ordinul GB, ce satisfac marea majoritate a
utilizatorilor.
Pe discuri, informaiile sunt depozitate n fiiere. O baz de date reprezint tocmai un
astfel de fiier, cu o anumit organizare ce permite accesul rapid i complet la informaiile
stocate n acesta.
Datorit asemnrii dintre modul de organizare a unei baze de date i cel al unui tabel,
vom folosi analogia dintre aceste dou elemente n descrierea unei baze de date.
S presupunem c am avea o agend n care am nscris un numr de persoane, pentru
fiecare dintre acestea menionnd numele, prenumele numrul de telefon, data naterii,
sexul, adresa. Acestea pot fi trecute ntr-un tabel de forma:
Nr.
1.
2.
3.

Nume
Popescu
Toma
Axente

Prenume
Dumitru
Daniela
Ionel

Telefon
321645
324586
______

Data naterii
06/27/67
03/09/69
12/02/72

4.

Tudor

Mihaela

132478 09/13/68

Sex
B
F
B
F

Adresa
Oneti, Str.Oituz, Bl.11, Ap.33
Bucureti, Str. Cuza Vod, Nr.2
Timioara, B-dul Revoluiei Nr.49,
Sc.A, Et.1, Ap.4
Bacu, Str. Mreti Nr. 56

Corespunztor acestui tabel vom avea o baz de date n care:


capului de tabel i va corespunde structura;
coloanele vor fi numite cmpuri;

liniile se vor numi nregistrri.


La crearea unei baze de date trebuie specificat structura acesteia. Pentru a
specifica n mod univoc structura unei baze de date, trebuie indicate cmpurile
care o compun.
Fiecare cmp este caracterizat de:
numele asociat: ex. nume, prenume, telefon, etc.;
tipul de date ce se memoreaz n acel cmp: ex. numere, iruri de caractere, date
calendaristice, etc.;
dimensiunea, respectiv numrul de caractere pe care este permis scrierea datelor n
respectivul cmp.
Pentru a specifica o anumit nregistrare din baza de date, se folosete indicatorul de
nregistrri o zon de memorie care conine numrul nregistrrii cu care se lucreaz n
momentul de fa (nregistrare curent). Acesta poate fi asociat ca o variabil asociat
bazei de date i care exist atta timp ct este deschis baza de date. La un moment dat o
singur nregistrare este cea curent, numrul ei fiind dat de indicatorul de nregistrri.
O imagine intuitiv a indicatorului de nregistrri este dat de urmtoarea figur:

baz de date
indicatorul de
nregistrri

nregistrri

nr. nregistrare
curent

Indicatorul de nregistrri poate fi modificat prin comenzi FoxPro, acest lucru fiind
echivalent cu deplasarea sgeii indicatorului de nregistrri n sus i n jos, de-a lungul
bazei de date.
Pentru a folosi o baz de date (b.d.) aceasta trebuie mai nti deschis (se presupune c ea
exist pe disc, a fost creat anterior). Deschiderea bazei de date presupune rezervarea n
memoria intern a calculatorului a unei zone rezervate n care FoxPro va memora toate
informaiile necesare utilizrii acestei baze de date (structura, numrul de nregistrri,
etc). Aceast zon de memorie poart denumirea de zon de lucru (work area). FoxPro
poate manipula mai multe b.d. simultan, deci poate lucra cu mai multe zone de lucru, 25
la numr, n care se deschid b.d. respective. Asocierea b.d. la zonele de lucru este
controlata de ctre programator, acesta avnd la dispoziie comenzi i funcii specializate
n acest scop.
Dup seschiderea unei b.d. (ntr-o zon de lucru) se poate trece la lucrul cu aceasta, adic
vom putea:
s prelum informaii din b.d.;
s modificm informaiile deja existente;
s adugm noi informaii;
s tergem informaiim din b.d., etc.
Dup terminarea lucrului cu b.d. urmeaz nchiderea acesteia, constnd n:
desfacerea legturii dintre b.d. i zona de lucru;
eliberarea memoriei alocate la deschidere (eliberarea zonei de lucru);
nchiderea fiierului b.d., odat cu memorarea modificrilor efectuate de la deschidere
pn n acest moment.
Acesta este pe scurt modul de lucru co o b.d. Pentru a putea lucra cu o baz de date
trebuie s nelegem cum anume se realizeaz prelucrarea i memorarea informaiilor,
respectiv organizarea informaiilor pe tipuri de date i funciile specifice fiecrui tip de
date.

2. TIPURI DE DATE

Pentru a transmite calculatorului programul dup care acesta urmeaz s prelucreze


informaiile, se folosete un limbaj de programare. Acesta reprezint ansamblul
codificrilor i operaiilor ce se execut ntr-un program, ct i a regulilor de combinare a
acestora, n scopul transmiterii ctre calculator a programului dup care acesta va
funciona.
Informaiile prelucrate pe calculator vor fi numite date. Exemple de date: numerice, litere,
iruri de litere, etc.
Un tip de date reprezint o caracteristic a datelor care stabilete ce operaii se pot
executa asupra lor, modul de codificare a datelor n memoria calculatorului, semnificaia
acestor date. Exemple de tipuri de date: numeric, logic, ir de caractere, etc.
n limbajul FoxPro vom avea urmtoarele tipuri de date:
tipul logic;
tipul numeric;
tipul ir de caractere;
tipul dat calendaristic;
tipul memo;
Aceste tipuri vor fi tratate pe rnd, pentru fiecare preyentndu-se:
modul de specificare a datelor de tipul respectiv;
operatori ce se aplic asupra acestor date;
comenzile i funciile referitoare la datele de tipul respectiv.
2.1 TIPUL LOGIC
Este alctuit din datele ce nu pot lua dect dou valori: adevrat (TRUE) sau fals
(FALSE). Pentru a specifica valoarea adevrat a unei expresii de tip logic se folosete
construcia .T. (de la TRUE) iar pentru valoarea fals se folosete .F. (de la FALSE).
O expresie de tip logic reprezint o combinaie de operanzi i operatori. Operanzii pot fi:
cmpuri de tip logic;
funcii care returneaz valori de tip logic;
variabile de tip logic;
alte expresii logice.
Operatorii logici, n ordinea prioritii de evaluare, sunt:
OPERATOR
SEMNIFICAIE
()
grupeaz expresiile logice
!, NOT
negaie logic
AND
I logic
OR
SAU logic
De asemenea, rezultatul unei expresii care conine operatori relaionali este tot de tip
logic.
Exemplu:
? NOT(1=3)
.T.
? (1<=4)AND(5>3)
.T.
?6<3 OR 5*7=20

.F.
2.2.TIPUL NUMERIC
Operanzi numerici:
- cmpuri numerice ale b.d.
- variabile de tip numeric
- funcii care returneaz valori numerice
- constante numerice
Operatorii aritmetici care se aplica operanzilor numerici cu rezultat numeric:
OPERATOR
SEMNIFICAIE
()
grupeaz expresiile
**, ^
ridicare la putere
*, /, %
nmulire, mprire, modulo(restul mpririi)
+, adunare scdere
Operatorii relaionali:
OPERATOR
<
>
=
<>, #, !=
<=
>=

RELAIE
mai mic dect
mai mare dect
egal cu
diferit de
mai mic sau egal cu
mai mare sau egal cu

FUNCII REFERITOARE LA SEMNUL DATELOR NUMERICE:


ABS(<exp N>) = valoarea absolut a argumentului (respectiv<exp N>)
SIGN(<expN>) = returnez semnul argumentului
+1 dac <exp N> este >0
SIGN(<expN>) = 0 dac <expN> este =0
-1 dac <exp> este <0
FUNCII DE APROXIMARE
INT(<expN>)= partea ntreag a argumentului
CEILING(<expN>)= cel mai apropiat ntreg mai mare sau egal cu
FLOOR(<expN>)= cel mai apropiat ntreg mai mic sau egal cu
ROUND(<expN1, expN2>)=<expN1>= expresia de rotunjit, (<expN2>) reprezentnd
numrul de zecimale care se vor pstra n rezultat.
FUNCII MATEMATICE ELEMENTARE
EXP(<expN>)= exponeniala lui (<expN>);
LOG(<expN>)= logaritmul natural din (<expN>);
LOG10(<expN>)= (<expN>)= logaritmul zecimal din (<expN>);
SQRT(<expN>)= (<expN>)= radicalul de ordin 2 din (<expN>).
2. 3 TIPUL IR DE CARACTERE

Un ir de caractere reprezint o mulime de caractere ordonat care se trateaz ca un tot


unitar. Ordinea caracterelor n ir este esenial i ficrui caracter I se asiciaz un numr
reprezentnd poziia caracterului n cadrul irului (primul caracter va avea poziia 1, al IIlea caracter va avea poziia 2, .a.m.d.). Numrul caracterelor dintr-un ir reprezint
lungimea irului. Un subir al irului dat reprezint o poriune din ir, ncepnd de la o
poziie specificat i de lungime dat.
Constantele de tip ir de caractere se specific prin mulimea caracterelor care l compun,
ncadrat ntre apostrofuri simple sau duble (ex. bun ziua! este acelai ir de caractere
ca i bun ziua! dar este diferit de irul BUN ZIUA!). Nu sunt permise construcii
de forma: salut sau salut. pentru a include un apostrof ntr-un ir, irul va fi delinitat
de cellalt tip de apostrof (ex.: irul acesta conine i este un exemplu).
Dac lungimea irului de caractere este 0 vorbim despre irul vid sau irul nul reprezentat
prin sau . Dac lungimea irului este 1 vorbim despre caractere ex.: 1 sau a.
Operatorii care se pot aplica irurilor de caractere sunt:
- operatori de concatenare
- operatori de comparare sau relaionali
Operatorul de concatenare simplu + face ca din dou iruri de caractere s se obin un
al treilea, prin alipirea celui de al doilea ir la coada primului.
Operatorul de concatenare special - face ca din dou iruri de caractere s se obin un
al treilea prin alipirea celui de al doilea ir la coada primului, blancurile (spaiile) de la
sfritul primului ir fiind trecute la sfritul irului al doilea.
Exemplu:
eu nv + FoxPro = eu nv FoxPro
eu nv - FoxPro =eu nv FoxPro
Operatori relaionali:
OPERATOR
$
<
>
==
<>, #, !=
<=
>=

RELAIE
inclus n
mai mic dect
mai mare dect
identic cu
diferit de
mai mic sau egal cu
mai mare sau egal cu

Operatorii relaionali au urmtoarea sintax:


<expc1> <operator> <expc 2>
Operatorul $ (inclus n) returneaz adevrat dac primul ir de caractere <expc 1> este
coninut n cel de al doilea <expc 2>, altfel returneaz fals.
FUNCII REFERITOARE LA IRURILE DE CARACTERE
Funcia CHR( )- returneaz caracterul ASCII corespunztor codului numeric
transmis ca parametru.
Sintax: CHR(<expN>)
Exemplu:
?CHR(49)
?CHR(65)= =A
1
.T.
Funcia ASC( )- returneaz codul ASCII al primului caracter din irul dat.
Sintax: ASC(<expC>)
Exemplu:

?ASC(A)
?ASC(a)= =ASC(alfa)
65
.T.
Funcia LEN( )- returneaz lungimea irului primit ca parametru.
Sintax: LEN(<expC>)
Exemplu:
?LEN(Bun ziua !)
?LEN(baze+de date)
11
13
Funcia LOWER( )- transform toate majusculele n litere mici, restul
caracterelor rmnnd neschimbate.
Sintax: LOWER(<expC>)
Exemplu:
?LOWER(POpescu AliN)
popescu alin
Funcia UPPER( )- transform toate literele mici n majuscule, restul caracterelor
rmnnd neschimbate.
Sintax: UPPER(<expC>)
Exemplu:
?UPPER(POpescu AliN)
POPESCU ALIN
Funcia PROPER( )- transform primul caracter n majuscul (dac este liter),
restul caracterelor n litere mici.
Sintax: PROPER(<expC>)
Exemplu:
?PROPER(POPEsCu aliN)
Popescu Alin
2.4 TIPUL DE DAT CALENDARISTIC
O constant de tip dat calendaristic se specific prin luna, ziua i anul
corespunztor, separate prin caracterul / i ncadrate ntre paranteze acolade.
Data calendaristic vid se specific prin blancuri n poziia zilei, lunii i anului
sau printr-un blanc ncadrat ntre paranteze acolade.
ex.: data_vid { / / } sau data vid { }
FoxPro trateaz toate datele calendaristice invalide ca date calendaristice vide.
ex.: ? {03/33/99}= = { }
.T.
Adunarea unei zile la o dat calendaristic are ca efect avansarea datei cu o zi n
ordine calendaristic.
astfel: {02/28/99}+1 va fi egal cu {03/01/99}
sau ? {01/01/99}-1
12/31/98
Operatorii relaionali se pot aplica i datelor de tip dat calendaristic. O dat
calendaristic este este mai mare dect alta atunci cnd prima dintre acestea urmeaz
calendaristic celei de a doua.
Formatul de specificare a datelor calendaristice este controlat de comanda SET
DATE.
sintax:
SET DATE [TO]
AMERICAN ANSI BRITISH FRENCH GERMAN
ITALIAN JAPAN USA MDY DMY YMD
Formatul datei este dat de urmtorul tabel:

TIPUL DATEI
AMERICAN
ANSI
BRITISH
FRENCH
GERMAN
ITALIAN
JAPAN
USA
MDY
DMY
YMD

FORMATUL
ll/zz/aa
aa/ll/zz
zz/ll/aa
zz/ll/aa
zz/ll/aa
zz/ll/aa
aa/ll/zz
ll/zz/aa
ll/zz/aa
zz/ll/aa
aa/ll/zz

Comanda SET CENTURY stabilete dac anul va fi descris de dou cifre


(respectiv an din secolul 20) sau patru cifre.
sintax: SET CENTURY ON OFF unde ON indic patru cifre pentru an iar OFF indic
dou cifre pentru an.
Data curent a sistemului se poate obine folosind funcia DATE ()
sintax:
DATE()
ex:
?DATE()
01/23/99
SET CENTURY ON
?DATE()
01/23/99
FUNCII CARE LUCREAZ CU DATE CALENDARISTICE
Funcia CDOW (<expD>) returneaz ziua din cadrul sptmnii n care cade
aceast dat ca ir de caractere reprezentnd numele zilei din cadrul sptmnii.
Funcia DOW (<expD>) returnez ziua din cadrul sptmnii n care cade aceast
dat ca numr reprezentnd a cta zi din sptmn. (1 pentru luni, 2 pentru mari, etc.)
Ex.: ?CDOW(DATE())
?DOW({01/12/1999})
SATURDAY

Funcia CMONTH(<expD>) returneaz un ir de caractere reprezentnd numele


lunii corespunztoare datei (Ianuary, February, etc.).
Funcia MONTH(<expD>) returneaz un numr reprezentnd a cta lun din
cadrul anului.
Ex.: ?MONTH(date())
?CMONTH({01/12/1999})

Ex.:

Ex.:

1
IANUARY
Funcia YEAR() returneaz anul ca valoare numeric
?YEAR(DATE()-30)
1989
FUNCII CARE LUCREAZ CU ORA SISTEMULUI
Funcia TIME([<expN>]) care returneaz ora sistemului.
?TIME()

15:12:25
?TIME(0)
15:13:24.75
Funcia SYS(2) returneaz numrul de secunde care au trecut de la ora 0.
Ex.: ?TIME()
15:16:03
?SYS(2)
55000
Funcia SECONDS() returneaz numrul de secunde i numrul de milisecunde
care au trecut de la ora 0.
Ex.: ?TIME()
15:19:52
?SYS(2)
55191
?SECONDS()
55191.863
Ceasul sistemului poate fi afiat n permanen pe ecran cu ajutorul comenzilor
SET CLOCK ON OFF unde ON face ca ceasul s fie afiat n permanen pe ecran sau
SET CLOCK TO [<rnd>,<coloan>] folosit pentru a specifica poziia pe ecran unde
se dorete afiarea.
Ex.: SET CLOCK ON
SET CLOCK TO 1,70
vor determina afiarea n permanen a cesului n partea din dreapta sus a ecranului (linia
1 coloana 70).
3. CREAREA UNEI BAZE DE DATE
Pentru a crea o baz de date se folosete comanda CREATE.
sintax:
CREATE [<fiier> ?]
unde <fiier> este numele fiierului n care vrem s pstrm baza de date. Dac nu
se specific o alt extensie, implicit se asociaz extensia dbf (data base file). Dac nu se
specific numele fiierului sau se folosete parametrul ? pe ecran se deschide o fereastr
unde se va introduce numele b.d.
Enter the name of the new file
[..]
foxhelp.dbf

DRIVE

foxuser.dbf
install.dbf
DIRECTORY

FOXPRO

[ ] All files
UNTITLED

<<Create>>
<Cancel>

Dup specificarea numelui bazei de date se activeaz declanatorul implicit


<Create> dup care se intr n fereastra de specificare a structurii.

Structure: Untitled
Name
Type

Width

Dec

Field
<Insert>
<Delete>
<<OK>>
<Cancel>

FIELDS: 0

LENGTH: 1

AVIABLE: 3999

n dreptunghiul trasat cu linie simpl se va specifica structura b.d. astfel:


- n coloana Name se vor introduce numele cmpurilor care alctuiesc b.d.
- n coloana Type se vor introduce tipul cmpului, respectiv tipul datelor ce vor
putea fi memorate n acest cmp (Character, Numeric, Float, Date, Logical,
Memo, Picture).
- n coloana Width se stabilete numrul de caractere ocupate de cmpul
respectiv n b.d. Dimensiunea cmpului se stabilete de ctre utilizator doar n
cazul cmpurilor de tip Chatacter, Numeric, Float, n ultimile dou situaii
lime cmpului include i punctul zecimal i partea fracionar.
- n coloana Dec se stabilete numrul de zecimale de dup virgul (punctul
zecimal) i are sens doar n cazul cmpurilor de tip Numeric i Float.
Pe ultima linie a ferestrei sunt afiate informaii cu privire la structura existent:
- numrul de cmpuri (Fields)
- numrul de caractere ocupate de o nregistrare (Length)
- suma limilor cmpurilor +1
- numrul de caractere disponibile (Aviable) tiind c lungimea maxim a unei
nregistrri este de 4000.
Exerciiu: S se creeze b.d. agenda.dbf cu cmpurile:
nume ir de maxim 20 de caractere
prenume ir de maxim 20 de caractere
data naterii dat calendaristic
sex logic
nr. telefon numeric
adres ir de maxim 40 de caractere

ZONE DE LUCRU
Pentru manipularea b.d. FoxPro folosete zonele de lucru (maxim 25) n care
depune informaiile necesare operaiilor efectuate cu b.d. respective. La un moment dat o
singur b.d. este curent, implicit zona de lucru curent va fi 1 sau A, pentru identificarea
zonelor de lucru folosindu-se numerele de la 1 la 25 sau litere de la A la J (pentru primele
10 zone de lucru).
Schimbarea zonei de lucru curente se face cu comanda SELECT.
sintaxa: SELECT <expN> <expC>
unde <expN> reprezint numrul zonei de lucru ce va fi activat. Dac <expN>
este 0 atunci se va selecta prima zon de lucru neocupat.
<expC> caractere A, B,
Pentru a afla care este zona de lucru curent se folosete funcia SELECT().
sintax: SELECT ([0 ])
Parametrul 0 determin funcia s returneze numrul zonei de lucru curente.
Parametrul 0 determin funcia s returneze numrul ultimei zone de lucru nefolosite.
4. MANIPULAREA STRUCTURII UNEI BAZE DE DATE
Pentru a realiza modificarea structurii unei baze de date se folosete comanda
MODIFY STRUCTURE.
sintaxa: MODIFY STRUCTURE sau MODI STRU
Aceast comand deschide o fereastr de dialog, aceeai ca la crearea b.d. unde se
realizeaz modificrile dorite. Dac n zona de lucru curent avem deschis o b.d., atunci
comanda se refer la aceasta. n caz contrar apare o fereastr de dialog n care utilizatorul
selecteaz b.d. creia i va modifica structura.
Vizualizarea coninutului unei b.d. se realizeaz cu comenzile DISPLAY
STRUCTURE sau LIST STRUCTURE.
sintaxa:
DISPLAY STRUCTURE [IN<expN> <expC>]
[TO PRINTER TO FILE <fiier>]
[NONCONSOLE]
LIST STRUCTURE [IN<expN> <expC>]
[TO PRINTER TO FILE <fiier>]
[NONCONSOLE]
deosebirea dintre cele dou comenzi este c prima (DISPLAY) face pauz dup umplerea
unui ecran cu informaii, la cea de-a doua (LIST) afiarea fcndu-se cu defilare.
<expN> sau <expC> specific zona de lucru, respectiv b.d. la care se refer
comanda. n cazul n care apare opiunea NONCONSOLE afiarea pe ecran (implicit)
este inhibat. n paralel cu afiarea pe ecran informaiile pot fi trimise la imprimant
(clauza TO PRINTER) sau n fiier <fiier> (clauza TO FILE).
Un alt mod de a crea o b.d. l reprezint comanda COPY STRUCTURE care
careaz o b.d. nou cu aceeai structur (sau asemntoare) cu a celei deschise n zona de
lucru curent.
sintaxa: COPY STRUCTURE TO <fiier>
[FIELDS<lista de cmpuri>]
unde <fiier> reprezint fiierul noii b.d. Clauza FIELDS are ca efect copierea n
noua b.d. doar a cmpurilor specificate n lista de cmpuri ce urmeaz clauza.

Exerciiu: S se modifice structura b.d. agenda.dbf astfel nct noua b.d. s conin
nc un cmp i anume nlime (exprimat n metri, centimetri) numeric cu lime 5 din
care 2 partea zecimal.
5. DESCHIDEREA I NCHIDEREA UNEI BAZE DE DATE
Pentru lucrul cu b.d. create anterior este necesar deschiderea lor n zone de lucru
ale FoxPro. Acest lucru se relizeaz folosind comanda USE
sintaxa: USE [<fiier> ?]
[n <zona de lucru>]
[AGAIN]
unde <fiier> este fiierul b.d. ce va fi deschis. Dac nu se specific nici <fiier> i nici ?
atunci comanda are ca efect nchiderea b.d. din zona de lucru curent. Dac n locul
fiierului apare ? fiierul b.d. ce va fi deschis va fi obinut printr-o fereastr de dialog.
n cazul n care clauza i lipsete deschiderea b.d. se va face n zona de lucru
curent, altfel zona de lucru n care se va deschide b.d. va fi cea specificat n clauza in.
n cazul n care se dorete deschiderea unei b.d. de mai multe ori n zone de lucru
diferite se folosete clauza AGAIN.
Dac la deschiderea unei b.d. n zona de lucru exist o alt b.d., cea veche este
nchis automat nainte de deschiderea celei noi.
nchiderea bazelor de date se poate realiza i cu comenzile CLOSE ALL i
CLOSE DATABASE.
sintaxa:CLOSE ALL
- nchide toate fiierele din toate zonele de lucru i selecteaz zona de lucru 1
CLOSE DATABASE
- nchide toate bazele de date i selecteaz zona de lucru 1.
Pentru a obine informaii despre zonele de lucru i b.d. deschise n ele se vor
folosi dou funcii: USED() i DBF().
sintaxa: USED([<expN> <expC>])
unde <expN> sau <expC> specific zona de lucru despre care dorim s aflm
informaii.
Aceast funcie returneaza o valoare logica astfel:
.T. dac n zona de lucru este deschis o b.d.
.F. dac zona de lucru este liber
Dac nu se specific o zon de lucru, funcia se refer la zona de lucru curent.
Pentru a afla ce b.d. este dechis ntr-o anumit zon de lucru se folosete funcia
DBF(). Aceasta returneaz un ir de caractere ce conine numele b.d. deschis ntr-o zon
de lucru.
sintaxa: DBF([<expN])
unde <expN> reprezint numrul zonei de lucru la care funcia se refer. Dac nu
este deschis nici o b.d. n zona de lucru specificat, atunci va fi returnat irul vid.
exerciiu: S se deschid b.d. agenda.dbf n dou zone de lucru (1 i 2) i s se nchid
b.d. din zona 1.
USE AGENDA
USE AGENDAIN 2 AGAIN
? DBF(2)
AGENDA.DBF
SELECT 1
USE

6. DOMENIUL NREGISTRRILOR
6.1 CLAUZELE DE DOMENIU
Exist comenzi care acioneaz asupra mai multor nregistrri ale unei b.d.
Selectarea acestora se face specificnd n comand condiia de selectare. Mulimea
nregistrrilor care respect condiia formeaz domeniul nregistrrilor la care se refer
comanda respectiv. Domeniul nregistrrilor se specific prin clauzele <domeniu>, FOR
i WHILE incluse opional n comand.
Clauza <domeniu> se va nlocui cu una din urmtoarele construcii:
ALL selecteaz toate nregistrrile din b.d.
NEXT <expN> se refer la urmtoarele <expN> nregistrri, ncepnd
de la nregistrarea curent inclusiv;
RECORD <expN> acioneaz numai asupra nregistrrii cu numrul
<expN>;
REST selecteaz nregistrrile ncepnd de la cea curent inclusiv i
pn la sfritul b.d.
Clauza FOR:
Sintaxa: FOR <expL>
se folosete pentru selectarea nregistrrilor n funcie de o condiie logic
<expL>. Se selecteaz acele nregistrri pentru care <expL> este adevrat.
Clauza WHILE:
Sintaxa: WHILE <expL>
selecteaz nregistrrile n funcie de condiia logic <expL>. Se selecteaz acele
nregistrri pentru care <expL> este adevrat. Spre deosebire de clauza FOR care dup
gsirea unei nregistrri care nu respect condiia continu cu testarea celorlalte, clauza
WHILE ntrerupe testarea nregistrrilor cnd gsete o nregistrare ce nu respect
condiia dat.
Dac se folosesc ambele clauze FOR i WHILE, prima care conteaz este clauza
WHILE.
n expresia logic din clauza FOR i WHILE, trebuie s apar o mrime care s
varieze n funcie de nregistrare. Aceasta trebuie s depind fie de numrul de
nregistrare, fie de coninutul acesteia.
Exerciiu: S se afieze toate nregistrrile al cror nume ncepe cu o liter de dup litera
P.
6.2 INDICATORUL DE NREGISTRRI
Indicatorul de nregistrri este asociat unei b.d. la deschidere i este ters la
nchiderea b.d. La deschiderea b.d. indicatorul de nregistrri va indica spre prima
nregistrare (spre nregistrarea 1), dac ea exist.
Aflarea nregistrrii curente dintr-o b.d. (deci a coninutului indicatorului de
nregistrri) se face folosind funcia RECNO( ).
Sintaxa: RECNO([<expN>])
Funcia returneaz un rezultat numeric reprezentnd numrul nregistrrii curente
din b.d. deschis n zona de lucru <expN>. Dac <expN> lipsete atunci funcia se refer
la b.d. activ.
Exemplu:
USE AGENDA
?RECNO( )
1
LIST NEXT 2

?RECNO( )
2
Schimbarea nregistrrii curente se realizeaz cu ajutorul cumenzilor: GOTO,
SKIP.
Comanda GO sau GOTO poziioneaz indicatorul de nregistrri pe o anumit
nregistrare dintr-o b.d. (GO i GOTO sunt identice).
Sintaxa: GO | GOTO [RECORD] <expN1> [n <expN2>]
GO | GOTO TOP | BOTTOM [IN <expN2>]
Prima form are ca efect poziionarea indicatorului de nregistrri di b.d. sau din
zona de lucru <expN2> pe nregistrarea cu numrul <expN1>.Absena clauzei IN
determin referirea la b.d. activ.
Clauza RECORD este opional, prezena ei neavnd nici un efect; ea se introduce
pentru claritatea programului.
Forma a doua a comenzii se folosete pentru poziionarea indicatorului de
nregistrri la extremele b.d. (la nceputul sau sfritul acesteia).
Clauza TOP se folosete pentru poziionarea pe prima nregistrare, pe cnd
BOTTOM determin poziionarea pe ultima nregistrare a b.d.
Urmtoarele comenzi sunt echivalente:
GO 1
GOTO 1
GO RECORD 1
GO TOP
GOTO TOP IN SELECTED( )
Un alt tip de deplasare cu indicatorul de nregistrri este realizat cu ajutorul
comenzii SKIP. Aceasta mut indicatorul de nregistrri peste un numr de nregistrri
relativ la nregistrarea curent.
Sintaxa: SKIP [<expN1> | | <expN2>]
unde <expN1> reprezint numrul de nregistrri peste care se sare (cu indicatorul
de nregistrri). Acesta poate fi att un numr pozitiv (se sare spre o nregistrare cu un
numr de nregistrare mai mare), ct i negativ (se sare spre o nregistrare anterioar celei
curente). <expN2> specific zona de lucru n care este deschis b.d.
Dac se sare peste ultima nregistrare a b.d., indicatorul de nregistrri va conine
numrul de nregistrri din b.d.+1, iar funcia EOF( ) va returna valoarea .T.; n cazul
saltului naintea primei nregistrri funcia BOF( ) va returna valoarea .T.
Urmtoarele comenzi sunt echivalente:
SKIP
SKIP 1
SKIP IN SELECT( )
GOTO RECORD RECNO( )+1
Funciile EOF( ) i BOF( )
Sintaxa: EOF( [<expN>] )
BOF( [<expN>] )
testeaz dac indicatorul de nregistrri se afl la sfritul, respectiv la nceputul
b.d. active sau a celei specificate ca parametru.
Numrul de nregistrri dintr-o b.d. este dat de funcia RECCOUNT( ).
Sintax: RECCOUNT( [<expN>] )
Exemplu:
USE AGENDA
?RECNO( )
1
SKIP 3

?RECNO( )
4
GO TOP
?RECNO( )
1
SKIP 2
?BOF( )
.T.
7. VIZUALIZAREA CONINUTULUI UNEI BAZE DE DATE
Afiarea coninutului b.d. se poate face pe ecran, la imprimant sau ntr-un fiier
de pe disc folosind comenzile LIST i DISPLAY.
Sintaxa: DISPLAY[ [FIELDS] <lista de cmpuri>]
[<domeniu>] [FOR <expL1>] [WHILE <expL2>]
[OFF]
[TO PRINTER | TO FILE <fiier>]
[NOCONSOLE]
Afiarea informaiilor se face n urmtorul format:
- prima linie reprezint lista cmpurilor identificate prin numele acestora;
- urmtoarele linii reprezint nregistrri din b.d., n cadrul crora cmpurile sunt
afiate unul lng altul.
Pe prima poziie se afieaz numrul de ordine al nregistrrii n b.d.
Clauza FIELDS se folosete cu scopul de a afia doar cmpurile specificate n
<lista de cmpuri>, n ordinea apariiei lor n aceast list. Absena acestei clauze
determin afiarea tuturor cmpurilor b.d., n ordinea n care apar acestea n structura b.d.
<domeniu>, FOR, WHILE determin domeniul nregistrrilor ce vor fi afiate.
Dac aceste clauze lipsesc se va afia doar nregistrarea curent, acesta fiind domeniul
implicit al nregistrrilor, pentru comanda DISPLAY.
Prezena clauzei OFF determin dispariia din formatul de afiare a coloanei 0 (nu
se mai afieaz numrul de ordine).
Prezena clauzei NONCONSOLE oprete afiarea pe ecran.
Se poate face afiarea i la imprimant, dac se folosete clauza TO PRINTER,
sau n fiierul <fiier>, dac se folosete clauza TO FILE.
Comanda LIST este asemntoare cu DISPLAY (are aceeai sintax, cu aceleai
semnificaii ale clauzelor) cu urmtoarele diferene:
comanda DISPLAY afieaz doar nregistrarea curent, pe cnd comanda LIST
afieaz toate nregistrrile;
comanda DISPLAY are ca efect afiarea coninutului b.d. ecran cu ecran, trecerea de
la un ecran la altul fcndu-se dup apsarea unei taste, la comanda LIST afiarea se
face cu defilare, pauza dintre ecrane lipsind;
LIST nu afieaza nregistrrile marcate pentru tergere cnd avem SET DELETED
ON, pe cnd DISPLAY le afieaz i pe acestea. Pentru ca denumirile cmpurilor s
nu mai apar la afiare, se folosete comanda
SET HEADING ON|OFF
unde ON determin afiarea antetului iar OFF determin inhibarea afirii. Opiunea
implicit este ON.
Exemplu:
USE AGENDA

LIST
GO TO 3
LIST REST
GO TOP
DIS PLAY
DISPLAY NEXT 3
LIST ALL FOR NUME >P
DISPLAY FIELDS NUME, PRENUME
8. ADUGAREA DE NREGISTRRI LA O BAZ DE DATE
Adugarea de nregistrri se poate face n dou moduri, n funcie de poziia pe
care o va ocupa noua nregistrare n b.d.:
adgarea de nregistrri noi la sfritul b.d.;
introducerea de nregistrri noi n interiorul b.d.
Comanda APPEND adaug nregistrri la sfritul b.d. deschise n zona de lucru
curent.
sintaxa:
APPEND [BLANK]
Comanda APPEND fr clauza BLANK determin deschiderea unei ferestre de
edtiare n care utilizatorul poate introduce cmp cu cmp informaiile nregistrrii
(nregistrrilor) ce se vor adga. Terminarea introducerii tuturor nregistrrilor se
realizeaz apsnd simultan tastele Ctrl i End, fereastra de editare nchizndu-se dup
aceasta.
O form deosebit a comenzii APPEND se obine folosind clauza BLANK.
Comanda APPEND BLANK are ca efect adugarea unei noi nregistrri blank la
sfritul b.d., urmnd ca informaia util s se ncarce mai trziu, prin alte comenzi.
nregistrarea blank este nregistrarea n care toate cmpurile sunt inializate cu spaii
(CHR(#)).
Adugarea de nregistrri la sfritul unei b.d. cnd coninutul este preluat dintr-un
alt fiier se relizeaz cu comanda APPEND FROM care are urmtoarea sintax:
APPEND FROM <fiier>
[FIELDS <lista cmpuri>]
[FOR <expL>]
unde <fiier> reprezint numele fiierului din care se preiau nregistrrile ce se
vor aduga la bza de date. Dac nu se specific numele fiierului, trebuie specificat
clauza ?, astfel se ofer utilizatorului posibilitatea alegerii fiierului printr-o fereastr de
dialog.
Dac se dorete ca baza de date <fiier> s se preia doar anumite cmpuri, se va
include clauza FIELDS, n care <lista cmpuri> reprezint lista cmpurilor ce se vor
copia, separate prin virgul.
Pentru a se prelua din fiier doar anumite nregistrri, se va specifica domeniul
acestora prin clauza FOR.
ex.:
USE agenda
APPEND
APPEND BLANK
COPY STRU TO ag1 FIELDS nume, prenume
USE
USE ag1
APPEND FROM agenda FOR nume <d

Cea de-a doua metod de adugare a unei nregistrri noi la o b.d. o reprezinta
inserarea nregistrrii n interiorul b.d. folosind comanda INSERT.
sintaxa:
INSERT [BEFORE][BLANK]
are ca efect inserarea unei nregistrri noi, dup nregistrarea curent.
Dac se specific clauza BLANK se adaug o nregistrare blank, altfel se intr
ntr-o fereastr de editare de noi nregistrri asemntoare ferestrei de la comanda
APPEND.
Clauza BEFORE determin adugarea unei nregistrri noi naintea nregistrrii
curente, astfel:

NREGISTRARE NOU

nregistrare curent

INSERT

9. MODIFICAREA CONINUTULUI UNEI BAZE DE DATE


Modificarea informaiilor stocate ntr-o b.d. se realizeaz cu ajutorul comenzilor
CHANGE, EDIT, BROWSE, i REPLACE. Primele trei comenzi nu modific propriuzis coninutul b.d. ci deschid o fereastr de editare n care utilizatorul va modifica
informaiile din b.d. Comenzile CHANGE i EDIT sunt identice, ele difer de comanda
BROWSE doar prin modul de organizare pe ecran a ferestrei corespunztoare.
sintaxa:CHANGE|EDIT
[FIELDS<lista cmpurilor>]
[<domeniu>][FOR<expL1][WHILE<expL2>]
[FREEZE <cmp>]
[NOAPPEND][NOCLEAR][NODELETE]
[NOEDIT][NOMODIFY]
[VALID[:F]<exp1>[ERROR<expC1>]]
[WHEN<expL1>]
WIDTH<expN1>]
Ieirea din fereastra de editare i salvarea modificrilor se face folosind combinaia de
taste Ctr=?+End. Dac nu se dorete salvarea se va folosi ieirea cu tastele Ctrl+Q.
Clauza FIELDS are ca efect afiarea spre meditare doar a cmpurilor specificate n <list
cmpuri>, n ordinea apatiiei lor n list.
<domeniu>, FOR, WHILE specific domeniul nregistrrilor ce vor fi accesibile spre
editare. Clauza FREEZE se folosete pentru a selecta pentru modificare un singur cmp,
restul fiind doar afiate n fereastra de editare, fr a permite modificarea lor. Clauza
NOAPPEND oprete utilizatorul de a aduga noi nregistrri din fereastra de editare.
Clauza NODELETE nu permite tergerea nregistrrilor din b.d. NOEDIT i
NOMODIFY se exclud reciproc, nu permit utilizatorului modificarea nregistrrilor, ci
doar vizualizarea acestora, dar nu presupun protecie la tergere. Clauza [VALID [F:]
<exp1>[ERROR<expC1>>]] permite validarea nregistrrii dup modificare. Astfel, dup
ce iese din editarea nregistrrii se evalueaz <exp1> ca fiind .T. dac datele introduse

sunt corecte, altfel aceasta se consider .F., findu-se mesajul de eroare <expC1> dac
clauza ERROR apare, sau mesajul implicit de eroare altfel. :F foreaz evaluarea <exp1>
chiar dac nu s-au modificat valorile din nregistrare, ci doar s-a trecut prin ea.
Clauza WHEN perminte intrarea n editare doar dac <expL1> este evaluat ca .T.
Clauza WIDTH limiteaz numrul de caractere afiate, fr a efectua limea cmpului n
b.d.
Comanda BROWSE
Sintaxa: BROWSE
[FIELDS <lista cmpuri>]
[FOR <expL1>]
[FREEZE]
[NOAPPEND] [NOCLEAR] [NODELETE]
[NOEDIT] [NOMODIFY]
[VALID [:F] <exp1>[ERROR<expC1>]]
[WHEN<expL1>]
[WIDTH<expN1>]
Semnificaia clauzelor este aceeai ca la comanda CHANGE.
Modificarea coninutului unei b.d. se poate face i cu comanda REPLACE, ns
aceasta nu deschide o fereastr de editare, ci realizeaz prupiu-zis actualizarea b.d. cu
datele precizate prin comand.
Sintaxa: REPLACE <cmp1> WITH <expr1>
[,<cmp2> WITH <expr2>]
[<domeniu>] [FOR<expL1>] [WHILE<expL2>]
Comanda nlocuiete vechea valoare din cmpul <cmp1> cu valoarea rezultat din
evaluarea expresiei <expr1> ,valoarea din <cmp2> cu <expr2> etc.
Pentru cmpuri numerice, dac nu se reuete ncadrarea valorii expresiei n cmpul
respectiv, acesta va fi umplut cu asterixuri.
<domeniu> FOR, WHILE specific domeniul nregistrrilor la care se refer comanda,
domeniul implicit fiind nregistrarea curent.
Exemplu:
USE agenda
REPLACE nume WITH UPPER (nume), prenumeWITH PROPER
(prenume) ALL
BROWSE FIELDS nume, prenume FOR nr_telefon>320000
10. TERGEREA NREGISTRRILOR DINTR-O BAZ DE DATE
tergerea unei nregistrri se poate realiza la dou nivele i anume:
la nivel logic nregistrarea nu este propriu-zis tears, ci ea este marcat pentru
tergere, anumite comenzi i funcii considernd aceste nregistrri absente di fiierul b.d.,
existnd ns posibilitatea ca informaia coninut n nregistrare s poat fi recuperat;
la nivel fizic nregistrarea este tears efectiv din b.d., ea nemaiputnd fi recuperat.
Marcarea pentru tergere a uneia sau a mai multor nregistrri se realizeaz cu
ajutorul comenzii DELETE.
Sintaxa: DELETE
[<domeniu>] [FOR <expL1>] [WHILE <expL2>]
unde <domeniu>,FOR, WHILE identific nregistrrile ce vor fi marcate pentru tergere.
Domeniul implicit al comenzii DELETE este nregistrarea curent.
Accesul la nregistrrile marcate pentru tergere este controlat de comanda SET
DELETED.

Sintaxa: SET DELETED ON | OFF


unde opiunea ON determin ca n nregistrrile marcate pentru tergere s nu poat fi
folosit de comenzile care folosesc domeniul nregistrrilor. Starea iniial este OFF.
Comenzile care accioneaz asupra unei singure nregistrri sau care au ca domeniu
implicit nregistrarea curent nu sunt afectate de aceast comand.
n interiorul unui program marcajul de tergere a unei nregistrri se face cu
funcia DELETED( ). Aceasta returneaz valoarea logic .T. dac nregistrarea curent
este marcat pentru tergere.
Sintaxa: DELETED( [<expN>] )
unde <expN> reprezint zona de lucru n care este deschis b.d. n cazul n care funcia se
refer la alt b.d. dect cea activ.
nlturarea marcajului pentru tergere se realizeaz cu comanda RECALL; dup
ce marcajul a fost ndeprtat nregistrarea devine accesibil pentru toate comenzile.
Sintaxa: RECALL[<domeniul>] [FOR<expL1>] [WHILE<expL2>]
nregistrrile care nu sunt marcate pentru tergere nu sunt afectate de aceast
comand; domeniul implicit al comenzii RECALL este nregistrarea curent.
Pentru tergerea la nivel fizic se folosete comanda PACK.
Sintaxa: PACK
Comanda realizeaz tergerea fizic a tuturor nregistrrilor marcate pentru tergere din
b.d.
Dup aplicarea comenzii PACK asupra unei b.d. nregistrrile nu mai pot fi fcute.
tergerile sunt permanente.
O alt comand cu privire la tergerea nregistrrilor din b.d. este comanda ZAP.
Sintaxa:ZAP
Comanda terge fizic toate nregistrrile din b.d. activ, fiind echivalent cu secvena de
instruciuni
DELETE ALL
PACK
Diferena const n faptul ca ZAP este mai rapid.
Dup aplicarea comenzii ZAP asupra unei b.d. nregistrrile nu mai pot fi refcute.
tergerile sunt permanente.
11. MANIPULAREA CMPURILOR UNEI BAZE DE DATE
Accesul la cmpurile unei b.d. este controlat de comanda SET FIELDS.
Sintaxa: SET FIELDS ON | OFF
SET FIELDS TO [[<cmp1>[<cmp2>]] | ALL]
unde <cmp1>,<cmp2>, reprezint lista cmpurilor ce pot fi accesate n cazul SET
FIELDS ON. SET FIELDS TO ALL permite accesul la toate cmpurile, chiar dac
starea lui SET FIELDS este ON. SET FIELDS TO face ca lista cmpurilor s fie vid,
deci nici un cmp nu va putea fi accesat n cazul SET FIELDS ON.
Pentru a se reveni la accesul tuturor cmpurilor se introduce una dintre comenzile:
SET FIELDS TO ALL sau
SET FIELDS OFF
Numrul cmpurilor dintr-o b.d. este dat de funcia FCOUNT ( [<expN>] ) unde
<expN> reprezint zona de lucru n care este deschis b.d. (dac nu se specific, se
consider c funcia se refer la b.d. deschis n zona de lucru curent). Dac n zona de
lucru specificat nu este deschis nici o b.d. funcia va returna valoarea 0.

Funcia FIELDS( ) returneaz numele unui cmp dintr-o b.d., identificat prin
numrul cmpului n cadrul structurii b.d.
Sintaxa: FIELDS(<expN1>[,<expN2>] )
unde <expN1> specific numrul cmpului, iar <expN2> identific zona de lucru n care
se afl b.d. (dac nu se specific, funcia se refer la zona de lucru curent). Funcia
returneaz un ir de caractere coninnd numele cmpului specificat, scri cu majuscule. n
cazul n care numrul de ordine al cmpului specificat este mai mare dect numrul total
de cmpuri al b.d., funcia va returna irul vid de caractere.
Funcia FSIZE( ) returneaz mrimea unui cmp al unei b.d., specificat prin
numele su.
Sintaxa: FSIZE (<expC1>[,<expN>] )
unde <expC1> este un ir de caractere ce reprezint numele cmpului, <expN> specific
zona de lucru. Rezultatul este de tip numeric.
12. ACCESUL LA NREGISTRRI
n afar de controlul asupra nregistrrilor exercitat cu ajutorul comenzilor de
tergere, mai exist o metod de control a accesului la informaiile din nregistrri.
Aceast metod este dat de comanda SET FILTER.
Sintaxa: SET FILTER TO[<expL>]
Comanda determin ca n b.d. s apar doar nregistrrile care ndeplinesc condiia
<expL>.
SET FILTER TO fr condiie face ca toate nregistrrile din b.d. s poat fi
accesate.
Pentru a afla condiia condiia de accesare a nregistrrilor (expresia filtru) se folosete
funcia FILTER.
Sintaxa: FILTER(<expN>)
unde <expN> specific zona de lucru n care este deschis b.d.
Rezultatul funciei este un ir de caractere reprezenrnd expresia filtru stabilit de
comanda SET FILTER.
Exemplu:
SET FILTER TO data_naterii>{03/02/1981}
LIST
13. CUTAREA NREGISTRRILOR NTR-O BAZ DE DATE
n cazul n care dorim s gsim o nregistrare care s satisfac anumite condiii,
putem folosi comanda LOCATE.
Sintaxa: LOCATE FOR<expL1>
[<domeniu>] [WHILE<expL2>]
Comanda caut prima nregistrare care respect condiia <expL1> n b.d. activ.
Domeniul nregistrrilor care se testeaz este dat de clauzele <domeniu> i WHILE,
domeniul implicit fiind ALL. n caz de reuit, adic la gsirea unei nregistrri care
respect condiia <expL1>, indicatorul de nregistrri se poziioneaz pe nregistrarea
respectiv, funcia FOUND ( ) va returna valoarea .T. iar funcia EOF( ) va returna
valoarea .F. n caz contrar, indicatorul de nregistrri va fi poziionat dup ultima
nregistrare (numrul total de nregistrri+1), FOUND( ) va returna .F. iar EOF( ) va
returna .T.

ntr-o b.d. pot exista mai multe nregistrri care respect o condiie dat. Prima
dintre acestea va fi gsit folosind comanda LOCATE, urmtoarele vor fi gsite folosind
comanda CONTINUE.
Sintaxa: CONTINUE
Comanda gsete urmtoarea nregistrare care respect condiiile specificate n ultima
comand LOCATE aplicat b.d. active.
Testarea reuitei sau nereuitei cutrii se face cu funciile RECNO( ), FOUND( )
i EOF( ).
Funcia FOUND( )
Sintaxa: FOUND( [<expN>] )
este folosit pentru testarea rezultatului unei cutri n b.d. (eventual specificat prin zona
de lucru <expN>). Ea returneaz .T. dac s-a gsit o nregistrare i .F. dac nu s-a gsit
nici o nregistrare care s satisfac condiiile impuse de LOCATE.
14. ORDONAREA UNEI BAZE DE DATE
O b.d. este ordonat dup un anumit vriteriu, dac fiecare nregistrare a acesteia
respect criteriu dat, n raport cu celelalte nregistrri. Criteriu de comparaie ntre dou
nregistrri este format dintr-un operator relaional mai mic (<) sau mai mare (>) care se
aplic la dou valori ale unei expresii, fiecare corespunznd uneia dintre nregistrrile de
comparat. Astfel, compararea a dou nregistrri se reduce la compararea valorilor
expresiei respective.
Expresia poart numele de cheie de ordonare.
n FoxPro exist dou metode de ordonare a unei b.d. i anume:
ordonarea propriu-zis a b.d. prin schimbarea ntre ele a nregistrrilor, dup un
anumit logaritm, pn cnd acestea sunt n ordinea dorit. n acest caz se obine o
nou b.d. care conine aceleai nregistrri ca i cea de la care s-a pornit, dar n
ordinea dorit;
indexarea unei b.d., aceasta crearea unui nou fiier care conine informaii cu privire
la ordinea nregistrrilor n b.d. i n acest caz se obine un fiier nou, fiierul index,
dar acesta nu conine nregistrrile b.d., ci numai memoreaz ordinea acestora.
14.1 SORTAREA BAZELOR DE DATE
Sortarea bayelor de date se realiyeay cu comanda SORT.
sintaxa:
SORT TO <fiier> ON <cmp>[/A|/D][/C]]
[,<cmp>[/A|/D][/C]]
[ASCENDING|DESCENDING]
[<domeniu>] [FOR<expL1>] [WHILE<expL2>]
[FIELDS <lista cmpuri>]
Comanda sorteaz b.d. activ creind o nou b.d. n care sunt depuse nregistrrile
selectate n ordinea specificat. Baza de date nou va conine cmpurile specificate la
clauza FIELDS, sau toate cmpurile, n cazul n care aceast clauz lipsete. Noua b.d. va
purta numele <fiier>, la care se adaug n mod implicit extensia .dbf (dac nu se
specific explicit alta).
Cheia de ordonare este dat de cmpurile <cmp1>, <cmp2>, specificate dup
clauza ON. Clauzele /A i /D sunt asociate cmpului dup care acestea urmeaz i
specific tipul de ordonare pentru cmpul respectiv: A cresctor i D descresctor.
Dac toate cmpurile din list sunt egale pentru cele dou nregistrri care se compar, se
pstreaz ordinea iniial din b.d.

Clauza /C se folosete pentru cmpurile de tip ir de caractere pentru a face


compararea acestor cmpuri insensibil la tipul literelor (majuscule sau minuscule).
Implicit, tipul literelor este luat n consideraie.
Pentru specificarea a dou clauze dup un cmp, se folosesc construciile /AC
sau /DC.
Clauzele ASCENDING i DESCENDING sunt similare clauzelor /A i /D, numai
c se refer la toate cmpurile din list. n lipsa lor, ordinea implicit este ASCENDING
(cresctoare). Clauzele asociate cmpurilor (/A, /D) au prioritate fa de clauzele
ASCENDING i DESCENDING.
<domeniu>, FOR i WHILE selecteaz nregistrrile ce se vor ordona i vor fi
trecute n noua b.d.
Exemplu:
USE agenda
SORT TO ag_ord ON nume /ac, prenume /dc
USE ag_ord IN 2
SELECT 2
LIST
14.2 INDEXAREA BAZELOR DE DATE
Indexarea unei b.d. presupune crearea unui fiier nou, numit fiier index asociat,
n care se nregistreay ordinea nregistrrilor din b.d. Accesul la o anumit ntrgistrare se
face prin intermediul fiierului index.
Fiierele index ce pot fi asociate unei b.d. pot fi de urmtoarele dou tipuri:
fiiere index simple (cu extensia .IDX), care conin o singur cheie de ordonare;
fiiere index compuse (cu extensia .CDX), care memoreaz mai multe chei de
ordonare, numite etichete, una singur fiind activ la un moment dat i anume eticheta
activ.
O b.d. poate avea mai multe fiiere index asociate, dar numai unul singur va fi
activ la un moment dat, acesta fiind numit fiierul index activ. Ordinea n care este
aceast b.d. este dat de fiierul index activ, iar dac acesta este compus, de eticheta
activ din fiierul index respectiv.
Crearea unui fiier index este executat de comanda INDEX.
sintaxa: INDEX ON <expr> TO <fiier.idx> TAG <nume etichet> [OF <fiier.cdx>]
[FOR<expL>]
[ASCENDING DESCENDING]
[UNIQUE]
[ADDITIVE]
Cheia de ordonare (acum se numete cheie de indexare) este specificat prin
<expr>, aceasta coninnd cmpuri ale b.d. active.
Un fiier index compus poate conine mai multe chei de indexare, fiecare
corespunznd unui criteriu de ordonare a b.d. Fiecare criteriu este identificat prin eticheta
asociat, ce se specific n interiorul comenzii index prin clauza TAG, unde <nume
etichet> reprezint numele etichetei respective.
Fiierele compuse sunt, la rndul lor de dou tipuri:
structurale sunt deschise i asociate automat b.d. odat cu deschiderea acesteia
folosind comanda USE. Acestea au aceleai nume cu b.d., extensia fiind .CDX i sunt
create folosind clauza TAG, fr introducerea unui nume de fiier index cu clauza OF:
nestructurale nu sunt deschise automat odat cu dechiderea b.d. Ele poart alt nume
dect cel al b.d., numele specificat n clauza OF: <fiier.cdx>.

Clauza FOR determin ca numai nregistrrile care respect <expL> s poat fi


accesate prin fiierul index respectiv. ASCENDINDG sau DESCENDING se folosesc
pentru a preciza modul de ordonare a b.d., asociat fiierului index.
Clauza UNIQUE dac avem dou sau mai multe nregistrri cu aceeai cheie de
indexare, determin accesul doar la prima nregistrare i blocarea accesului la celelalte.
Clauza ADDITIVE dac fiierul index compus exist, eticheta specificat va fi
adugat la celelalte etichete ale fiierului index.
Odat cu deschiderea b.d. se pot deschide i o serie de fiiere index asociate b.d.,
incluznd clauza INDEX n comanda USE.
sintaxa: USE [<fiier> ?]
[INDEX <lista fiierelor index> ?]
[ORDER[<expN> <fiier.idx> [TAG]<nume etichet>[OF <fiier.cdx>]
[ASCENDING DESCENDING]]]]
La deschiderea b.d. <fiier> se vor deschide i fiierele index din <lista fiiere
index>, care trebuie s fie deja create. n specificarea acestor fiiere nu trebuie inclus i
extensia; dac nu exist pericol de confuzie, fiierele vor fi separate prin virgul. Dca se
nlocuiete lista de fiiere cu ? se va afia o ferestr de dialog de unde utilizatorul poate
selecta aceste fiiere. Dac nu se specific clauza ORDER, primul fiier index din list va
fi cel activ. Dac acesta este fiier index compus, nregistrrile vor fi accesate n ordinea
fizic din b.d.
Clauza ORDER determin fiierul index simplu ce va deveni activ sau eticheta
dintr-un fiier index compus ce va deveni activ astfel:
prin ORDER<expN>, unde expresia numeric reprezint numrul de ordine al
fiierului index simplu sau al teichetei din fiierul index compus. Numrarea se face
astfel: mai nti se numr fiierele index simple, n ordinea n care apar n list, apoi
se numr etichetele de la fiierul index structural, n ordinea definirii acestora iar
ultimile se vor numra etichetele, n ordinea definirii lor, din fiierele index compuse,
n ordinea apariiei acestora n list. Dac <expN> este 0 se va folosi ordinea fizic a
nregistrrilor din b.d.;
prin ORDER <fiier.idx>, unde fiierul index simplu <fiier.idx> va deveni activ;
prin ORDER [[TAG<nume etichet>][OF<fiier.cdx>]], n care eticheta cu numele
<nume etichet> din fiierul index structural sau oricare alt fiier index compus va
deveni activ. Dac se dorete selectarea unei etichete dintr-un fiier index compus
nestructural i exist o etichet cu acelai nume n fiierul index structural, atunci se
va folosi i clauza OF, n care <fiier.cdx> reprezint fiierul n care gsim eticheta
respectiv.
Clauzele ASCENDIN i DESCENDING specific ordinea cresctoare sau
descresctoare folosit pentru ordonarea nregistrrilor.
Dac se dorete deschiderea unor fiiere pentru b.d. curent dup ce aceasta a fost
deschis, se folosete comanda SET INDEX.
sintaxa: SET INDEX TO[<lista fiiere index> ?]
[OEDER<expN> <fiier.idx> TAG<nume etichet>[OF<fiier.cdx>]
[ASCENDING DESCENDING]][ADITIVE]
Se vor deschide toate fiierele index specificate n <lista fiiere index> sau
selectate din fereastra de dialog deschis de ?.
Noua list de fiiere o va nlocui pe cea veche, dac nu se specific clauza
ADDITIVE. n prezena acesteia, noua list se adaug la cea veche.
Forma SET INDEX TO nchide toate fiierele index din zona de lucru curent,
excepie fcnd fiierul index structurat.

Avnd deschise mai multe fiiere index simple sau compuse, pentru a selecta alt
fiier index activ sau alt etichet activ se folosete comanda SET ORDER.
sintaxa: SER ORDER TO
[<expN1> <fiier.idx> [TAG]<nume etichet>[OF<fiier.cdx>]
[IN<expN2>]
[ASCENDING DESCENDING]
Clauza IN se folosete atunci cnd comanda se folosete la alt b.d. dect cea
activ, aflat n zona de lucru <expN2>.
nchiderea fiierelor index se face folosind comanda CLOSE INDEX, care
nchide toate fiierele index deschise n zona de lucru curent, n afara celui structural
sau:
CLOSE ALL, USE, CLOSE DATABASES.
Exemplu:
USE agenda
INDEX ON nume TO agenda1 && creaz fiierul agenda1 fiierul index simplu cu
cheia de indexare nume.
Fiier index compus structurat cu cheile de indexare nume, prenume, numr de telefon
INDEX ON nume TAG nume
INDEX ON prenume TAG prenume
INDEX ON numr de telefon TAG numr de telefon
SET ORDER TO 3
&& stabilete indexul activ ca fiind prenumele
15. EXTRAGEREA INFORMAIILOR STATISTICE DIN BAZA DE DATE
S presupunem c avem b.d. agenda.dbf n care am stocat informaii referitoare la
persoanele cunoscute (nume, prenume, data naterii, sexul, numrul de telefon, adresa,
etc.). La 1 martie dorim s oferim mrioare tuturor fetelor cunoscute, aadar ne
intereseaz numrul de fete. Aceasta se poate rezolva simplu, cu ajutorul comenzii
COUNT.
sintaxa: COUNT [<domeniu>][FOR<expL1>][WHILE<expL2>][TO<variabil>]
Comanda numr nregistrrile din domeniul specificat prin <domeniu>, FOR i
WHILE (domeniul implicit fiind ALL) i depune rezultatul n variabila <variabil>, care
va fi creat n cazul n care nu exist.
Exemplu:
CLOSE ALL
USE agenda
COUNT FOR sex=.T. TO nrbiei
?N BAZA DE DATE AVEM, nrbiei, BAIETI
N BAZA DE DATE AVEM 3 BIEI
USE
Un alt tip de calcul ce se poate efectua asupra unei b.d. este sumarea unor cmpuri
numerice ale b.d. cu comanda SUM.
sintaxa: SUM[<lista expresii>]
[<domeniu>][FOR<expL1>][WHILE<expL2>]
[TO<lista variabile>]
<lista expresii> este format din expresii care conin cmpuri numerice ale b.d.
Valorile acestor expresii sunt sumate pentru toate nregistrrile selectate prin <domeniu>,

FOR i WHILE. Dac lista lipsete, se vor suma toate cmpurile numerice ale b.d.
Rezultatele obinute vor fi depuse n variabilele respective din <lista variabile>.
O comand asemntoare cu SUM este AVERAGE.
sintaxa: AVERAGE [<lista expresii>]
[<domeniu>][FOR<expL1>][WHILE<expL2>]
[TO<list variabile>]
AVERAGE calculeaz media aritmetic a valorilor expresiilor din <lista expresii>.