Sunteți pe pagina 1din 6

Laboratorul nr.

Utilizarea mai multor tabele

Când se lucrează cu mai multe tabele se folosesc, pe de o parte, sesiuni de date pentru a controla
tabelele disponibile pentru formulare şi rapoarte şi pe de altă parte, zone de lucru pentru a găzdui
tabelele deschise.
Zona de lucru este o regiune numerotată prin care se identifică un tabel deschis. In Visual
FoxPro există 32767 zone de lucru în care se pot deschide şi manipula tabele. Zonele de lucru sunt
identificate într-o aplicaţie prin folosirea aliasului tabelului deschis în zona de lucru.

Folosirea aliasurilor tabelelor

Un alias de tabel este numele prin care Visual FoxPro indică un tabel deschis într-o zonă de
lucru. Atunci când se deschide un tabel Visual FoxPro foloseşte automat numele fişierului ca alias
implicit.
Exemplu: Dacă se deschide tabelul Clienţi în prima zonă de lucru disponibilă (zona 0 ) cu ajutorul
comenzilor următoare, tabelului îi va fi asociat aliasul implicit „clienţi”:
SELECT 0
USE clienţi

a) Deschiderea unui tabel cu un alias definit de utilizator


- se utilizează clauza ALIAS în comanda USE
Exemplu: SELECT 0
USE Clienti ALIAS cli
In acestr caz, pentru a face referire la tabelul deschis se va folosi aliasul atribuit ( în exemplul de
mai sus „cli”). Un alias definit de utilizator constă din maximum 254 de caractere (litere, cifre sau
liniuţe de subliniere) şi trebuie să înceapă cu o literă sau o liniuţă de subliniere. Dacă un alias furnizat
de utilizator conţine un caracter nepermis, FoxPro crează automat un alias.

b) Utilizarea aliasurilor atribuite de Visual FoxPro.


Visual FoxPro atribuie automat un alias unui tabel dacă se deschide simultan acelaşi tabel în mai
multe zone de lucru, prin includerea clauzei AGAIN în cadrul comenzii USE, şi nu se indică un alias la
deschiderea tabelului în fiecare zonă de lucru sau dacă survine un conflict între aliasuri.
Aliasurile implicite din primele 10 zone de lucru au asociate literele de la A la J. Aliasurile
atribuite în zonele de lucru de la 11 la 32767 pornesc de la W11 până la W32767. Aceste aliasuri pot fi
folosite pentru a indica tabelul deschis în zona de lucru, la fel ca orice alias implicit sau definit de
utilizator.

Utilizarea sesiunilor de date

O sesiune de date este o reprezentare a mediuluide lucru curent folosit de un formular, de un set
de formulare sau de un raport. Fiecare sesiune de date cuprinde propriul său set de zone de lucru, zone
care conţin tabelele deschise, indecşii lor şi relaţiile dintre ele.

a) Vizualizarea zonelor de lucru


Lista tabelelor deschise într-o sesiune Visual FoxPro poate fi vizualizată în fereastra Data
Session deschisă din meniul Windows.
1
b) Deschiderea unui tabel într-o zonă de
lucru

Un tabel poate fi deschis într-o zonă de lucru:


- folosind fereastra Data Session din care
se alege butonul Open sau
- prin utilizarea clauzei IN în comanda
USE

Exemplu: USE Clienţi IN 1


Notă: Pentru a deschide un tabel în zona de lucru disponibilă cu numărul cel mai mic se foloseşte
clauza IN a comenzii USE cu parametrul 0.
Exemplu: Se presupune că există tabele deschise în zonele de lucru de la 1 la 7. Pentru a deschide un
nou tabel în zona de lucru 8 se foloseşte comanda:
USE Clienţi IN 0

c) Inchiderea unui tabel dintr-o zonă de lucru


Un tabel deschis într-o zonă de lucru poate fi închis astfel:
- în fereastra Data Session se selectează aliasul tabelului şi se alege Close;
- se selectează ca zonă de lucru curentă zona în care este deschis tabelul ce se doreşte a fi închis, şi se
introduce comanda USE fără nici un nume de tabel;
- se foloseşte comanda USE cu clauza IN pentru a indica zona de lucru în care se va închide tabelul.
Exemplu:
1. USE clienti
BROWSE
USE
2. USE IN clienti && dacă aliasul tabelului este clienti

d) Indicarea zonei de lucru


- prin utilizarea comenzii SELECT 0 - se indică următoarea zonă de lucru liberă, înainte de a
deschide un tabel nou.
- Cu ajutorul comenzii SELECT se selectează zona de lucru activă la un moment dat. Sintaxa
comenzii este:
SELECT nWorkArea | cTableAlias
Exemplu: Presupunând că tabelul Clienţi este deschis în zona 3 cu aliasul cli, selectarea zonei în care
este deschis fişierul se poate face astfel:
SELECT 3
sau
SELECT cli

e) Referirea la tabele deschise în alte zone de lucru


Se poate face referire la câmpuri aparţinând unor tabele deschise în alte zone de lucru, plasând înainte
de numele câmpului aliasul urmat de un punct "." sau de operatorul "->".
Exemplu: Dacă dintr-o zonă de lucru oarecare se doreşte accesarea câmpului manager din cadrul
tabelului Clienţi, deschis într-o altă zonă cu aliasul cli, se poate folosi următoarea notaţie:
cli.manager sau cli->manager

2
Stabilirea unor relaţii temporare între tabele

Când se stabilesc relaţii temporare între tabele, se determină indicatorul de înregistrări al


uneia dintre tabele (tabela fiu) să urmărească în mod automat mişcările indicatorului de
înregistrări al celeilalte tabele (tabela părinte). Astfel se poate selecta o înregistrare din partea "una"
(părinte) a unei relaţii şi se obţine automat acces la înregistrările asociate din partea "mai multe" (fiu) a
relaţiei.
Exemplu: se pot lega tabelele Clienti şi Facturi astfel încât atunci când indicatorul de
înregistrări din tabelul Clienţi ajunge în dreptul unui anumit client, indicatorul de înregistrări din tabelul
Facturi să se poziţioneze pe înregistrarea care are acelaşi identificator pentru client.
Se pot utiliza zonele de lucru şi aliasurile tabelelor pentru a stabili relaţii între două tabele
deschise, prin intermediul comenzii SET RELATION.
Dacă se utilizează un formular pentru a lucra cu tabelele respective, se pot stoca relaţiile ca parte
a mediului de date pentru formularul respectiv.
Pentru a crea relaţii temporare între tabele :
- se foloseşte comanda SET RELATION, cu sintaxa:
SET RELATION TO
[eExpr1 INTO nWorkArea1 | cTableAlias1
[, eExpr2 INTO nWorkArea2 | cTableAlias2 ...]
[IN nWorkArea | cTableAlias]
[ADDITIVE]]

Comanda SET RELATION stabileşte o relaţie între un tabel deschis în zona de lucru
curent selectată şi un tabel deschis într-o altă zonă de lucru. De obicei, tabelele asociate au un
câmp comun, iar expresia utilizată pentru a stabili relaţia este chiar expresia de indexare a
indexului de control al tabelului fiu.
Exemplu: Unui client i se pot emite mai multe facturi. Stabilind o relaţie pe baza câmpului comun al
tabelelor de clienţi şi facturi se pot vedea imediat toate facturile corespunzătoare fiecărui client.
Secvenţa de cod următoare foloseşte câmpul cod_cli, care este comun celor două tabele şi crează o
relaţie între acestea pe baza câmpului cod_cli din tabelul clienti şi a etichetei de index cod_cli din
tabelul Facturi.

USE Clienti IN 1
USE  Facturi IN 2
SELECT  facturi
SET ORDER TO TAG cod_cli
SELECT clienti
SET RELATION TO cod_cli INTO facturi
SELECT  facturi
BROWSE  NOWAIT
SELECT clienti
BROWSE  NOWAIT
Fereastra Data Session afişează cele două tabele deschise , precum şi relaţiile stabilite cu
ajutorul comenzii SET RELATION.
In exemplul precedent s-a stabilit o singură relaţie între două tabele. Din sintaxa comenzii SET
RELATION se desprinde faptul că aceasta se poate folosi pentru a stabili relaţii multiple între un
tabel părinte şi mai multe tabele fiu.

3
Crearea unor relaţii persistente între tabele

Relaţiile persistente între tabele sunt relaţii între tabelele aparţinând unei baze de date, care sunt
stocate în fişierul bazei de date , şi sunt folosite automat drept condiţii implicite de joncţiune în
ferestrele Query Designer şi View Designer. Sunt afişate în Database Designer ca linii de legătură
între indecşii tabelelor, sunt afişate în Data Enviromnent Designer ca relaţii implicite pentru formulare
şi rapoarte şi sunt folosite pentru a stoca informaţii despre integritatea referenţială.
Se deosebesc de relaţiile temporare ( create cu SET RELATION) prin faptul că nu trebuie să fie
create de fiecare dată când se folosesc tabelele.
Notă: Datorită faptului că relaţiile persistente nu controlează relaţiile dintre indicatorii înregistrărilor
din tabele, când se dezvoltă aplicaţii Visual FoxPro se folosesc atât relaţii temporare (SET RELATION)
cât şi relaţii persistente.
Relaţiile persistente se stabilesc între indecşi, nu între câmpuri, ceea ce permite legarea
tabelelor pe baza unei expresii simple sau complexe compuse din indecşi.
- în Database Designer se alege numele indexului care se doreşte legat şi se trage cu mouse-ul peste
numele indexului din tabelul legat.
Relaţiile persistente apar în Database Designer ca linii care unesc tabelele legate.
De regulă relaţiile persistente sunt create folosind indecşii din cheile primară şi externă. Tipul
etichetei de index sau al cheii determină tipul relaţiei persistente care se poate crea.
Trebuie folosită o etichetă index sau o cheie primară sau candidat pentru partea "unu" a
relaţiei unu-la-mai-multe, iar pentru partea "mai multe" se foloseşte o cheie sau o etichetă de
index obişnuită.

Ştergerea unei relaţii persistente între tabele


În Database Designer se execută clic pe linia de relaţie între două tabele şi se apasă tasta
DELETE

Generarea integrităţii referenţiale


Generarea integrităţii referenţiale presupune crearea unui set de reguli care să păstreze
relaţiile definite între tabele atunci când se inserează sau se şterg înregistrări.
Respectarea integrităţii referenţiale presupune ca Visual FoxPro va împiedica: adăugarea unei
înregistrări la un tabel legat atunci când nu există nici o înregistrare asociată în tabelul primar,
modificarea de valori în tabelul primar care ar duce la apariţia de înregistrări fără părinte în tabelul
asociat sau ştergerea de înregistrări din tabelul primar atunci când există înregistrări asociate.
Visual FoxPro furnizează un generator de integritate referenţială (RI - Referential Integrity
Builder) care permite determinarea tipurilor de reguli ce se doresc întărite, tabelele pentru care
regulile trebuie întărite şi evenimentele de sistem care impun mediului să verifice respectarea
regulilor de integritate referenţială.
Generatorul RI gestionează mai multe niveluri de ştergere şi actualizări în cascadă şi este
instrumentul cel mai potrivit pentru generarea integrităţii referenţiale.
- în Database Designer se selectează Referential Integrity din meniul Database.

4
Prin folosirea generatorului de integritate referenţială în scopul de a crea regulile pentru baze de
date, Visual FoxPro generează cod care întăreşte regulile de integritate referenţială, cod salvat sub
formă de declanşatoare care conţin referinţe la procedurile stocate. Acest cod poate fi vizualizat
deschizând editorul de text pentru procedurile stocate.
Notă: Dacă se intervine în arhitectura bazei de date, prin modificarea tabeleor sau a indecşilor folosiţi
într-o relaţie persistentă va trebui rulat din nou generatorul RI înainte de a folosi baza de date. Aceasta
determină revizuirea codului procedurilor stocate şi a declanşatoarelor tabelelor folosite pentru a întări
integritatea referenţială astfel încât aceasta să reflecte noua arhitectură.

Vizualizarea şi modificarea arhitecturii bazei de date

Când se construieşte o bază de date, Visual FoxPro crează şi deschide în mod exclusiv un
fişier .dbc (DataBase Container), care stochează toate informaţiile despre baza de date, inclusiv numele
fişierelor şi obiectelor asociate. Fişierul .dbc nu conţine în mod fizic nici unul din obiectele de nivel
înalt (tabele sau câmpuri), ci stochează pointerii căilor de acces la fişierele asociate tabelelor din baza
de date.
Vizualizarea schemei bazei de date

Schema bazei de date este o reprezentare a structurii tabelelor şi relaţiilor persistente stabilite în
cadrul bazei de date. Pentru o bază de date deschisă această schemă este afişată în Database Designer,
care este deschis cu comanda MODIFY DATABASE.
Exemplu: MODIFY DATABASE Parteneri

Navigarea prin fişierul bazei de date

Fişierul bazei de date conţine câte o înregistrare pentru fiecare tabel, vedere, index, relaţie
persistentă şi conexiune asociată bazei de date, precum şi pentru fiecare câmp din tabel sau
vedere cu proprietăţi extinse. Fişierul mai conţine o unică înregistrare cu toate procedurile
stocate în baza de date.
Database Designer oferă o reprezentare conceptuală a schemei bazei de date. Se poate naviga
printr-o bază de date închisă folosind comanda USE pentru fişierul .dbc.
Exemplu: CLOSE DATABASE Parteneri
USE Parteneri.dbc EXCL

5
BROWSE

Intrebari si exercitii

1. Deschideţi simultan 3 tabele folosind aliasuri definite de utilizator şi vizualizaţi-le folosind


fereastra Data Session.

2. Modificaţi structura tabelului “Intrari” astfel încât între tabelele “Materiale” şi “Intrari ” să
existe o legătură de tip 1:N. (Ce modificare trebuie să faceţi???)
Introduceţi câteva înregistrări în tabelul „Intrari”, având grijă ca în câmpul cheie străină (codm), să aveţi
aceeaşi valoare pentru mai multe înregistrări. (Această valoare va trebui să se regăsească printre valorile
cheii primare din tabelul Materiale).
Stabiliţi relaţii temporare (SET RELATION) între cele două tabele între care există relaţii de tip 1:N.
Verificaţi rezultatele.

3. Stabiliţi legături persistente între tabelele bazei de date.

4. Vizualizaţi schema bazei de date. Navigaţi prin fişierul bază de date (.dbc).

5. Studiaţi generatorul integrităţii referenţiale. Stabiliţi diferite modalităţi de păstrare a integritaţii


referentiale, si testaţi-le.

S-ar putea să vă placă și