Lucrul simultan cu mai
multe tabele
In mediile xbase activarea unei tabele se face intotdeauna intr-o asa-numita „zona de lucru”. Daca la activarea unei tabele nu se specifica o zona de lucru, in mod implicit aceasta activare se face in zona de lucru 1.. In fiecare zona de lucru poate fi activata o tabela, ceea ce permite lucrul simultan cu mai multe tabele.
La un moment dat exista o singura zona selectata, tabela activa din acea zona fiind denumita tabela curenta . Daca intr-o zona a fost activata o tabela si apoi inca una, s-a produs implicit dezactivarea celei dintai.
Selectarea unei zone de lucru se face cu comanda:
SELECT numar_zona
Pentru lucrul simultan cu mai multe tabele exista doua posibilitati:
1. folosirea unor tabele nerelationate (necuplate, nelegate prin relatii)
In acest caz veti utiliza comenzile studiate pana acum si pozitionarea in fiecare tabela trebuie facuta prin comenzi explicite (locate, seek ).
2. folosirea tabelelor relationate (cuplate prin relatii, intre care s-au stabilit legaturi)
In acest caz mai intai se utilizeaza o comanda speciala care „cupleaza” tabelele intre ele, astfel incat orice pozitionare pe un articol in una din tabele determina pozitionarea pe articolul corespunzator din tabela relationata cu prima.
Lucrul
simultan cu tabele nerelationate
In acest caz tabelele ce trebuie utilizare se deschid simultan in zone de lucru distincte. Pozitionarea pe articolul de interes din fiecare tabela se face prin selectarea zonei in care se afla tabela corespunzatoare si utilizarea comenzii de pozitionare in tabela cu comenzile SEEK sau LOCATE.
Observatie:
La un momendat
una dintre zonele de lucru este cea curenta. Selectarea unui camp al unei tabele din zona de lucru curenta se face in
mod obisnuit cu nume_camp
in schimb selectarea unui camp al unei tabele din
alta zona de lucru se face cu nume_tabela .nume_camp
Exemplu:
Fie tabelele:
biblioteca.dbf (cod_carte, titlu, autor, pret, an_aparitie),
cititori.dbf(cod_cititor, nume_prenume,
adresa, telefon)
imprumut.dbf(cod_carte, cod_cititor, data_imprumut).
Presupunand ca fiecare persoana poate imprumuta o singura carte la un momendat
sa se determine:
Fiecare
tabela se deschide intr-o zona de lucru si se indexeaza
sele 1
use biblioteca
index
on cod_carte to i1
sele 2
use cititori
index
on cod_cititor to i2
sele 3
use imprumut
index
on cod_cititor to i3
accept
„ numele persoanei „ to nm
sele 2
locate for nume=nm
c=cod_cititor
sele 3
seek c
y=cod_carte
sele 1
seek y
?
”cartea ”, titlu, ”avand pretul ”, pret, ” a
fost imprumutata de cititorul ”,cititori.nume_prenume,”
cu telefonul ”, cititori.telefon, ”la data de
”, imprumut.data_imprumut
Observatie: in interogarea anterioara nu are
relevanta indexarea tabelei cititori dupa campul cod_cititor dar s-a tinut
cont de faptul ca indexarea unei tabele se realizeaza
in special dupa cheia primara (sau dupa campul dupa
care se realizeaza cele mai frecvente interogari).
Exercitii:
Pentru
baza de date anterioara se vor determina:
a. pentru o carte al carui titlu si autor se citesc de la tastatura de cine a fost imprumutata si cand
b. cat costa cartea imprumutata
de un cititor (al carui nume se citeste
de la tastatura) la o data citita
c. la cine este cea mai scumpa carte in
cazul in care a fost imprumutata)
d. de cate ori a imprumutat
carti un cititor al carui
nume se citeste de la tastatura
e. care este ultima carte imprumutata de acesta
f.
este
cartea X imprumutata de cititorul Y? Indicatie: se cauta in tabela imprumut cel mai recent imprumut
al lui Y si se varifica daca codul cartii X este codul cartii imprumutate
g. de la ce editura este ultima carte imprumutata. De cine a fost imprumutata?
h. Cand a imprumutat
cititorul X cartea cu titlul Y de la editura Z?
i.
A imprumutat de mai multe ori cititorul X aceasta carte? (se
va afisa adevarat sau fals)
j.
Formulati
o interogare care sa presupuna lucrul simultan cu mai
multe tabele
Fie
baza de date depozit care ar trebui sa prelucreze informatii
privind stocul de materiale, furnizorii si clientii (cumparatorii) precum si informatii
legate de vanzarile produselor:
Informatiile de interes sunt: denumire material, pret unitar,
cantitate, unitate de masura, furnizor, adresa
furnizor, telefon furnizor, client, adresa client, cantitate cumparata etc.
Formulati interogari
care sa va afiseze informatii
din doua sau mai multe tabele. Actualizati baza de
date in urma receptionarii unui nou produs sau vanzarii unui produs