Baze de Date VFP

19
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.

description

Baze de Date VFP

Transcript of Baze de Date VFP

Page 1: 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.

Page 2: Baze de Date VFP

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.

Page 3: Baze de Date VFP

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

Page 4: Baze de Date VFP

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]

Page 5: Baze de Date VFP

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>

Page 6: Baze de Date VFP

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

Page 7: Baze de Date VFP

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 ().

Page 8: Baze de Date VFP

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)

Page 9: Baze de Date VFP

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 (←)

Page 10: Baze de Date VFP

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.

Page 11: Baze de Date VFP

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.

Page 12: Baze de Date VFP

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>

Page 13: Baze de Date VFP

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 .

Page 14: Baze de Date VFP

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

Page 15: Baze de Date VFP

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).

Page 16: Baze de Date VFP

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.

Page 17: Baze de Date VFP

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..

Page 18: Baze de Date VFP

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

Page 19: Baze de Date VFP

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.