Download - Baze de Date VFP
1
CREAREA ŞI GESTIUNEA BAZELOR DE DATE
ÎN VISUAL FOXPRO
O bază de date în Visual FoxPro are ataşat un fişier special, cu structură de tabel, cu extensia
.DBC (DataBase Container) în care sunt memorate printre altele structurile tabelelor componente,
relaţiile permanente dintre tabelele bazei de date, caracteristici suplimentare ale tabelelor din baza de
date, caracteristici ale bazei de date în ansamblul ei şi proceduri care urmează a fi executate la apariţia
unor evenimente.
Fişierul .DBC este un container care nu conţine deci fizic tabelele componente sau câmpuri ale
acestora, ci memorează pointerii (marcatori), căile de acces la fişierele asociate tabelelor, precum şi
celelalte informaţii despre tabele, restricţii de integritate, proceduri stocate, etc. Mai exact, pentru
tabele, DBC, conţine o serie de elemente, cum ar fi: nume lungi pentru tabele şi câmpuri (în versiunile
xBase acestea erau limitate la 10 caractere), clauze pentru validări la nivel de înregistrare şi câmpuri,
valori prestabilite pentru unele câmpuri, denumiri noi pentru câmpuri, declanşatori pentru actualizarea
înregistrărilor, relaţii persistente între tabele, respectiv integritate referenţială. Deci, o bază de date
astfel definită permite controlul integrităţii datelor implicate în relaţii.
Baza de date asigură legarea, din punct de vedere conceptual, a tabelelor, care conţin date
referitoare la un domeniu, cu respectarea granularităţii. De exemplu, vom introduce într-o bază de date
tabele conţinând date referitoare la vânzarea produselor unei firme sau tabele referitoare la activitatea
de personal. De regulă, însă, vom evita amestecarea acestor două categorii de tabele în aceeaşi bază de
date.
Construirea unei baze de date în Visual FoxPro se realizează în următoarele etape:
1. crearea bazei de date;
2. încorporarea în noua bază de date a tabelelor simple anterior create şi construirea noilor
tabele ce vor fi încorporate direct în baza de date;
3. specificarea pentru tabelele simple incluse în baze de date a unor caracteristici ce nu se
puteau declara în momentul construirii lor, ca tabele izolate;
4. stabilirea legăturilor permanente între tabelele bazei de date;
5. precizarea unor caracteristici ale noii baze de date;
6. includerea în baza de date a unor vederi, conexiuni cu date externe etc.
1.Crearea bazei de date
Crearea fişierului bazei de date se poate realiza, conform metodologiei creării unor obiecte noi,
în unul din următoarele moduri:
a) prin folosirea constructorului de baze de date (Database Designer) apelat din meniul
sistem;
b) prin folosirea ferestrei PROJECT MANAGER;
c) prin folosirea comenzii CREATE.
a) Crearea bazei de date prin folosirea constructorului de baze de date
In acest caz, din meniul FILE se selectează opţiunea NEW, având ca efect afişarea pe ecran a
chenarului cu acelaşi nume. Afişarea chenarului New se poate realiza şi direct prin efectuarea unui clic
pe prima pictogramă New, din bara de instrumente standard, sau prin utilizarea combinaţiei de taste
Ctrl+N.
2
Din chenarul New se va selecta butonul radio Database şi apoi opţiunea New File. Ca urmare a
selectării acestei opţiuni, pe ecran va fi afişată fereastra CREATE în care se cere introducerea numelui
pentru baza de date şi directorul în care se memorează noua bază de date. După completarea acestor
informaţii, prin acţionarea butonului Save pe ecran apare fereastra constructorului bazei de date
Database Designer). In acelaşi timp, la meniul sistem se adaugă opţiunea Database, care conţine
diferite opţiuni pentru operaţii cu baze de date.
Deocamdată baza de date nou creată este vidă şi este deschisă în fereastra Database Designer.
In fereastra Database Designer vom popula noua bază de date cu tabele folosind opţiuni din
meniul contextual (obţinut prin clic cu butonul drept al mouse-ului), opţiuni din bara cu instrumente
aferentă ferestrei Database Designer sau opţiuni din meniul Database. Aşa după cum s-a amintit,
tabelele introduse în baza de date pot fi tabele existente (libere) sau create în momentul respectiv.
Pentru a afişa bara de instrumente aferentă ferestrei Database Designer, dacă nu este afişată, se
va selecta din meniul principal opţiunea View şi apoi din submeniul aferent, opţiunea Toolbars. Se va
face apoi un clic pe chenarul de selecţie corespunzător Database Designer şi apoi pe butonul OK care
va determina afişarea pe ecran a barei de instrumente aferente.
După crearea bazei de date şi eventual popularea ei cu tabele, fereastra Database Designer se închide
prin efectuarea unui clic pe butonul de închidere . Ca urmare, toate informaţiile sunt salvate în noua
bază de date.
3
b) Crearea bazei de date prin comenzi
Pentru crearea bazei de date prin comenzi se foloseşte comanda CREATE cu sintaxa:
CREATE DATABASE [ <nume-baza-date>|? ]
La execuţia acestei comenzi are loc crearea unei baze de date şi deschiderea acesteia în zona
curentă. Semnificaţia opţiunilor din cadrul comenzii este următoarea:
- <nume bază date> - specifică un nume pentru baza de date ce urmează a fi creată
- ? - afişează caseta de dialog CREATE
- dacă nu se specifică nici <nume-bază-de-date> şi nici ? efectul este identic cu utilizarea ?,
adică se afişează chenarul CREATE şi se continuă ca în cazul a).
Noua bază este deschisă exclusiv dacă s-a utilizat în prealabil comanda SET EXCLUSIVE.
Exemplu: CREATE DATABASE PERSONAL
are ca efect crearea şi deschiderea în mod exclusiv a bazei de date PERSONAL, care poate fi
eventual vidă.
Observaţie. O bază de date creată cu DATABASE DESIGNER sau comanda CREATE poate fi vizualizată
prin adăugarea ei într-un proiect, prin acţionarea butonului ADD… din fereastra Project
Manager, care determină afişarea ferestrei OPEN cu bazele de date existente.
Alte operaţii referitoare la bazele de date
De asemenea, La introducerea comenzii OPEN DATABASES în fereastra de comandă apare
fereastra OPEN cu bazele de date existente, de unde se poate selecta baza de date ce urmează a fi
deschisă.
1. Afişarea ferestrei Database Designer se poate realiza şi cu ajutorul comenzii:
2. Dacă baza de date selectată şi deschisă în fereastra Database Designer conţine tabele,
acestea apar afişate în cadrul ferestrei respective sub forma unor mici dreptunghiuri care
includ câmpurile din structura tabelului. Aceste dreptunghiuri au caracteristicile unei
ferestre WINDOWS, deci pot fi redimensionate sau mutate, de asemenea cu butonul din
dreapta al mouse-ului se obţine un meniu contextual aferent tabelelor, pentru a efectua
diferite operaţii cu tabela respectivă.
3. Pentru a obţine informaţii despre baza de date curentă putem folosi comanda:
Comanda permite afişarea numelui, a căii de acces şi a versiunii a bazei de date, precum şi
informaţii referitoare la tabelele conţinute în baza de date, adică numele acestora şi ale
câmpurilor aferente.
MODIFY DATABASE <nume-bază-date>
DISPLAY DATABASES
4
Ştergerea fizică a bazei de date permite mediului Visual FoxPro să elimine legăturile înapoi
către baza de date ştearsă din tabelele care au aparţinut bazei de date. Tabelele aferente unei baze de
date şterse fizic nu vor fi şterse de pe disc, ele rămânând tabele libere.
Pentru ştergerea fizică a unei baze de date se poate utiliza comanda DELETE DATABASES
cu următoarea sintaxă:
Opţiunile <nume-bază de date> şi ? au aceeaşi semnificaţie ca şi la comanda CREATE
DATABASES.
Opţiunea DELETE TABLES şterge împreună cu baza de date şi tabelele aferente acesteia.
Opţiunea RECYCLE nu şterge imediat baza de date de pe disc, ci o plasează în Windows
Recycle Bin.
Exemplu: DELETE DATABASES STUDENT DELETE TABLES
Comanda va determina ştergerea de pe disc a bazei de date STUDENT şi a tabelelor aferente
acesteia.
2.Deschiderea şi închiderea bazelor de date
Deschiderea bazelor de date
Se poate realiza prin utilizarea comenzii USE cu simbolul "!", care are sintaxa:
Prin deschiderea unei noi baze de date nu are loc închiderea bazelor de date anterior deschise.
Acestea rămân în continuare deschise, iar ultima bază de date deschisă devine baza de date curentă,
numele ei fiind afişat în caseta de pe bara de instrumente standard a ferestrei Visual FoxPro.
Pentru deschiderea unei baze de date se poate folosi comanda OPEN în formatul:
Semnificaţia opţiunilor din cadrul comenzii este următoarea:
- <nume- bază de date> - precizează numele bazei de date ce urmează a fi deschisă, la care
Visual Fox Pro adaugă automat extensia .DBC; dacă în locul numelui bazei de date se
foloseşte caracterul ? sau nu se specifică acest argument, pe ecran se va afişa caseta de
dialog OPEN din care se selectează baza de date care urmează a fi deschisă;
- EXCLUSIVE - permite deschiderea bazei de date în modul exclusiv. Ca urmare un alt
utilizator nu mai poate avea acces în acelaşi timp la baza de date respectivă, cât timp aceasta
este deschisă ;
- SHARED - deschide baza de date în mod partajat, astfel că şi alţi utilizatori pot avea acces
în acelaşi timp la baza de date respectivă. Modurile de lucru exclusive sau shared se exclud
reciproc şi se pot stabili şi printr-o comandă SET;
- NOUPDATE - indică faptul că nu se pot face modificări în baza de date, adică aceasta va fi
deschisă în modul read-only. Dacă se omite această opţiune, baza de date este deschisă în
DELETE DATABASES [<nume – bază de date>| ?][DELETETABLES] [RECYCLE]
USE <nume-bază-date>!<nume_tabel>
OPEN DATABASE [<nume-baza-date>|?][EXCLUSIVE][SHARED]
[NOUPDATE] [VALIDATE]
5
modul read-write. Tabelele din baza de date nu sunt afectate de opţiunea NOUPDATE.
Pentru a evita o modificare într-o tabelă din baza de date se va folosi în comanda de
deschidere a tabelei respective opţiunea NOUPDATE.
- VALIDATE - permite validarea referinţelor din baza de date, adică, dacă referinţele
tabelelor la baza de date din care fac parte există în tabelele respective.
Observaţii.
1. cât timp baza de date este deschisă, toate tabelele conţinute în baza respectivă sunt
accesibile, cu unele excepţii, în care tabelele trebuie deschise cu comanda USE ;
2. după deschiderea uneia sau a mai multor baze de date, toate obiectele sau tabelele adăugate
devin implicit componente ale bazei de date curente. Pentru a afişa numele bazei de date
curente se poate folosi funcţia DBC( ), iar pentru schimbarea bazei de date curente se va
folosi comanda:
3. pentru a obţine numele şi calea pentru toate bazele de date deschise se poate folosi funcţia
ADATABASES(<nume-masiv> ). Aceasta creează un masiv bidimensional, prima
dimensiune reprezentând numele bazei de date, iar a doua dimensiune, calea de acces.
Funcţia returnează valoarea numărului bazelor de date descrise, deci 0 dacă nu este
deschisă nici o bază de date.
4. baza de date curentă se mai poate stabili şi prin selectarea unei baze de date din lista
derulantă care conţine bazele de date deschise, de pe bara cu instrumente standard.
5. Visual FoxPro poate deschide automat o bază de date la execuţia unei cereri (Query) sau a
unei forme (Form).
Exemplu:
OPEN DATABASE BAZA1
OPEN DATABASE BAZA2
?DBC( )
SET DATABASE TO BAZA1
? DBC( )
? DATABASES(A2)
DISP MEMORY LIKE A2
Accesul la tabelele unei baze de date
Pentru selectarea unei tabele din baza de date curentă se poate folosi:
- fereastra Database Designer
- fereastra Project Manager
- comanda USE cu semnul "?".
USE? are ca efect deschiderea casetei de dialog USE din care se poate selecta tabela ce
urmează a fi deschisă.
SET DATABASE TO <nume-baza-date>
6
Acelaşi efect se obţine prin utilizarea comenzii USE în formatul:
Inchiderea unei baze de date
Pentru închiderea bazei de date curente şi a tabelelor aferente se poate folosi comanda:
Exemplu:
SET DATABASE TO PERSONAL
CLOSE DATABASE
Pentru a închide toate obiectele deschise la un moment dat se utilizează comanda CLOSE
ALL.
Observaţii.
1. La închiderea unei baze de date selectate din fereastra Project Manager, după operaţia de
închidere se ascund toate nivelele inferioare aferente, iar în faţa bazei de date se afişează
pictograma +.
2. Comanda CLOSE DATABASE nu închide baza de date deschisă în fereastra Project
Manager apare pictograma Θ sau dacă baza de date este deschisă de un formular care
rulează.
USE <nume-bază-date>!<nume_tabel>
CLOSE DATABASE
CLOSE ALL
7
3.Caracteristici noi ale tabelelor din baza de date
Tabelele asociate unei baze de date prezintă o serie de facilităţi comparativ cu tabelele libere,
neasociate la nici o bază de date, cum ar fi:
- stabilirea unor reguli de validare la nivel de câmp şi înregistrare.
- definirea unor formate de introducere şi afişare a datelor dintr-o tabelă.
- adăugarea unor comentarii pentru orice câmp al unei tabele.
- setarea unor valori implicite pentru un câmp al tabelei.
- definirea de nume lungi pentru tabele şi câmpuri.
- stabilirea unor titluri pentru câmpurile unei tabele.
Aceste facilităţi pot fi puse în aplicare încă de la crearea structurii unei tabele, unde pentru
fiecare câmp putem preciza anumite reguli de validare, valori implicite sau anumite formate în cazul
afişării datelor respective într-o fereastră Browse sau într-un raport.
Stabilirea unui titlu pentru câmp
La afişarea conţinutului unei tabele într-o fereastră Browse, în mod implicit coloanele tabelei
conţin ca şi titlu denumirea câmpurilor din structura acesteia. Acestea, reprezintă în majoritatea
cazurilor, prescurtări de denumiri şi prin urmare sunt mai greu de înţeles la afişarea tabelei.
Pentru a înlătura acest fapt, Visual FoxPro permite stabilirea pentru fiecare câmp din structura
unui tabel a unor titluri sau etichete descriptive care vor apare ca şi antet în coloanele unei ferestre
Browse sau în cadrul unui raport.
In acest scop în caseta Caption din fereastra Table Designer se introduce titlul aferent câmpului
selectat şi se acţionează butonul OK. Ca efect, la afişarea tabelei într-o fereastră Browse în coloana
aferentă câmpului respectiv va apare textul introdus în caseta Caption în locul numelui de câmp din
structura tabelei.
Exemplu: pentru câmpul CODP din tabela PRODUSE se stabileşte ca şi titlu textul: CODUL
PRODUSULUI.
Adăugarea unui comentariu la câmp
Pentru fiecare câmp din structura unui fişier putem adăuga un comentariu care poate include
anumite informaţii despre câmpul respectiv cum ar fi: semnificaţia acestuia, ce date va putea conţine,
ce alte facilităţi au fost stabilite pentru câmpul respectiv, etc. Textul din cadrul comentariu poate fi cât
de lung, deoarece acesta este memorat într-un câmp de tip memo.
Textul respectiv se afişează în fereastra Table Designer; nu se modifică în zona Description la
selectarea câmpului din tabelă. El serveşte pentru a înţelege modul de concepere şi proiectare a
câmpului respectiv.
In scopul introducerii unui comentariu pentru un câmp dintr-o tabelă a bazei de date, se
deschide fereastra Table Design şi se introduce comentariu în caseta Field Comment, după care se
acţionează butonul OK.
Un comentariu poate fi introdus şi cu funcţia DBSETPROP( ).
Exemplu: se introduce un comentariu pentru câmpul CODP din fişierul PRODUSE. Afişarea
comentariului se realizează cu funcţia DBGETPROP ().
8
?DBSETOROP("PRODUSE.CODP","field", "comment", "câmpul CODP conţine codul
produsului").
?DBGETPROP(“PRODUSE.CODP”,”FIELD”,”COMMENT”)
Definirea de nume lungi pentru tabele
Sistemul Visual FoxPro permite utilizarea pentru câmpuri şi tabele a unor nume lungi de până
la 128 caractere. Un astfel de nume nu poate include spaţii pentru că sistemul nu poate depista unde se
termină numele respectiv. Pentru a folosi totuşi nume lungi, format din mai multe cuvinte, se poate
scrie cu majuscule începutul fiecărui cuvânt din nume, sau cuvintele se pot delimita între ele prin
liniuţa de subliniere (underscore).
Tabelele pot avea nume lungi de până la 128 de caractere care se introduce în caseta Table
Name din fereastra Table Designer, pagina Table.
Pentru definirea de nume lungi pentru tabele se poate folosi comanda CREATE TABLE cu
opţiunea NAME.
Exemplu:
CREA TABLE PRODUSE (;
CODP N(5) NAME "COD PRODUS",
ORAS C(10) NAME "ORASUL")
Numele lungi pot conţine cifre, litere şi liniuţă de subliniere şi trebuie să înceapă cu o literă sau
liniuţă de subliniere.
Setarea unei valori implicite pentru un câmp
O altă facilitate a tabelelor din baza de date este aceea de a permite introducerea de valori
implicite pentru unul sau mai multe câmpuri din cadrul unei tabele. Valoarea respectivă se va încărca
automat în câmpul aferent la adăugarea unei noi înregistrări în tabelă în mod interactiv, sau la execuţia
unei comenzi APPEND.
Valoarea implicită poate fi definită ca valoare absolută, fie ca expresie care poate conţine o
funcţie de sistem sau utilizator. Rezultatul evaluării expresiei trebuie să fie compatibil cu tipul pentru
care se defineşte o valoare explicită.
In scopul precizării unei valori implicite pentru un anumit câmp dintr-o tabelă ea se introduce în
caseta de text Default Value din pagina Fields a chenarului Table Designer şi de a o memora în
câmpul corespunzător. De asemeni, se pot folosi comenzile ALTER TABLE (comandă SQL netratată
în prezentiul material) cu clauza SET DEFAULT şi CREATE TABLE cu clauza DEFAULT
VALUE.
Exemplu:
CREATE TABLE TRANZ (;
DATAC D;
DEFA DATE ( ))
CREATE TABLE F2 (C1 C(20), ;
C2 N(5) DEFAULT 100)
9
Observaţii.
1. Valoarea implicită este încărcată în câmpul aferent, indiferent de modul de introducere al
datelor: formular, fereastră BROWSE, vedere, program şi rămâne valabil până se introduce o
nouă valoare în acel câmp.
2. Se poate specifica pentru orice tip de date, mai puţin cele de tip General.
3. Valoarea implicită trebuie să corespundă tipului de câmp şi să nu încalce regulile de validare
la nivel de câmp. Astfel, dacă câmpul este de tip caracter, valoarea implicită se introduce
între ghilimele.
4. Dacă dorim ca un câmp să conţină ca valoare implicită, valoarea NULL, Visual FoxPro va
insera această valoare în câmpul respectiv pentru orice operaţie de adăugare de înregistrări,
chiar dacă SET NULL nu este activă.
5. Utilizarea valorilor implicite măreşte viteza de introducere a datelor şi poate preîntâmpina
lăsarea unor câmpuri necompletate.
Definirea formatului de afişare şi citire pentru un câmp
In cazul în care datele din câmpurile unei tabele urmează a fi afişate într-o fereastră Browse,
într-un raport sau pe ecran cu comenzi de afişare (LIST, DISPLAY), pentru fiecare din aceste câmpuri
se poate preciza un format de afişare explicit.
Acest format se stabileşte pe baza unor coduri de afişare ca şi în FoxPro 2.6, care se introduc în
caseta Format din zona Display a ferestrei Table Designer.
Formatul de afişare sau masca de ieşire aferentă unui câmp, se poate preciza şi prin folosirea
funcţiei DBSETPRO( ) cu parametrul Format astfel:
?DBSETPROP ('produse.pret'.'field','format','99999.99')
Formatul de citire sau masca de intrare permite definirea unor atribute de formatare pentru
valorile datelor de intrare. O astfel de mască este asemănătoare formatului de afişare, doar că se referă
la preluarea de date într-o tabelă. Codurile pentru formatul de citire se introduc în caseta Imput mask
din fereastra Table Designer. Măştile de intrare se definesc de obicei pentru anumite categorii de date
care trebuie introduse într-o anumită formă, cum ar fi: numere de telefon, adresă email, etc. Această
proprietate realizează ceea ce proprietatea Format nu poate realiza şi anume, verifică ce caractere sunt
introduse într-un câmp şi în ce mod. Masca de intrare reprezintă deci un model pe care trebuie să-l
respecte datele de intrare pentru care s-a introdus această proprietate.
Exemplu:
Câmp Masca de intrare Explicaţii
ORAS !aaaaa prima literă va fi majusculă
TEL 99-99-99 se introduc grupe de câte 2 cifre
Email [email protected] ex:[email protected]
PRET 99,999.99 grupa miilor şi sutelor de mii se
desparte cu virgulă
4.Adăugarea tabelelor într-o bază de date
Prin adăugarea unei tabele într-o bază de date se creează o legătură între fişierul tabelei şi
containerul bazei de date. Informaţia de legătură despre tabela stocată în fişierul bazei de date, este o
legătură înainte (→), iar informaţia de legătură despre baza de date în care se include o tabelă, stocată
în fişierul tabelei, este o legătură înapoi (←)
10
Orice tabelă din Visual FoxPro poate exista în una din următoarele stări:
tabelă liberă - adică sub formă de fişier .dbf neasociat nici unei baze de date.
tabelă asociată - adică sub formă de fişier .dbf asociat unei baze de date (inclus în baza de
date).
Tabelele pot fi asociate unei baze de date prin crearea lor direct în cadrul bazei de date
existente sau prin adăugarea acestora după ce au fost create ca şi tabele libere.
Observaţie. Tabelele asociate unei baze de date, prezintă anumite avantaje faţă de cele libere, cum ar
fi: posibilitatea utilizării unor nume lungi pentru tabelele şi câmpurile din structura acestora, a
unor valori implicite pentru anumite câmpuri, a unor reguli de validare la nivel de câmp şi
înregistrare etc.
Crearea unei tabele noi în cadrul bazei de date
Pentru crearea unei tabele noi în cadrul bazei de date existente, există mai multe posibilităţi.
Una dintre aceste posibilităţi se bazează pe utilizarea ferestrei Database Designer. În fereastra
deschisă cu butonul din dreapta al mouse-ului afişăm un meniu contextual din care selectăm obţiunea
New Table. Această opţiune poate fi selectată şi din meniul Database.
După crearea uneia sau mai multor tabele prin procedeul descris anterior, acestea vor fi afişate
în fereastra Database Designer.
Adăugarea tabelelor libere la o bază de date
O modalitate de includere a unei tabele libere sau externe într-o bază de date se poate realiza
prin intermediul ferestrei Database Designer. Având pe ecran deschisă această fereastră, vom selecta
opţiunea Add Table de pe bara de instrumente Database Designer, din meniul vertical Database, sau
din meniul contextual al ferestrei Database Designer. Ca urmare, se va afişa pe ecran fereastra Open
din care se selectează tabela ce urmează a fi adăugată şi se acţionează butonul OK. În fereastra Open
apar atât tabele aferente proiectelor existente din secţiunea Free Tables, cât şi tabelele care nu au fost
incluse încă într-un anumit proiect.
Adăugarea unei tabele externe la o bază de date se mai poate realiza prin folosirea comenzilor
OPEN DATABASE şi ADD TABLE.
11
Exemplu:
OPEN DATABASE PERSONAL
ADD TABLE SALARII
Observaţii.
1. La bazele de date pot fi adăugate numai tabele libere sau externe care nu aparţin unei alte
baze de date. Cu alte cuvinte, un tabel poate fi adăugat la o singură bază de date. Atunci când
se adaugă o tabelă într-o bază de date, Visual FoxPro modifică primul octet al fişierului .dbf,
interzicând astfel folosirea acesteia ca tabelă liberă sau adăugarea ei într-o altă bază de date.
Încercarea de a o adăuga la o a doua bază de date, determină afişarea pe ecran a unui mesaj
de eroare de forma
File <nume-tabel> is part of a database
2. Tabela adăugată nu poate avea acelaşi nume cu o tabelă existentă în baza de date respectivă.
3. Datele dintr-o tabelă liberă (fişier .dbf) pot fi folosite şi fără a asocia tabela respectivă unei
baze de date.
4. Pentru a regăsi rapid o tabelă într-o bază de date, se selectează opţiunea Find Object din
meniul Database sau din meniul contextual al ferestrei Database Designer, având ca efect
afişarea ferestrei Find Table. Din această fereastră se selectează tabela dorită, care va apare
în prim plan în fereastra Database Designer.
5. Pentru adăugarea într-o bază de date a unei tabele externe care nu apare în fereastra Project
Manager deschisă, se poate selecta direct butonul Add din fereastra Project Manager, prin
care se deschide fereastra Open din care se selectează tabela ce urmează a fi adăugată. In
prealabil, în fereastra Project Manager vom selecta baza de date în care se adaugă tabela şi
câmpul Tables.
6. Pentru a avea acces la o tabelă inclusă în altă bază de date decât cea curentă, se poate folosi
comanda USE cu simbolul "!" descrisă anterior, prin care se stabileşte o referinţă la o tabelă
din altă bază de date.
Exemplu: USE STOCURI! CATALOG
Comanda va deschide automat baza de date STOCURI din care face parte fişierul
CATALOG, fără să o configureze ca şi bază de date curentă. In continuare, o comandă
BROWSE va afişa conţinutul fişierului CATALOG. Odată cu închiderea fişierului
CATALOG, se va închide automat şi baza de date aferentă, adică STOCURI.
5. Eliminarea unei tabele dintr-o bază de date
Dacă dorim ca o tabelă dintr-o bază de date să fie folosită într-o altă bază de date sau nu mai
avem nevoie de tabela respectivă în baza de date din care face parte, aceasta poate fi eliminată din acea
bază de date.
Prin eliminarea unei tabele din baza de date, aceasta revine la statutul de tabelă liberă. Dacă
dorim, putem opta pentru ştergerea fizică a tabelei de pe hard-disc. Procesul de eliminare a unei tabele
din baza de date determină în acelaşi timp şi actualizarea informaţiilor de legătură înapoi, pentru a
reflecta noul statut al tabelei, cel de tabelă liberă.
Pentru eliminarea unei tabele din baza de date se pot folosi următoarele procedee:
1. Dacă baza de date este deschisă în fereastra Database Designer, se selectează din cadrul
ferestrei tabela ce urmează a fi eliminată şi apoi opţiunea Remove din meniul Database sau
butonul Remove Table de pe bara de instrumente Database Designer sau opţiunea Delete
din meniul contextual al tabelei selectate.
12
2. Prin utilizarea comenzii:
Exemplu.
OPEN DATABASE <nume-bază-date>
REMOVE TABLE <nume-fişier-tabelă>
Dacă dorim să ştergem fizic fişierul .dbf aferent tabelei de pe disc, vom folosi clauza DELETE
în comanda REMOVE, sau comanda:
Exemplu:
REMOVE TABLE <nume-fişier-tabelă> DELETE sau
DROP TABLE <nume-fişier-tabelă>
Observaţii 1. Tabela eliminată cu opţiunea REMOVE poate fi văzută în fereastra OPEN, de unde poate fi
selectată şi mutată în altă bază de date.
2. Prin folosirea comenzii DROP TABLE are loc ştergerea unei tabele împreună cu toţi
indecşii primari, valorile implicite şi regulile de validare asociate tabelei.
3. Pentru a şterge numai fişierul .dbf se poate folosi comanda:
In cazul în care comanda ERASE se foloseşte pentru un fişier asociat unei baze de date, nu
se va actualiza şi legătura înapoi spre baza de date, ceea ce poate determina anumite erori.
4. La folosirea comenzii REMOVE TABLE cu opţiunea DELETE se şterge şi fişierul memo
asociat (.ftp) şi fişierul index structural (.cdx).
5. O tabelă nu poate fi mutată cu drag-drop dintr-o bază de date în secţiunea FREE TABLES
sau în altă bază de date, deoarece orice tabelă inclusă într-o bază de date este protejată, având
în vedere că prin operaţia de mutare, dacă tabela este în relaţie cu alte tabele, poate fi afectată
integritatea datelor. De aceea, ea se elimină mai întâi din prima bază de date şi apoi se
adaugă în a doua bază de date.
6. Vizualizarea schemei bazei de date
Schema bazei de date este o reprezentare a structurii tabelelor din cadrul bazei de date
respective şi a relaţiilor persistente dintre aceste tabele. Aceasta apare afişată în fereastra proiectantului
bazei de date (Database Designer) şi se referă la baza de date deschisă.
Acelaşi efect se obţine prin folosirea comenzii:
REMOVE TABLE
DROP TABLE
ERASE <nume-fişier>
MODIFY DATABASE <nume - bază - date>
13
Exemplu. MODIFY DATABASE VÂNZĂRI - determină deschiderea bazei de date VANZARI şi
afişarea în fereastra Database Designer a schemei acesteia.
In fereastra Database Designer, cu ajutorul opţiunilor din meniul Database din meniul
contextual al ferestrei Database Designer al unei tabele din fereastră, sau cu ajutorul pictogrameleor de
pe bara de instrumente a constructorului de baze de date, se pot efectua diferite prelucrări referitoare la
tabelele afişate, cum ar fi: crearea unei noi tabele, modificarea structurii unei tabele, adăugarea sau
eliminarea unei tabele existente din baza de date deschisă în fereastra Database Designer.
Tabelele pot fi vizualizate în cadrul ferestrei Database Designer sub formă restrânsă
(collapsed) sau extinsă (expanded). In acest sens, putem restrânge sau extinde fiecare tabelă separat
folosind cele două opţiuni: Collapse sau Expand din meniul shortcut aferent tabelei, sau putem
restrânge sau extinde în acelaşi timp toate tabelele din cadrul ferestrei Database Designer selectând
opţiunile: Collapse All sau Expand All din meniul Shortcut al ferestrei Database Designer.
Indiferent dacă tabelele din fereastra Database Designer sunt restrânse sau nu, avem
posibilitatea să le aranjăm pe orizontală şi respectiv după nume sau tip.
In acest scop, din meniul Database se va selecta opţiunea Arrange, care determină deschiderea
ferestrei Arrange Tables and Views
Opţiunile pot fi combinate pentru a obţine aranjamentul dorit. După selectarea opţiunilor dorite,
se va acţiona butonul OK .
14
Pentru a memora în baza de date anumite explicaţii despre tabele şi relaţiile dintre ele, le putem
ataşa un comentariu selectând din meniul Database opţiunea Properties, prin care se deschide fereastra
cu acelaşi nume. Comentariile dorite se vor introduce în caseta de editare Comments.
Opţiunile din acest meniu permit:
- modificarea structurii tabelei selectate (Modify…);
- afişarea conţinutului tabelei într-o fereastră Browse (Browse);
- restrângerea unei tabele (Collapse);
- ştergerea unei tabele (Delete).
Observaţie. Prin afişarea ferestrei Database Designer aferente constructorului bazei de date, are loc
automat deschiderea bazei de date selectate şi afişarea schemei acesteia (tabele şi relaţii) în cadrul
ferestrei respective.
7.Relaţionarea tabelelor din baza de date în Visual FoxPro
Relaţii persistente
După stabilirea câmpurilor cheie din cele două tabele şi a indecşilor aferenţi se poate defini o
relaţie permanentă între cele două tabele. In acest scop se va afişa pe ecran fereastra constructorului de
baze de date (Database Designer) în care apar tabelele ce compun baza de date.
In tabela părinte se selectează indexul primar şi se face drag-drop la indexul din tabela fiu,
având ca efect crearea relaţiei între cele două tabele. Faptul că relaţia între cele două tabele a fost creată
se indică prin afişarea unei linii care uneşte cei doi indecşi. Inceputul liniei de la tabela părinte conţine
o cruce, iar sfârşitul liniei spre tabele fiu, conţine o bifurcaţie, indicând o relaţie de tip 1-n (one-to-
many).
Pentru exemplificare se consideră tabela PRODUSE (tabela părinte) şi tabela TRANZ (tabela
fiu) indexate după câmpul CODP (cod produs). In tabela PRODUSE câmpul CODP se declară ca şi
index primar, iar în tabele TRANZ ca şi index normal. Ca urmare se va obţine o relaţie de tip una-la-
mai-multe deoarece fiecare produs va avea mai multe tranzacţii de produse.
Fereastra DataBase Designer, după crearea relaţiei anterior specificată arată astfel
15
O relaţie persistentă între două baze de date se poate crea şi prin intermediul comenzii ALTER
TABLE sau CREATE TABLE cu opţiunea FOREIGN KEY.
Fiecare relaţie permanentă reprezintă un obiect Visual, sub forma unei linii cu cele două
simboluri (cruce şi bifurcaţie). Ca urmare, ca orice obiect, poate fi modificat cu ajutorul unor comenzi
specifice.
Pentru modificarea unei relaţii permanente se selectează linia care uneşte cei doi indecşi şi se
deschide meniul shortcut aferent liniei cu un clic pe butonul din dreapta mouse-ului. Din meniul astfel
obţinut se selectează opţiunea Edit Relationship (acelaşi efect se obţine cu dublu clic pe linie) având ca
efect afişarea ferestrei Edit Relationship, În care se fac modificările dorite.
Fereastra Relationship are următoarea structură:
In caseta Related Table sunt incluse expresiile de indexare aferente tablei fiu. Ca urmare, putem
modifica o relaţie existentă cu una nouă selectând o altă expresie de indexare din caseta respectivă şi
apoi acţionând butonul OK.
Pentru ştergerea unei relaţii incorect definite sau care nu mai este necesară, se execută clic pe
linie şi apoi se apasă tasta DELETE, sau din meniul shortcut al liniei se selectează opţiunea Remove.
Observaţii.
1. Relaţiile permanente se stabilesc între indecşi nu între câmpuri, fapt ce permite legarea
tabelelor prin expresii simple sau compuse cu indecşi.
2. La definirea unei relaţii permanente, Visual FoxPro consideră că tabelul părinte se află la
stânga relaţiei şî trebuie să conţină un index primar sau candidat. (Nu se poate crea o relaţie
permanentă pornind de la un index unic sau normal).
16
3. Un index unic nu interzice introducerea în tabelă a mai multor înregistrări cu aceeaşi
valoare a cheii de indexare, dar păstrează un pointer numai la prima înregistrare din grupul
celor cu aceeaşi valoare a cheii de indexare.
Utilizarea Generatorlui de Integritate Referenţială (Referential Integrity Builder)
Se deschide baza de date în fereastra Database Designer şi se selectează opţiunea Refernţial
Integrity din meniul Database.
1. In fereastra Database Designer se execută dublu clic pe linia care defineşte relaţia între două
tabele. Ca efect se va afişa caseta Edit Relationship de unde se acţionează apoi butonul
Referential Integrity..
2. Se execută un clic cu tasta din dreapta mouse-ului pe linia de legătură dintre cele două
tabele, în fereastra Database Designer, iar din meniul Shortcut obţinut se selectează opţiunea
Edit Referenţial Integrity.
In ambele cazuri, în final, pe ecran se afişează fereastra Referential Integrity Builder, în care se
specifică pentru fiecare relaţie tabelul părinte şi fiu, regulile de integritate şi tagurile aferente celor
două tabele.
Singurele informaţii care pot fi modificate sunt cele privind valorile pentru regulile de
integritate aferente operaţiilor de adăugare, modificare, ştergere. In acest scop se selectează butonul de
opţiuni (radio) aferent opţiunii dorite şi se execută un clic.
17
Fiecare eveniment (modificare, ştergere, adăugare) are rezervat, în cadrul ferestrei RI Builder
câte o pagină în care se pot seta regulile de integritate pentru evenimentul respectiv. Semnificaţia
acestor pagini este următoarea:
1. Rules for Updating; această pagină conţine regulile de stabilit în cazul modificării datelor
din tabelele legate. Aceste reguli sunt specificate prin următoarele opţiuni:
- Cascade; determină actualizarea automată (în cascadă a cheiii de indexare din înregistrările
tabelei fiu, cu noua valoare a chei primare, dacă în tabela părinte s-a modificat valoarea
câmpului reprezentând cheia primară;
- Restrict; interzice modificarea în tabela părinte a valorii cheii primare, dacă există
înregistrări asociate (cu aceeaşi valoare a cheii de indexare) în tabela fiu;
- Ignore; permite modificări în tabela părinte a cheii primare, chiar dacă înregistrările
asociate din tabela fiu rămân fără corespondent (orfane); deci nu se asigură păstrarea
integrităţii referenţiale.
2. Rules for Deleting; această pagină conţine regulile de stabilit în cazul ştergerii de
înregistrări din tabelele legate. Aceste reguli se specifică prin următoarele opţiuni:
- Cascade; şterge înregistrările corespunzătoare din tabela fiu, dacă s-a şters înregistrarea din
tabelul părinte cu valoarea cheii primare egală cu cea a înregistrărilor asociate;
- Restrict; interzice ştergerea înregistrărilor din tabela părinte cu o anumită valoare a cheii
primare, dacă în tabela fiu există înregistrări cu aceeaşi valoare a cheii de indexare; dacă
dorim să ştergem înregistrări din tabelul părinte va trebui mai întâi să ştergem toate
înregistrările aferente din tabelul copil.
- Ignore; permite ştergerea înregistrărilor din tabelul părinte, chiar dacă în tabela fiu există
înregistrări cu aceeaşi valoare a cheii de indexare, lăsând orfane aceste înregistrări.
3. Rules for Inserting; această pagină conţine regulile de stabilit în cazul adăugării de noi
înregistrări în tabelele legate. Aceste reguli sunt definite prin opţiunile:
- Restrict; interzice introducerea în tabela fiu de noi înregistrări dacă în tabela părinte nu
există o înregistrare cu aceeaşi valoare a cheii de indexare
- Ignore; permite adăugarea de noi înregistrări în tabela fiu chiar dacă acestea nu au
corespondent în tabela părinte. Ca urmare, nu se face nici o verificare a integrităţii
referenţiale.
După specificarea regulilor de integritate referenţială aferente celor trei evenimente, pentru
fiecare relaţie se activează butonul OK. Ca efect, sistemul Visual FoxPro va genera automat codul
sursă (procedurile) aferente regulilor definite şi va părăsi Generatorul de Integritate Referenţială.
Procedurile generate automat de RI Builder sunt salvate de Visual FoxPro sub forma unor
declanşatori care conţin referinţe la aceste proceduri. Aceste proceduri sunt memorate în secţiunea
Stored Procedures din fereastra Project Manager.
Pentru a vizualiza codul sursă aferent procedurilor stocate în baza de date se va deschide caseta
de dialog Table Designer de unde se selectează Table Properties pentru a afişa declanşatorii aferenţi.
Acelaşi efect se obţine făcând clic pe butonul Edit Storage Procedures din bara de instrumente a
generatorului de baze de date (Database Designer). De asemenea, în fereastra Project Manager se va
selecta secţiunea Stored Procedures şî se activează butonul Modify..
18
Observaţii.
1. Introducerea restricţionată a datelor, ştergerile restricţionate sau în cascadă cât şi actualizările
restricţionate sau în casacadă sunt obligatorii pentru menţinerea integrităţii referenţiale
2. Integritatea referenţială completează regulile de integritate a datelor din tabele la nivel de câmp
şi înregistrare.
3. După stabilirea regulilor de integritate referenţială, orice încălcare a acestora va genera afişarea
unei casete de dialog cu mesajul de eroare corespunzător operaţiei efectuate.
4. Dacă se modifică structura tabelelor implicate în integritatea referenţială, indecşii sau relaţiile
permanente, se va acţiona din nou în RI Builder pentru a introduce modificările intervenite.
5. Regulile pentru evenimentul ştergere şi modificare sunt aceleaşi şi se referă la tabela părinte, în
schimb regulile pentru inserare se aplică tabelei fiu şi conţin numai două opţiuni: Restrict şi
Ignore, deoarece inserarea nu se poate face în cascadă, adică simultan în ambele tabele.
6. La activarea butonului OK, generatorul afişează o casetă de dialog pentru a confirma salvarea
modificărilor şi memorarea procedurilor generate.
7. Procedurile generate sunt stocate în baza de date în fişierul .DBC
8. Codul aferent procedurilor de integritate se poate scrie direct cu comenzi FoxPro.
9. Pentru verificarea respectării regulilor de integritate referenţială, după efectuarea unor operaţii
de modificare, ştergere sau inserare, se va putea afişa conţinutul tabelelor legate, în câte o
fereastră Browse aşezată pe ecran aşa încât să se poată vedea conţinutul acestora.
Relaţii între mai multe tabele
Dacă dorim să creem relaţii între mai multe tabele, respectiv să legăm un tabel principal de mai
multe tabele secundare, în comanda SET RELATION pentru al doilea tabel secundar se va folosi
clauza ADDITIVE. In caz contrar prima legătură este dezactivată şi înlocuită cu a doua legătură.
Indexarea tabelei principale este opţională ; dacă însă se realizează va determina creşterea
vitezei de realizare a legăturilor.
Exemplu : Se realizează o legătură între tabelele FURNIZORI şi tabelele secundare OFERTE şi
BENEFICIARI.
SELE 1
USE OFERTE
INDEX ON CODF TO ICODF
SET INDEX TO ICODF
SELE 2
USE FURNIZORI
INDEX ON CODB TO ICODB
SET INDEX TO ICODBF
SELE 3
19
USE BENEFICIARI
INDEX ON CODB INTO ICODBB
SELE 2
SET RELATION TO CODF INTO OFERTE
SET RELATION TO CODB INTO BENEFICIARI ADDITIVE
Legături mai multe la mai multe
Aceste legături se realizează printr-o tabelă suplimentară de legătură între cele 2 tabele între
care se stabilesc aceste relaţii.
Exemplu: Se realizează o legătură de acest fel între tabelele FURNIZORI şi PRODUSE indexate după
câmpul CODF. Tabela de legătură se numeşte TAB-LEG şi conţin câmpurile : CODF, CODP.
Secvenţa de comenzi va fi :
SELE 1
USE FURNIZORI
SET ORDER TO CODF
SELE 2
USE PRODUSE
SET ORDER TO CODF
SELE 3
USE TAB_LEG
SET RELATION TO CODF INTO FURNIZORI
SET RELATION TO CODP INTO PRODUSE ADDITIVE
Observaţii.
- în cazul relaţiilor temporare are loc o corelare a indicatorului de înregistrări din tabela
principală cu indicatorul de înregistrări din tabela secundară;
- în cazul relaţiilor permanente se asigură integritatea datelor prin intermediul regulilor de
integritate referenţială, în schimb modificarea indicatorilor de înregistrări din tabela
principală nu determină modificarea indicatorului de înregistrări în tabela secundară;
- pentru a beneficia de facilităţile oferite de cele două tipuri de relaţii (permanente şi
temporare) se recomandă utilizarea ambelor tipuri astfel, după crearea relaţiilor permanente,
la fiecare sesiune de lucru se va lansa în execuţie un program de creare a relaţiilor
temporare.