1CLAUZELE DE DOMENIU
Exista comenzi care actioneaza asupra mai multor inregistrari ale unei b.d. Selectarea acestora se face specificand in comanda
conditia de selectare. Multimea inregistrarilor care respecta conditia formeaza
domeniul inregistrarilor la care se refera comanda respectiva. Domeniul inregistrarilor se specifica prin clauzele
<domeniu>, FOR si WHILE incluse optional in comanda.
Clauza <domeniu> se va inlocui cu una din urmatoarele constructii:
ALL selecteaza toate inregistrarile din b.d.
NEXT <exp N> se refera la urmatoarele <exp N> inregistrari,
incepand de la inregistrarea curenta, inclusiv;
RECORD <exp N> actioneaza numai asupra inregistrarii cu numarul <exp
N>;
REST selecteaza inregistrarile incepand de la cea curenta, inclusiv, si pana la
sfarsitul b.d.
Clauza FOR :
sintaxa : FOR <exp L>
se foloseste pentru selectarea inregistrarilor in functie de o conditie logica
<exp L>. Se selecteaza acele inregistrari pentru care <exp L> este adevarata.
Clauza WHILE :
sintaxa : WHILE <exp L>
selecteaza inregistrarile in functie de conditia logica <exp L>. Se
selecteaza acele inregistrari pentru care <exp L> este
adevarata. Spre deosebire de clauza FOR care dupa gasirea unei inregistrari
care nu respecta conditia, continua cu testarea celorlalte, clauza WHILE
intrerupe testarea inregistrarilor cand gaseste o inregistrare ce nu respecta conditia data.
Daca se folosesc ambele clauze FOR si WHILE, prima care conteaza este clauza WHILE.
In expresia logica din clauza FOR si WHILE, trebuie sa
apara o marime care sa varieze in functie de inregistrare. Aceasta trebuie sa depinda fie de numarul de inregistrare, fie de continutul
acesteia.
exercitiu : Sa se afiseze toate inregistrarile al
caror nume incepe cu o litera de dupa litera P.
2 INDICATORUL DE INREGISTRARI
Indicatorul de inregistrari este asociat unei b.d. la
deschidere si este sters la inchiderea b.d. La deschiderea b.d. indicatorul de
inregistrari va indica spre prima inregistrare, spre inregistrarea 1, daca ea
exista.
Aflarea inregistrarii curente dintr-o b.d. (deci a continutului indicatorului
de inregistrari) se face folosind functia RECNO().
sintaxa : RECNO( [<exp N>] )
Functia returneaza un rezultat numeric reprezentand numarul inregistrarii
curente din b.d. deschisa in zona de lucru <exp N>. Daca <exp N>
lipseste atunci functia se refera la b.d. activa.
ex.
use agenda
? recno ( )
1
list next 2
? recno( )
2
Schimbarea inregistrarii curente se realizeaza cu ajutorul comenzilor GOTO,
SKIP.
Comanda GO sau GOTO pozitioneaza indicatorul de inregistrari pe o anumita
inregistrare, dintr-o b.d. (GO si GOTO sunt identice).
sintaxa : GO | GOTO [RECORD] <expN1> [ IN
<expN2>]
GO | GOTO TOP | BOTTOM [IN <expN2>]
Prima forma are ca efect pozitionarea indicatorului de inregistrari din b.d.
sau din zona de lucru <expN2>, pe inregistrarea cu numarul <expN1>.
Absenta clauzei IN determina referirea la b.d. activa.
Clauza RECORD este optionala, prezenta ei neavand nici
un efect; ea se introduce pentru claritatea programului.
Forma a doua a comenzii se foloseste pentru pozitionarea indicatorului de
inregistrari la extremele b.d la inceputul sau la
sfarsitul acesteia ).
Clauza TOP se foloseste pentru pozitionarea pe prima inregistrare, pe cand
BOTTOM determina pozitionarea pe ultima inregistrare a b.d.
Urmatoarele comenzi sunt echivalente:
go 1
goto 1
go record 1
go top
goto top in selected( )
Un alt tip de deplasare cu indicatorul de inregistrari este realizat cu
ajutorul comenzii SKIP. Aceasta muta indicatorul de inregistrari peste un numar de inregistrari relativ la inregistrarea curenta.
sintaxa : SKIP [ <expN1> <expN2> ]
unde <expN1> reprezinta numarul de inregistrari peste care se sare (cu
indicatorul de inregistrari ). Acesta poate fi atat un numar pozitiv (se sare
spre o inregistrare cu un numar de inregistrare mai mare), cat si negativ(se sare spre o inregistrare anterioara celei
curente).
<expN2> specifica zona de lucru in care este deschisa b.d.
Daca se sare peste ultima inregistrare a b.d., indicatorul de inregistrari va contine
numarul de inregistrari din b.d.+1, iar functia EOF() va returna valoarea .T. ;
in cazul saltului inaintea primei inregistrari, functia BOF() va returna
valoarea .T.
Urmatoarele comenzi sunt echivalente :
skip
skip 1
skip in select()
goto record recno()+1
Functiile EOF() si BOF()
sintaxa : EOF( [<exp N>] )
BOF( [<exp N>] )
testeaza daca indicatorul de inregistrari se afla la sfarsitul , respectiv la
inceputul b.d. active sau a celei specificate ca parametru.
Numarul de inregistrari dintr-o b.d. este dat de functia RECCOUNT()
sintaxa : RECCOUNT( [<exp N>] )
ex.:
use agenda
? recno( )
1
skip 3
? recno( )
4
go top
? recno( )
1
skip -2
? bof( )
.T.