Lucrul simultan cu
tabele relationate
Tabelele se deschid in in zone de
lucru diferite. Prin relationarea a doua tabele, orice pozitionare facuta in
una din tabele conduce autonat la o pozitionare in cea de a doua. Relationarea
nu este o legatura egalitara intre tabele, ci una de subordonare: una din
tabele va fi parinte ( sau “conducatoare”)
iar cealalta va fi copil (sau “condusa”). Comanda ce stabileste o relatie este
urmatoarea:
SET RELATION TO expresie INTO nr_zona |
alias [ADDITIVE]
Observatii:
·
Inainte
de stabilirea relatiei este necesar ca tabela copil sa fie indexata cu aceeasi
cheie ca si cea a relatiei.
·
La
lansarea comenzii, tabela parinte trebuie sa fie deschisa in zona de lucru
current selectata.
·
Tabelele
relationate au in general un camp comun, dupa
care este indexata tabela copil.
·
Daca se foloseste optiunea ADDITIVE se pastreaza toate relatiile deja
existente ale tabelei parinte.
Fie tabelele produse si vanzari avand structurile:
produse [codp(C10), denumire (C15), pręt (N10),
datap(D), cant(N4), um(C10)]
vanzari
[codp(C10), cantv(N4), datav(D), client (C15)]
produse
codp |
denumire |
pret |
datap |
cant |
um |
1 |
Ciocolata |
20000 |
|
20 |
buc |
2 |
Biscuiti |
7000 |
|
50 |
buc |
3 |
Suc |
23000 |
|
50 |
buc |
4 |
Bomboane |
45000 |
|
100 |
buc |
5 |
napolitane |
8000 |
|
120 |
buc |
vanzari
codp |
cantv |
datav |
client |
1 |
10 |
|
Cimco |
2 |
10 |
|
Carom |
4 |
10 |
|
Meda |
sele 1
use produse alias pp
index on codp to cc
sele 2
use vanzari alias vv
index on codp to xx
sele 1
set rela to codp into vv
2. Pentru a determina cate
bucati de biscuiti s-au vandut:
Seek ‘2’
display 'Din produsul ', denumire, 'avand pretul ', pret,
' s-au vandut ', vv.cantv, ' bucati'
display 'Pt produsul
',denumire,' s-au incasat ',vv.cantv*pret,' lei'
In cazul in care unui articol din tabela parinte ii
corespunde mai multe articole din tabela copil spunem ca este vorba de o
relatie de unul–la-mai-multi
Comanda :
Set skip to alias
Determina ca pozitionarea
pe un articol din tablela parinte sa lege de fiecare dintre articolele
corespunzatoare din tabela copil.
produse
codp |
denumire |
pret |
datap |
cant |
um |
1 |
Ciocolata |
20000 |
|
20 |
buc |
2 |
Biscuiti |
7000 |
|
50 |
buc |
3 |
Suc |
23000 |
|
50 |
buc |
4 |
Bomboane |
45000 |
|
100 |
buc |
5 |
napolitane |
8000 |
|
120 |
buc |
vanzari
codp |
cantv |
datav |
client |
1 |
10 |
|
Cimco |
2 |
10 |
|
Carom |
4 |
10 |
|
Meda |
2 |
15 |
|
Danis |
3. Pentru biscuiti se realizeaza doua vanzari. Pentru
a afisa ambele cantitati vandute pentru biscuiti:
Seek ‘2’
Set skip to vv
display denumire,vv.cant
,'bucati vandute pe ', vv.datav for
codp='2’
4. Pentru a determina suma
incasata pe biscuitii vanduti:
Seek ‘2’
Sum pręt*vv.cantv to s for
codp=’2’
?s afiseaza 175 000
Pentru a determina valoarea produselor
vandute:
?denumire, pręt*vv.cantv for
cantv<>0
5.Pentru a determina valoarea
incasata in urma vanzarii produselor:
Sum pręt*vv.cantv to x
?x
Comanda UPDATE permite
actualizarea datelor din tabele relationate:
6. Pentru actualizarea
campului cant din tabela produse in urma vanzarilor:
Probleme propuse: