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. 4. Nume Popescu Toma Axente Tudor Prenume Dumitru Daniela Ionel Mihaela Telefon 321645 324586 ______ Data naterii 06/27/67 03/09/69 12/02/72 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

132478 09/13/68

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 3

.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: 5

?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: 6

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 2

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}) 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()

Ex.:

Ex.:

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 ONOFF 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 foxuser.dbf install.dbf DIRECTORY [ ] All files UNTITLED 8 <<Create>> <Cancel> FOXPRO

DRIVE

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 FILE <fiier>] TO [NONCONSOLE] LIST STRUCTURE [IN<expN> <expC>] [TO PRINTER FILE <fiier>] TO [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.

10

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 11

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 12

?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

13

?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 14

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 15

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 16

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. 17

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.

18

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.

19

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. 20

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>.

21

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.

22

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>,

23

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>.

24

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