Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » referate » informatica » baze de date
Ordonarea inregistrarilor din tabele - FoxPro

Ordonarea inregistrarilor din tabele - FoxPro


Ordonarea inregistrarilor din tabele - FoxPro

In tabele, de regula, articolele sunt incarcate aleator, prelucrarile ulterioare impunand reorganizarea acestora. Operatia de reorganizare este urmarea cererii de catre utilizatori a informatiei sub diferite forme si implica un consum de timp si resurse de memorare suplimentare. Cele mai utilizate metode de reorganizare a articolelor din tabele sunt sortarea si indexarea.

1 Sortarea inregistrarilor din tabele

Sortarea este operatia prin care se obtine o noua tabela in care inregistrarile selectate sunt dispuse intr-o ordine specificata de utilizator. Practic, in noua tabela, are loc schimbarea intre ele a inregistrarilor dupa un anumit algoritm. Comanda folosita este SORT care are formatul general:

SORT TO <nume_tabela>ON <nume_camp1> [/A | /D] [/C][,<nume_camp2> [/A | /D] [/C] ]



[ASCENDING | DESCENDING][<domeniu>][FOR<expr_log1>][WHILE<expr_log2>]

[FIELDS <lista_campuri>| FIELDS LIKE <masca>| FIELDS EXCEPT <masca>] [NOOPTIMIZE]

Tabela care se va obtine trebuie specificata in clauza TO Ordinea in care articolele vor fi rescrise se stabileste prin clauza ON Aceasta clauza contine unul sau mai multe campuri din structura tabelei curente, campuri care devin "chei de sortare" (primara, secundara etc.).

Fiecarui camp cheie i se pot asocia parametrii suplimentari: /A (pentru sortarea crescatoare), /D (pentru sortare descrescatoare) si /C (pentru ignorarea prioritatii majusculelor fata de minuscule).

Clauzele ASCENDING si DESCENDING se aseamana cu parametrii /A si respectiv /D cu deosebirea ca ele actioneaza la nivel de inregistrare. Parametrii /A si /D au prioritate fata de clauzele ASCENDIG si respectiv DESCENDIG. Implicit, sortarea se realizeaza dupa clauza ASCENDING.

Implicit, sunt sortate toate articolele tabelei, dar prin folosirea clauzelor optionale (<domeniu>, FOR, WHILE, FIELDS) tabela rezultata prin sortare poate sa contina doar articolele care satisfac conditiile de selectie.

Exemplu : Plecand de la tabela student.dbf sa se obtina o noua tabela (sortstud.dbf) cu articolele sortate dupa specializare si oras, selectandu-se doar studentii cu media mai mare decat 8.50.

USE student

SORT ON specializ, oras TO sortstud FOR media >8.50

USE sortstud

BROWSE

Pe langa avantajele ce decurg din obtinerea rapida a informatiilor sub forma ceruta de utilizator intr-o tabela libera, sortarea prezinta si dezavantajul generarii unor informatii redundante consumand spatiul memorie disponibil.

2 Indexarea inregistrarilor din tabele

Spre deosebire de sortare, care creeaza o noua tabela, indexarea reprezinta modalitatea prin care se creeaza un nou fisier - numit fisier index - care nu contine articole, ci doar informatii privind ordinea de accesare a acestora. Practic, indexarea este o sortare virtuala a unei tabele, inregistrarile acesteia ramanand fizic nesortate. Indecsii reprezinta o cale mult mai eficienta decat sortare, permitand utilizatorilor vizualizarea si accesarea datelor dintr-un tabel intr-o anumita ordine. Fisierele index, atat timp cat sunt deschise, sunt permanent actualizate in functie de adaugarea, modificarea sau stergerea articolelor.

Comanda folosita este INDEX cu formatul general:

INDEX ON <expr>TO <nume_fisier_idx> | TAG <nume-eticheta>[OF <nume_fisier_cdx>]

[FOR <expr_log>][COMPACT][ASCENDING | DESCENDING][UNIQUE | CANDIDATE]

[ADDITIVE]

unde:

Clauza ON <expr>  precizeaza prin expresie ordinea de accesare a articolelor din tabela curenta; expresia poate fi de tip numeric, caracter si data calendaristica, incluzand campuri din tabela, functii, operatori, constante, variabile de memorie.

Clauza TO <nume_fisier_idx> permite crearea unui fisier index simplu cu extensia implicita .idx si cu numele specificat de utilizator; aceste fisiere sunt cunoscute sub numele de indecsi de sine statatori, deoarece fiecare fisier contine un singur index si este independent de celelalte; pentru o tabela pot fi definiti multi indecsi de sine statatori.

Clauza TAG <nume_eticheta> [OF <nume_fisier_cdx>] permite crearea fisierelor index compuse care pot stoca un numar nelimitat de expresii de indexare distincte, intr-un singur fisier. La randul lor fisierele compuse pot fi: structurale si nestructurale. Fisierele structurale se creeaza implicit prin clauza TAG <nume_eticheta>, au acelasi nume cu al tabelei la care sunt asociati si extensia implicita .cdx. Acest tip de fisier se deschide automat odata cu tabela corespunzatoare si se actualizeaza in functie de operatiile executate asupra tabelei. Fisierele nestructurale se creeaza cu ajutorul clauzei OF numele lor este diferit de cel al tabelei si este specificat explicit de catre utilizator, iar extensia implicita este .cdx.

Clauza FOR <expr_log> permite ca indexul creat sa actioneze ca un filtru asupra tabelei, fiind accesate numai inregistrarile care respecta conditia data de expresia logica.

Clauza COMPACT forteaza comprimarea indecsilor si in fisierele simple.


Clauzele ASCENDING | DESCENDING sunt operationale numai pentru fisierele compuse si stabilesc ordinea cheilor de accesare a inregistrarilor.

Clauza UNIQUE permite, in cazul tabelelor cu valori repetate ale cheii, sa se acceseze numai prima inregistrare din cele cu cheie duplicata.

Clauza CANDIDATE creeaza un index candidat si este operationala numai cand se creeaza un index structural, altfel VFP genereaza un mesaj de eroare.

Clauza ADDITIVE permite adaugarea la lista fisierelor index existente a indecsilor nou creati.

Asociate operatiei de indexare sunt si functiile: NDX(), CDX(), MDX(), TAG(), SYS(21), SYS(22) SYS(2021), KEY().

Functia NDX (<nr_fisier_index> [,<expr_n> | <expr_c>]) returneaza numele fisierului index simplu deschis in zona de lucru specificata si care corespunde numarului de ordine dat <nr_fisier_index>.

Functiile MDX() si CDX() sunt identice, au acelasi format cu functia NDX() si returneaza numele fisierului index compus .cdx deschis. Aceste functii necesita cel putin un parametru numeric astfel: 1 - pentru a returna numele indexului structural (daca acesta exista);2, 3 etc. - pentru a returna numele celorlalti indecsi compusi in ordinea deschiderii.

Toate aceste functii returneaza sirul vid daca numarul indexului depaseste numarul indecsilor deschisi.

Functia TAG() returneaza numele fiecarei etichete a indexului compus curent.

Functia KEY() returneaza cheia de indexare (expresia din clauza ON din comanda INDEX).

Exemplu: Sa se obtina un fisier index simplu nume.idx dupa cheia numest pentru studentii care locuiesc in Iasi: USE student

INDEX ON numest TO nume FOR oras = "iasi"

BROWSE

? ndx(1)  && afisarea numelui fisierului index simplu

C:.NUME.IDX

Exemplu : Sa se creeze un fisier compus structural cu etichetele: nume, medie si oras:

INDEX ON nume TAG nume

INDEX ON media TAG medie

INDEX ON oras TAG oras

? CDX(1)

C:.STUDENT.CDX

? MDX(1)

C:.STUDENT.CDX

INDEX ON media DESCENDING FOR oras = "iasi" TAG med_is

? tag(4) && afiseaza ultima eticheta creata

MED_IS

Exemplul : Sa se creeze un fisier index compus nestructural administratie.cdx care sa acceseze studentii de la specializarea "Adm. Publica", dar care nu sunt din orasul Iasi.

USE student

INDEX ON numest TAG nume;

OF administratie;

FOR specializ = "Adm. Publica" AND oras <> "iasi"

? cdx(1)

C:.STUDENT.CDX

? cdx(2)

C:.ADMINISTRATIE.CDX

Deschiderea si inchiderea indecsilor

Exista mai multe modalitati de deschidere a fisierelor index intre care amintim comenzile: USE, SET ORDER, SET INDEX

Comanda USE. Odata cu deschiderea tabelelor se pot deschide si fisierele index asociate acestora folosind clauza INDEX cu formatul :

USE <nume_fisier> | ?

[INDEX <lista_fisiere_index> | ? [ORDER [<expr_n> | <nume_fisier_idx> | [TAG] <nume_eticheta> [OF<nume_fisier_cdx>][ASCENDING | DESCENDING]]]]

in care:

<lista_fisiere_index> indica lista fisierelor index care vor fi deschise (in lista fisierele se separa prin virgula); daca nu se foloseste clauza ORDER fisierul activ va fi primul din lista;

Clauza ORDER precizeaza fisierul index simplu sau eticheta dintr-un fisier index compus ce va deveni activ /activa;

Clauzele ACSENDING | DESCENDING controleaza ordinea de accesare a inregistrarilor.

Comanda SET ORDER. Pentru a activa un alt fisier index sau o alta eticheta, dupa deschiderea tabelei se foloseste comanda SET ORDER cu formatul general:

SET ORDER TO [<expr_n1> | <nume_fisier_idx>| [TAG] <nume_eticheta> [OF <nume_fisier_cdx>] [IN <expr_n2> | <expr_c>] [ASCENDING | DESCENDING]]

Clauzele au acelasi rol ca si in cazul comenzilor USE si INDEX.

Exemplu: Sa se acceseze studentii dupa eticheta "oras":

USE student INDEX nume.idx, student.cdx, administratie.cdx

SET ORDER TO TAG oras

? TAG(1

Exemplul: Sa se acceseze tabela studenti.dbf prin fisierul index nestructural administratie.cdx:

USE student INDEX nume.idx, student.cdx, administratie.cdx

SET ORDER TO TAG nume OF administratie

BROWSE

Comanda SET INDEX. Pentru deschiderea ulterioara a unor fisiere index pentru tabela curenta se foloseste comanda SET INDEX cu formatul general:

SET INDEX TO [<lista_fisiere_index> | ? ][ORDER <expr_n> | <nume_fisier_ind>

| [TAG]<nume_eticheta>[OF<nume_fisier_cdx>][ASCENDING | DESCENDING]]

[ADDITIVE]

Prin aceasta comanda, implicit se vor deschide toate fisierele index specificate in lista de fisiere sau selectate din fereastra de dialog. Clauzele au acelasi rol ca si in cazul precedent cu precizarea ca ADDITIVE determina adaugarea fisierelor specificate la lista deja existenta. Comanda folosita fara clauze (SET INDEX TO) determina inchiderea tuturor fisierelor index din zona de lucru curenta cu exceptia fisierului index structural.

Comanda CLOSE INDEX permite inchiderea tuturor fisierelor index din zona de lucru curenta, cu exceptia celui structural.

Inchiderea fisierelor index se poate realiza si cu comenzile: CLOSE ALL, USE si CLOSE DATABASE.

Exploatarea tabelelor indexate trebuie facuta cu atentie deoarece daca dintr-o eroare de operare tabela este actualizata fara deschiderea fisierelor index, indecsii nu se actualizeaza si exploatarea ulterioara este incorecta. Daca se constata ca fisierul index este alterat sau nu este corect actualizat utilizatorul il poate regenera folosind comanda REINDEX. Prin aceasta comanda se refac toate fisierele index deschise si asociate tabelei curente.

Exemplu: Pentru actualizarea indecsilor nume.idx si administratie.cdx se va folosi secventa:

USE student INDEX nume.idx, administratie.cdx

REINDEX





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.