Creeaza.com - informatii profesionale despre


Evidentiem nevoile sociale din educatie - Referate profesionale unice
Acasa » scoala » informatica » baze de date
Pozitionarea in tabele - Visual FoxPro

Pozitionarea in tabele - Visual FoxPro


Pozitionarea in tabele - Visual FoxPro

Prin pozitionare se intelege mutarea pointerului pe un anumit articol care devine articol curent, facilitandu-se astfel accesul la date. Implicit la deschiderea unei tabele poineterul este plasat pe primul articol. Schimbarea inregistrarii curente nu se poate realiza direct, printr-o instructiune de atribuire, ci prin intermediul unor comenzi. Pozitionarea poate fi de doua feluri: fizica si logica.

Pozitionarea fizica. Acest tip de pozitionare se bazeaza pe structura secventiala a articolelor dintr-o tabela. Comenzile folosite sunt GO | GOTO si SKIP

Comanda GO | GOTO asigura pozitionarea pointerului independent de inregistrarea curenta la un moment dat. Formatul general poate fi:

GO | GOTO [RECORD] <expr_n1> [IN <expr_n2> | <expr_c>]

sau

GO | GOTO TOP | BOTTOM [IN <expr_n2> | <expr_c>]

unde:

Clauza [RECORD] <expr_n1> asigura pozitionarea pe inregistrarea cu numarul indicat prin <expr_n1>; daca numarul specificat este mai mare decat al ultimei inregistrari, sistemul afiseaza mesajul "record is out of range

Clauzele TOP | BOTTOM asigura pozitionarea pe prima (TOP) respectiv pe ultima (BOTTOM) inregistrare din tabela; daca tabela este indexata prima inregistrare este cea care are cea mai mica valoare a cheii de indexare;



Clauza IN <expr_n2> | <expr_c> asigura pozitionarea pointerului intr-o alta zona de lucru decat cea curenta.

Comanda SKIP realizeaza o pozitionare "relativa" intr-o tabela fiind dependenta de inregistrarea curenta la un moment dat.

Formatul general este:

SKIP [<expr_n1>] [IN <expr_n2> | <expr_c>]

unde:

<expr_n1> poate fi un numar pozitiv sau negativ; daca este pozitiv se deplaseaza pionterul, in aval (spre sfarsitul tabelei), peste un numar de inregistrari indicat prin <expr_n1>; daca numarul este negativ pointerul se deplaseaza in amonte (spre inceputul tabelei) peste un numar specificat de inregistrari. Daca <expr_n1> lipseste deplasarea se realizeaza in aval peste un articol, fiind echivalente constructiile SKIP si SKIP +1; Clauza IN <expr_n2> | <expr_c> are acelasi rol ca si in cazul comenzii GO.

Pozitionarea logica. Acest tip de pozitionare presupune localizarea inregistrarilor care respecta o conditie data. Comenzile folosite sunt LOCATE, CONTINUE si SEEK.

Comanda LOCATE testeaza secvential inregistrarile tabelei pozitionand pointerul pe prima inregistrare care satisface conditia specificata prin clauza FOR. Formatul general este:

LOCATE FOR <expr_log1> [<domeniul]

[WHILE <expr_log2>] [NOOPTIMIZE]

Daca se folosesc clauzele <domeniu> si /sau WHILE se restrange domeniul de cautare.

Comanda LOCATE opereaza in zona de lucru curenta, impreuna cu comanda CONTINUE care asigura continuarea cautarii pana la sfarsitul tabelei, cand se afiseaza mesajul "End of Locate scope".

Exemplul 1 : Sa se localizeze studentii cu media peste 8.50.

USE studenti

LOCATE FOR media >8.50

DISPLAY

CONTINUE

Principalul avantaj al comenzii LOCATE il constituie posibilitatea cautarii in interiorul unui camp utilizand caracterul $ atunci cand comanda SET EXACT este folosita cu OFF

Exemplul 2 : Sa se localizeze toti studentii care au in campul Numest sirul "co".

USE student

LOCATE FOR "co" $ numest

DISPLAY

CONTINUE

DISPLAY

Pentru cautarea rapida in tabelele indexate se foloseste comanda SEEK cu formatul:

SEEK <expr>

Expresia trebuie sa fie de acelasi tip cu indexul curent, dar nu este obligatoriu ca valoarea cautata sa fie identica cu valoarea indexului.

Exemplul 1 : Sa se localizeze, in tabela student.dbf, indexata dupa campul Numest, studentul cu numele "cozma".

USE student

INDEX ON numest TO nume

SEEK "cozma"

DISPLAY

Rezultatul comenzii SEEK este influentat de starea comenzilor SET NEAR si SET EXACT. Daca in tabela nu exista nici o inregistrare in care sa se regaseasca valoarea exacta a expresiei, implicit sistemul pozitioneaza indicatorul de inregistrare la sfarsitul fisierului. Daca in prealabil este folosita comanda SET NEAR ON pozitionarea se va face pe prima inregistrare in care expresia are cea mai apropiata valoare de cea cautata. Daca este folosita comanda SET EXACT ON valoarea expresiei cautate trebuie sa fie identica cu valoarea indexului.

Pentru compatibilitatea cu aplicatiile proiectate in versiunile anterioare de SGBD-uri, la pozitionarea in tabelele indexate poate fi folosita si comanda FIND.

Asociate operatiei de pozitionare sunt si functiile: RECNO(), BOF(), EOF(), FOUND(), LOOKUP().

Functia RECNO([<expr_n> | <expr_c>]) returneaza numarul inregistrarii curente.

Functiile BOF() si EOF() testeaza inceputul si respectiv sfarsitul tabelei returnand valoarea .T. pentru adevar si .F. pentru neadevar. Functia BOF() returneaza .T. numai daca in tabela nu sunt incarcate articole. Functia EOF() returneaza .T. daca pointerul este plasat dupa ultima inregistrare (de ex. dupa comanda LIST

Prezentam in continuare cateva exemple de comenzi si functii de pozitionare fizica.

USE student

GO 5 && pozitioneaza poiterul pe articolul 5

? RECNO() && afiseaza numarul inregistrarii curente

5

SKIP -2   && salt in amonte peste doua inregistrari

? RECNO()  && afiseaza numarul inregistrarii curente

GOTO TOP  && pozitioneaza poiterul pe prima inregistrare

? RECNO() && afiseaza numarul inregistrarii curente

GO BOOT  && pozitioneaza poiterul pe ultima inregistrare

?RECNO()  && afiseaza numarul inregistrarii curente

LIST && afiseaza continutul tabelei

?EOF() && testeaza sfarsitul de fisier

.T.

Functia FOUND([<expr_n> | <expr_c>]) este folosita pentru testarea rezultatului unei cautari intr-o tabela, returnand, dupa caz, valoarea de adevar sau neadevar.

USE student

LOCATE FOR oras = "iasi"

? FOUND()

.T.

Functia LOOKUP() are rolul de a cauta prima aparitie a unei expresii date, returnand, in caz de reusita, valoarea campului specificat. Formatul general este:

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

unde:<camp1> reprezinta campul returnat in caz de cautare reusita; <expr> reprezinta expresia de cautat; <camp2> stabileste campul in care se va realiza cautarea; <expr_c> este folosita pentru a specifica eticheta indexului curent.

Exemplul 1 : Sa se afiseze media studentului "ionescu".

USE student

? LOOKUP(media,'ionescu',numest)





Politica de confidentialitate


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