Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Posibilitati de organizare a bazelor de date

Baze de date


Posibilitati de organizare a bazelor de date

Cautarea inregistrarilor intr-o baza de date

În FoxPro exista doua categorii de baze de date:



secventiala - articolele sun 222f51c t in ordinea introducerii lor, pentru a cauta un articol care satisface o conditie se va parcurge intreaga baza de date.

indexata - unei baze de date i se adauga o tabela de index in care apar informatii cu privire la ordinea inregistrarilor bazei de date (pointeri spre articole din BD originala ordonati in ordinea crescatoare, descrescatoare a unei chei). Pentru a cauta un articol care satisface o conditie se va parcurge baza de date in ordinea tabelei de index, fara a parcurge intreaga baza de date. Înlantuirea bazei de date bazata pe campuri cu acelasi nume e posibila.

Modalitati de cautare in baza de date neindexata

Se folosesc de regula daca cautarea nu trebuie sa fie rapida, se face rar si pentru baze de date cu numar mic de inregistrari. In FoxPro aceasta problema se rezolva cu ajutorul comenzii LOCATE ce are urmatoarea sintaxa:

LOCATE FOR <expL1> [<domeniu>] [WHILE <expL2>]

Comanda realizeaza o cautare secventiala a bazei de date curente, testand fiecare inregistrare care respecta conditia <expL1>. Domeniul inregistrarilor care se testeaza este dat de clauzele <domeniu> si WHILE, domeniul implicit fiind ALL.

In cazul in care s-a gasit o inregistrare care respecta conditia <expL1>, aceea inregistrare devine curenta, functia FOUND() va returna valoarea .T. iar functia EOF() va returna valoarea .F.

In caz contrar, indicatorul de inregistrari se va pozitiona dupa ultima inregistrare, functia FOUND() va returna .F. iar functia EOF() va returna .T.

Intr-o baza de date pot exista mai multe inregistrari ce respecta o conditie data. Prima dintre acestea va fi gasita folosind comanda LOCATE. Urmatoarele vor fi gasite folosind comanda CONTINUE, ce are sintaxa:

CONTINUE

comanda cauta urmatoarea inregistrare care corespunde conditiei specificate de ultima comanda LOCATE aplicata bazei de date active.

Cautarea se termina la gasirea unei inregistrari care corespunde conditiei sau la atingerea sfarsitului de baza de date sau de domeniu.

Combinatia LOCATE, CONTINUE se foloseste la aplicarea mai multor comenzi unor inregistrari care satisfac o conditie.

Exemplu:

LOCATE FOR bursa > 10000

DISPLAY

DELETE

CONTINUE

Un alt mod de cautare intr-o baza de date, este realizat cu functia LOOKUP(), ce are urmatoarea sintaxa:

LOOKUP( <camp1>, <expr>, <camp2> [,<expC>])

in care:

<camp1> - este campul al carui valoare va fi returnat de functie.

<expr> - specifica expresia de cautat in baze de date.

<camp2> - se foloseste pentru a realiza cautarea expresiei numai in acest camp.

Functia cauta intr-o baza de date prima aparitie a unei expresii date. În caz de reusita indicatorul de inregistrari se pozitioneaza pe inregistrarea in care a fost gasita expresia, functia returnand un anumit camp al inregistrari respective, in caz contrar indicatorul de inregistrari se va pozitiona dupa ultima inregistrare din baza de date.

Modalitati de cautare in baza de date indexata

Cautarea unei anumite inregistrari intr-o baza de date indexata se face cu comanda SEEK sau functia SEEK().

Comanda SEEK, are sintaxa:

SEEK <expr>

cauta in baza de date activa, indexata (neaparat) prima inregistrare pentru care cheia de indexare ia valoarea lui <expr>. Daca este gasita o asemenea inregistrare, indicatorul de inregistrari se va pozitiona pe aceasta, functia FOUND() va returna .T. iar functia EOF() va returna .F. Functia SEEK() are sintaxa:

SEEK(<expr>, [<expN> | <expC>])

returneaza o valoare logica, ca rezultat al cautarii unei inregistrari intr-o baza de date indexata.

Prin <expN> sau <expC> se specifica baza de date in care se face cautarea , daca aceasta este diferita de cea activa.

Ordonarea unei baze de date

În FoxPro exista doua metode de ordonare a unei baze de date si anume:

- ordonarea propriu-zisa a bazei de date, prin schimbarea , intre ele a inregistrarilor, dupa un anumit algoritm.

- indexarea unei baze de date, aceasta inseamna crearea unui nou fisier care contine informatiile cu privire la ordinea inregistrarilor bazei de date.

Sortarea bazelor de date neindexate

Se realizeaza cu comanda SORT, ce are urmatoarea sintaxa:

SORT TO <fisier> ON <camp1> [/A | /D] [/C]

[, <camp2> [/A | /D] [/C] ]

[ASCENDING | DESCENDING]

[<domeniu>] [FOR <expL1>] [WHILE <expL2>]

[FIELDS <lista de campuri>]

Comanda sorteaza baza de date activa creand o noua baza de date, in care sunt depuse inregistrarile selectate in ordinea specificata.

FIELDS <lista de campuri> - specifica lista de campuri ce va contine noua baza de date sortata.

<fisier> - numele noi baze de date.

<camp1>, <camp2> - specifica cheia de ordonare

/A | /D - specifica tipul de ordonare /A crescator si /D descrescator.

/C - folosita pentru campurile de tip sir de caracter (insensibila la litere mari sau mici).

Exemplu: Sa se ordoneze baza de date agenda.dbf, in ordine crescatoare dupa nume.

USE agenda

LIST

SORT TO agenda_s ON nume /AC

USE agenga_s

LIST

USE

Indexarea bazelor de date

Cea de-a doua metoda de ordonare a unei baze de date o reprezinta indexarea acesteia. Indexarea unei baze de date presupune crearea unui nou fisier, numit fisier index asociat, in care se memoreaza ordinea inregistrarilor din baza de date. Accesul la o inregistrare se face prin intermediul fisierului index.

Fisierele index ce pot fi asociate unei baze de date 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 dat, si anume eticheta activa.

O baza de date poate avea mai multe fisiere index asociate, dar numai unul singur va fi activ la un moment dat. Cheia de indexare este un camp din baza de date sau expresie de campuri (camp concatenat), exceptie facand : campuri logice, memo sau orice combinatie a lor. Numele unei chei de indexare poate avea lungimea maxim de 10 caractere, trebuie sa inceapa cu o litera

Crearea unui fisier index pentru o baza de date se realizeaza cu comanda INDEX, ce are urmatoarea sintaxa:

INDEX ON <exp_cheie>

TO <fisier.idx> | TAG <nume_eticheta> [ OF <nume_ fisier.cdx>]

[FOR <expL>]

[UNIQUE]

[COMPACT]

[ASCENDING | DESCENDING]

[ADDITIVE]

Comanda creeaza un fisier index (.idx) sau o tabela index (tag) intr-un fisier .cdx si desemneaza indexul ca index principal.

[UNIQUE] - dintre inregistrarile cu aceeasi valoare a cheii de indexare se poate accesa doar prima dintre acestea.

[ASCENDING | DESCENDING] - precizeaza ordinea de sortare

[COMPACT] - are ca efect crearea unui fisier index simplu compact

Un fisier index compus poate contine mai multe chei de indexare fiecare corespunzand unui criteriu de ordonare a bazei de date. Fisierele compuse sunt de doua tipuri:

- structurale - sunt deschise si asociate automat bazei de date odata cu deschiderea acesteia folosind comanda USE. Acestea au acelasi nume ca si baza de date, extensia fiind .CDX si sunt create folosind clauza TAG, fara introducerea unui nume de fisier index cu clauza OF.

-nestructurala - ce nu sunt deschise automat odata cu deschiderea bazei de date. Ele poarta alt nume decat al bazei de date, numele specificat in clauza OF <fisier.cdx>.

Exemplu:

Crearea unui fisier index simplu:

USE agenda

INDEX ON nume TO agenda_n

LIST && inregistrarile sunt in ordinea campului nume

USE

Crearea unui fisier index compus nestructurat:

USE agenda

INDEX ON nascut TAG data_n OF agenda_d   

&& se creaza eticheta data_n in fisierul index compus nestructurat agenda_d.cdx

LIST

USE

Crearea unui fisier index compus structural in care se va introduce cinci etichete

USE agenda

INDEX ON nume TAG nume

INDEX ON prenume TAG prenume

INDEX ON nascut TAG nascut

INDEX ON sex TAG sex

INDEX ON telefon TAG telefon DESCENGING

LIST

USE

Odata cu deschiderea bazei de date, se pot deschide si o serie de fisiere index asociate bazei de date, incluzand clauza INDEX in comanda USE. Sintaxa comenzii este:

USE [<fisier> | ?]

[INDEX <lista fisiere index> | ?

[ORDER [<expN> | <fisier.idx> | [TAG] <nume eticheta>

[OF <fisier.cdx>]

[ASCENDING | DESCENDING]]]]

unde:

<fisier> - numele bazei de date ce se va deschide

<lista fisiere index> - fisierele index ce vor fi deschise odata cu baza de date.

Clauza ORDER determina fisierul index simplu ce va deveni activ sau eticheta dintr-un fisier index compus ce va deveni activa.

ORDER <expN> - expresia numerca <expN> reprezinta numarul de ordine al fisierului index simplu sau al etichetei din fisierul index compus.

ORDER <fisier.idx> - specifica ce fisier index simplu va deveni activ.

ORDER [[TAG] <nume eticheta> [OF <fisier.cdx>]] -specifica eticheta ce va deveni activa din fisierul index compus structural sau nestructural.

Exemplu:

CLOSE ALL

USE agenda INDEX agenda_n.idx, agenda_d.cdx,; agenda.cdx ORDER agenda_n

&& se selecteaza ca activ primul fisier index

LIST

USE

USE agenda INDEX agenda ORDER TAG telefon   

&& se selecteaza eticheta telefon din fisierul index compus structural agenda.cdx

LIST

USE

Daca se doreste deschiderea unor fisiere index pentru baza de date curenta (dupa ce aceasta a fost deschisa ) se foloseste comanda SET INDEX cu urmatoarea sintaxa:

SET INDEX TO [<lista nume fis idx, cdx> | ? ]

[ORDER <expN> | <nume fis.idx>

| TAG <nume eticheta> [OF <nume fis.cdx>]

[ASCENDING | DESCENDING]] [ADITIVE]

Se vor deschide toate fisierele specificate in <lista nume fis idx, cdx> . Clauza ORDER are aceeasi semnificatie ca la comanda USE.

SET INDEX TO, fara clauze va inchide toate fisierele index din zona curenta, exceptie facand fisierul index structural al bazei de date.

Pentru a schimba ordinea inregistrarilor, deci pentru a selecta alt fisier index sau alta eticheta, vom folosi comanda SET ORDER, care are urmatoarea sintaxa:

SET ORDER TO

[<expN> | <fisier.idx> | [TAG ] <nume eticheta> ]

[OF <fisier.cdx>] [IN <expN2> | <expC> ]

Clauza IN se foloseste atunci cand comanda SET ORDER se refera la alta baza de date decat cea activa, cu aliasul <expC> sau din zona de lucru <expN2>.

Pot aparea situatii cand doua sau mai multe inregistrari corespund la aceeasi valoare a cheii de indexare, in acest caz se foloseste comanda SET UNIQUE cu urmatoare sintaxa:

SET UNIQUE ON | OFF

unde:

- optiunea ON - orice inregistrare pentru care valoarea cheii de indexare este egala cu cea a unei inregistrari precedente, nu va inclusa in fisierul index.

- optiunea OFF - care este si implicita , toate inregistrarile vor fi incluse in fisierul index indiferent de valoarea cheii

Închiderea fisierelor index se face prin comanda CLOSE INDEX cu sintaxa:

CLOSE INDEX

Comanda inchide toate fisierele index deschise in zona de lucru activa, in afara celui structural.

Alte comenzii care inchid fisierele index sunt:

CLOSE ALL - inchide si toate fisierele index din toate zonele de lucru

CLOSE DATABASES

USE

Trecerea de la un fisier index simplu la o eticheta dintr-un fisier index compus se realizeaza cu comanda COPY INDEX, care are urmatoarea sintaxa:

COPY INDEXES <lista fisiere index> | ALL

[TO <fisiere.cdx>]

Comanda transforma toate fisierele index simple prezente in lista <lista fisiere index> sau toate fisierele index simple deschise in zona de lucru curenta, daca se specifica clauza ALL, in etichete ale fisierului index structural sau ale fisierului index compus <fisier.cdx> in cazul cand se introduce clauza OF.

Operatia inversa, adica transformarea unei etichete a unui fisier index compus (.cdx), structural sau nestructural, intr-un fisier index simplu (.idx) este realizata de comanda COPY TAG, cu urmatoarea sintaxa:

COPY TAG <nume eticheta>[ OF <fisier.cdx>]

TO <fisier.idx>

Pentru stergerea etichetei din fisierul index compus folosim comanda DELETE TAG, cu urmatoarea sintaxa:

DELETE TAG <nume eticheta1> [OF <fisier1.cdx>]

[, <nume eticheta2> [OF <fisier2.cdx>]]

DELETE TAG ALL [OF <fisier.cdx>]

Comanda sterge etichetele <nume eticheta1>, <nume eticheta2>, , din fisierele index compuse deschise in zona de lucru curenta. Stergerea tuturor etichetelor dintr-un fisier index compus se poate realiza folosind clauza ALL.

Daca dintr-un fisier index compus se sterg toate etichetele, atunci fisierul este sters in intregime de pe disc.

Extragere de informatii statistice din baza de date

Extragerea de informatii dintr-o baza de date se face folosind urmatoarele comenzi:

1. AVERAGE [<lista expN>]

[<domeniu>][FOR <cond>][WHILE <cond>]

[TO <lista var> | TO ARRAY <nume tablou>]

calculeaza media aritmetica a valorilor expresiilor din <lista expN>, pentru inregistrarile selectate prin <domeniu>, FOR si WHILE, sau daca acestea lipsesc pentru toate inregistrarile din baza de date curenta.

<lista var> contine variabilele in care se vor depune mediile aritmetice iar <nume tablou> reprezinta un masiv unidimensional ce poate inlocui lista de variabile.

2. CALCULATE [<lista expresii>]

[<domeniu>] [FOR <cond>][WHILE <cond>]

[TO <lista var> | TO ARRAY <nume tablou>]

calculeaza functiile statistice , financiare specificate in <lista expresii> acestea pot fi: AVG(<expN>)

CNT()

MIN(<expN>)

MAX(<expN>)

STD(<expN>)

SUM(<expN>)

VAR(<expN>)

3. COUNT [<domeniu>][FOR <condL1>][WHILE <condL2>]

[TO <variabila>]

numara inregistrarile din baza de date activa sau din domeniu, subdomeniu specificat de clauzele FOR si WHILE, depunand rezultatul in variabila <variabila>.

Exemplu:

CLOSE ALL

USE agenda

COUNT FOR sex =.T> nrb

? 'In baza de date avem ' , nrb, ' baieti'

USE

4. SUM [<lista expN>]

[<domeniu>][FOR <cond>][WHILE <cond>]

[TO <lista var>| TO ARRAY <nume tablou>]

insumeaza toate campurile numerice pentru toate inregistrarile din baza de date curenta daca nu se folosesc clauzele <domeniu>, FOR, WHILE si afiseaza rezultatul pe ecran.


Document Info


Accesari: 849
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )