Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Foxpro


Qdidactic » stiinta & tehnica » informatica » foxpro
Ordonarea unei baze de date - sortarea bazelor de date



Ordonarea unei baze de date - sortarea bazelor de date



O b.d. este ordonata dupa un anumit criteriu, daca fiecare inregistrare a acesteia respecta criteriul dat, in raport cu celelalte inregistrari. Criteriul de comparatie intre doua inregistrari este format dintr-un operator relational mai mic('<') sau mai mare('>') care se aplica la doua valori ale unei expresii, fiecare corespunzand uneia dintre inregistrarile de comparat. Astfel compararea a doua inregistrari se reduce la compararea valorilor expresie respective.
Expresia poarta numele de cheie de ordonare.
In FoxPro exista doua metode de ordonare a unei b.d. si anume :
ordonarea propriu-zisa a b.d. prin schimbarea intre ele a inregistrarilor, dupa un anumit algoritm, pana cand acestea sunt in ordinea dorita. In acest caz se obtine o noua b.d. care contine aceleasi inregistrari ca si cea de la care s-a pornit, dar in ordinea dorita.
indexarea unei b.d., aceasta insemnand crearea unui nou fisier care contine informatii cu privire la ordinea inregistrarilor in b.d. Si in acest caz se obtine un fisier nou, fisierul index, dar acesta nu contine inregistrarile b.d. ci memoreaza numai ordinea acestora.


1 SORTAREA BAZELOR DE DATE


Se realizeaza cu comanda SORT.
sintaxa : SORT TO <fisier> ON <camp1> [ /A | /D] [ /C]
[,<camp2> [ /A | /D] [ /C] ]
[ASCENDING | DESCENDING ]
[<domeniu>] [ FOR <expL1>] [ WHILE <expL2>]
[FIELDS <lista campuri>]
Comanda sorteaza b.d. activa creand o noua b.d. in care sunt depuse inregistrarile selectate in ordinea specificata. Baza de date noua va contine campurile specificate la clauza FIELDS, sau toate campurile, in cazul in care aceasta clauza lipseste. Noua b.d. va purta numele <fisier>, la care se adauga in mod implicit extensia .dbf (daca nu se specifica explicit alta).
Cheia de ordonare este data de campurile <camp1>, <camp2>,. specificate dupa clauza ON . Clauzele /A si /D sunt asociate campului dupa care acestea urmeaza si specifica tipul de ordonare pentru campul respectiv: A - crescator si D - descrescator. Daca toate campurile din lista sunt egale pentru cele doua inregistrari care se compara , se pastreaza ordinea initiala din b.d.
Clauza / C se foloseste pentru campurile de tip sir de caractere pentru a face compararea acestor campuri insensibila la tipul literelor ( majuscule sau litere mici). Implicit , tipul literelor este luat in consideratie.
Pentru specificarea a doua clauze dupa un camp, se folosesc constructiile /AC sau /DC.
Clauzele ASCENDING si DESCENDING sunt similare clauzelor /A si /D , numai ca se refera la toate campurile din lista. In lipsa lor, ordinea implicita este ASCENDING (crescatoare). Clauzele asociate campurilor A, /D) au prioritate fata de clauzele ASCENDING si DESCENDING.
<domeniu>, FOR si WHILE selecteaza inregistrarile ce se vor ordona si vor fi trecute in noua b.d.
ex. :
USE agenda
SORT TO ag_ord ON nume /ac, prenume /dc
USE ag_ord IN 2
select 2
list




2 INDEXAREA BAZELOR DE DATE


Indexarea unei b.d. presupune crearea unui fisier nou, numit fisier index asociat, in care se memoreaza ordinea inregistrarilor din b.d. Accesul la o anumita inregistrare se face prin intermediul fisierului index.
Fisierele index ce pot fi asociate unei b.d. pot fi de urmatoarele doua tipuri
fisiere index simple (cu extensia .IDX), care contin o singura cheie de ordonare.
fisiere index compuse (cu extensia .CDX), care memoreaza mai multe chei de ordonare, numite etichete, una singura fiind activa la un moment date, si anume eticheta activa.
O b.d. poate avea mai multe fisiere index asociate, dar numai unul singur va fi activ la un moment dat, acesta fiind numit fisierul index activ. Ordinea in care este accesata b.d este data de fisierul index activ, iar daca acesta este compus, de eticheta activa din fisierul index respectiv.
Crearea unui fisier index este data de comanda INDEX.
sintaxa : INDEX ON <expr> TO <fisier.idx> | TAG <nume eticheta> [OF <fisier.cdx>]
[ FOR <exp L>]
[ ASCENDING | DESCENDING ]
[ UNIQUE ]
[ ADDITIVE ]
Cheia de ordonare (acum se numeste cheie de indexare) este specificata prin <expr>, aceasta continand campuri ale b.d. active.
Un fisier index compus poate contine mai multe chei de indexare, fiecare corespunzand unui criteriu de ordonare a b.d. Fiecare criteriu este identificat prin eticheta asociata, ce se specifica in interiorul comenzii index prin clauza TAG, unde <nume eticheta> reprezinta numele etichetei respective.
Fisierele compuse sunt la randul lor de doua tipuri
structurale - sunt deschise si asociate automat b.d. odata cu deschiderea acesteia folosind comanda USE. Aceste au acelasi nume cu b.d., extensia fiind .CDX si sunt create folosind clauza TAG, fara introducerea unui nume de fisier index cu clauza OF
nestructurale - nu sunt deschise automat odata cu deschiderea b.d. Ele poarta alt nume decat al b.d., numele specificat in clauza OF: <fisier . cdx>
Clauza FOR determina ca numai inregistrarile care respecta <exp L> sa poata fi accesate prin fisierul index respectiv. ASCENDING sau DESCENDING se folosesc pentru a preciza modul de ordonare a b.d , asociat fisierului index.
Clauza UNIQUE - daca avem doua sau mai multe inregistrari cu aceeasi cheie de indexare, determina accesul doar la prima inregistrare si blocarea accesului la celelalte.
Clauza ADDITIVE - daca fisierul index compus exista, eticheta specificata va fi adaugata la celelalte etichete ale fisierului index.
O data cu deschiderea unei b.d. se pot deschide si o serie de fisiere index asociate b.d., incluzand clauza INDEX in comanda USE.
sintaxa : USE [ <fisier> | ? ]

[INDEX <lista fisierelor index>
[ORDER [<exp N> | <fisier.idx> | [TAG ]<nume eticheta> [ OF <fisier. cdx>]
[ASCENDING | DESCENDING]]]]

La deschiderea b.d. <fisier> se vor deschide si fisierele index din <lista fisiere index>, care trebuie sa fie deja create. In specificarea acestor fisiere nu trebuie inclusa si extensia, daca nu exista pericol de confuzie, fisierele vor fi separate prin virgula.
Daca se inlocuieste lista de fisiere index cu ? se va afisa o fereastra de dialog de unde utilizatorul poate selecta aceste fisiere.
Daca nu se specifica clauza ORDER , primul fisier index din lista va fi cel activ. Daca acesta este fisier index compus, inregistrarile vor fi accesate in ordinea fizica din b.d
Clauza ORDER determina fisierul index simplu ce va deveni activ sau eticheta dintr-un fisier index compus ce va deveni activa astfel :
prin ORDER <exp N>, unde expresia numerica reprezinta numarul de ordine al fisierului index simplu sau al etichetei din fisierul index compus. Numararea se face astfel: mai intai se numara fisierele index simple, in ordinea in care apar in lista, apoi se numara etichetele din fisierul index structural, in ordinea definirii acestora iar ultimele se vor numara etichetele, in ordinea definirii lor, din fisierele index compuse , in ordinea aparitiei acestora in lista. Daca <exp N> este 0 se va folosi ordinea fizica a inregistrarilor din b.d
prin ORDER <fisier.idx>, unde fisierul index simplu <fisier.idx> va deveni activ.
prin ORDER [ [TAG <nume eticheta>] [ OF <fisier. cdx>]], in care eticheta cu numele <nume eticheta> din fisierul index structural sau oricare alt fisier index compus va deveni activa. Daca se doreste selectarea unei etichete dintr-un fisier index compus nestructural si exista o eticheta cu acelasi nume in fisierul index structural, atunci se va folosi si clauza OF, in care <fisier. cdx> reprezinta fisierul in care gasim eticheta respectiva.
Clauzele ASCENDING si DESCENDING specifica ordinea crescatoare sau descrescatoare folosita pentru ordonarea inregistrarilor.
Daca se doreste deschiderea unor fisiere pentru b.d. curenta ,dupa ce aceasta a fost deschisa, se foloseste comanda SET INDEX.
sintaxa : SET INDEX TO [<lista fisiere index> | ? ]
[ORDER <exp N> | <fisier.idx> | TAG <nume eticheta> [OF <fisier. cdx>
[ASCENDNG | DESCENDING] ] [ ADITIVE ]
Se vor deschide toate fisierele index specificate in <lista fisiere index> sau selectate din fereastra de dialog deschisa de ?.
Noua lista de fisiere o va inlocui pe cea veche, daca nu se specifica clauza ADITIVE. In prezenta acesteia, noua lista se adauga la cea veche.
Forma SET INDEX TO inchide toate fisierele index din zona de lucru curenta, exceptie facand fisierul index structurat.
Avand deschise mai multe fisiere index simple sau compuse, pentru a selecta alt fisier index activ sau alta eticheta activa, se foloseste comanda SET ORDER
sintaxa : SET ORDER TO
[<expN1> | <fisier.idx> | [ TAG ]<nume eticheta> [ OF <fisier. cdx>]
[IN <expN2>]
[ASCENDING | DESCENDING ]
Clauza IN se foloseste atunci cand comanda se refera la alta b.d. decat cea activa, aflata in zona de lucru <expN2>
Inchiderea fisierelor index se face folosind comanda
CLOSE INDEX, care inchide toate fisierele index deschise in zona de lucru curenta, in afara celui structural sau:
CLOSE ALL, USE, CLOSE DATABASES.
ex. :
USE agenda
INDEX ON nume TO agenda1 && creeaza fisierul agenda1 - fisier index simplu cu cheia de indexare nume
Fisier index compus structurat cu cheile de indexare nume, prenume, numar de telefon
INDEX ON nume TAG nume
INDEX ON prenume TAG prenume
INDEX ON nr_telefon TAG nr_telefon
SET ORDER TO 3 && stabileste indexul activ ca fiind prenumele




Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright