|
Lucrarea
4
Sortarea si indexarea
tabelelor. Crearea Interogarilor.
1. Sortarea tabelelor
SORT
TO fisier_sortat ON câmp1 [/A][/C][/D]
[,câmp2 [/A][/C][/D] …][FOR expL]
2. Indexarea tabelelor
INDEX
ON cheie_de_sortare TO fis_index [UNIQUE][DESCENDING]
Exemplu:
USE stud
LIST
INDEX ON SUBSTR(nume,1, 5) TO inume
INDEX ON cods TO icods
USE stud INDEX inume, icods
LIST
SET ORDER TO 2 && stabileste index
activ: icods
LIST
USE |
Exemplu:
Adaugati câteva înregistrari nu numele "Pop",
"Popa", "Popescu" în fisierul Stud apoi
reindexati fisierul iNume. Rulati apoi programul L41.PRG.
*** Fisierul
L41.PRG
USE STUD INDEX iNume
SET EXACT ON && cautare pe întreaga lungime a sirului
FIND Pop
IF FOUND()
? "Gasit prin FIND:"
DISP
ELSE
? "Nu exista înregistrarea"
ENDIF
SEEK "P"+"op"
IF FOUND()
? "Gasit
prin SEEK:"
DISP
ELSE
? "Nu exista înregistrarea"
ENDIF
SET EXACT OFF &&
cautare dupa prefixul sirului
SEEK "Pop"
IF FOUND()
? "Toate numele care încep cu Pop:"
DO WHILE .NOT. EOF() .AND. nume = "Pop"
DISP
SKIP
ENDDO
ENDIF
ACCEPT "Nume Student:" TO vNume
FIND &vNume && echivalent cu
SEEK vNume
IF FOUND()
? "Date pentru studentul "+vNume
DISP
ELSE
? vNume+"nu exista în tabela"
ENDIF
USE
RETURN |
3.
Lucrul cu mai multe tabele. Specificarea relatiilor între tabele
Exemplu:
Se va crea o tabela masini.DBF care va retine date despre masinile
studentilor din tabela stud.DBF. Aceasta va avea câmpurile CODS
(cod student la fel ca si în stud), NRM ( numar înregistrare
), MARCA ( producator auomobil ), TIP ( tip automobil ), culoare,
nr_usi. Se vor introduce câteva înregistrari, pastrându-se
corespondenta între câmpul CODS din stud si masini. Se
va indexa apoi prin INDEX ON cods TO iMCods.
*** Fisierul
L42.PRG
SELECT 2
USE masini ALIAS mas INDEX iMCods
USE stud IN 1 INDEX iNume
SELECT 1
? "Zona 1"
LIST
SELECT 2
? "Zona 2"
LIST
SELECT 1
ACCEPT "Stundent: " TO cNume
SEEK cNume
IF FOUND()
SELECT 2
SEEK stud->cods &&
corect pt. ca în zona 2 este activ iMCods
IF FOUND()
? "Studentul: "+stud->nume+"
are masina:"
?TRIM(marca)+TRIM(tip)
? "Cu numarul de inregistrare:"+
nrm
ELSE
? "Studentul: "+stud->nume+"
nu are masina"
ENDIF
ELSE
? "Studentul "+cNume+" nu exista in tabela"
ENDIF
WAIT "Sfarsit!"
CLOSE DATABASES
RETURN |
Pentru a stabili o relatie trebuie parcursi urmatorii
pasi:
- Se deschide tabela sursa.
- Se deschide tabela destinatie indexata dupa criteriu de legatura
în alta zona.
- Se selecteaza zona cu tabela sursa a relatiei (de unde pleaca relatia)
- Se executa instructiunea:
SET RELATION
TO cheie_de_legatura INTO tabela_destinatie [CONSTRAI N] [ADDITIVE]
Exemplu:
*** Fisierul
L43.PRG
CLEAR
USE stud IN 1
USE masini IN 2 INDEX iMCods ALIAS mas
SELECT 1
SET RELATION TO cods INTO mas
GO TOP
DO WHILE .NOT. EOF()
? "Studentul :"+nume
IF EOF(2)
? "Nu are masina"
ELSE
? "Are masina cu numarul: "+mas->nrm
ENDIF
SKIP
ENDDO
CLOSE DATADABES
RETURN |
4. Folosirea interogarilor Visual dBase
4. Probleme propuse
P1. Rulati exemplele prezentate în
acest capitol.
P2. Sortati
dupa câmpul nume tabela Stud cu ajutorul comenzii SORT
si depuneti rezultatul în fisierul Stud1.DBF.
Creati un program care sa citeasca numele unui student de la consola si
apoi sa caute informatiile în tabela Stud1
printr-un algoritm de cautare binara. Algoritmul de cautare
binara va împarti tabela la fiecare pas în doua jumatati egale
si apoi va compara cheia de cautare cu înregistrarea de la mijlocul
intervalului. Se vor folosi instructiunea GO
si functia RECCOUNT().
P3. Scrieti
o secventa de program care deschide tabele Stud
si Masini si creeaza doua relatii
de sens opus între ele. Folosind aceste relatii sa se caute un student
dupa nume si apoi sa se afiseze datele despre masina sa apoi sa se caute
o masina dupa numarul de înregistrare si apoi sa se afiseze datele
despre proprietarul sau.
©
s.l. dr. ing. Dan Pescaru '2004
|