Sunteți pe pagina 1din 17

CURS 1- VISUAL FOXPRO - SGBD RELATIONAL

Ce este Visual Foxpro? Este un SGBD modern , din generatia a 4 de


limbaje, folosit pentru manipularea bazelor de date relationale sub sistemele
de operare din familia Microsoft Windows (95/98/2000/NT ). Este o versiune
pentru Windows, ce continua variantele mai vechi de Foxpro, permitând
manipularea bazelor de date , inclusiv baze de date client -server. El face parte
dintr-un pachet de instrumente de programare numit Visual Studio ( din
pachet mai fac parte Visual C, Visual Basic). Permite programarea bazata pe
obiecte si ofera instrumente visuale ( ce pot fi "trase" pe aplicatie) pentru
construierea suprafetei (interfatei ) grafice de accesare a bazelor de date.

I. LUCRUL CU DATELE

1. Definirea si crearea bazelor de date relationale.Definirea tabelelor


.

Ce este o baza de date relationala ? O baza de date relationala


relationala reprezinta o structura complexa folosita la memorarea si
gestionarea datelor ce descriu un anumit tip de obiecte. Concret, în Visual
Foxpro o baza de date este un container în care sunt puse la un loc mai multe
tabele cu date între care pot sa existe legaturi . Baza de date are asociat un
fisier cu extensia DBC în care sunt memorate date referitoare la baza de date
: tabelele componente, relatiile dintre tabele , dictionarul de date asociate.
Tabelele sunt structuri în care se pot memora date descriind un anumit tip
de elemente. Fiecare caracteristica a elementelor alcatuieste un câmp, iar
elementele propriu-zise sunt memorate în inregistrari. Din punct de vedere
fizic, tabele sunt stocate în fisiere cu extensia dbf :

Exemplu de structura tabelara în care sunt stocate datele:

TABELA.DBF
Câmp1 Câmp2 . Câmp m
Inregistrarea 1
Inregistrarea 2
.
Inregistrarea n
Structura tabelului
Cîmpurile tabelului

Exemplu un tabel datep.dbf dintr-o baza de date cursanti.dbc ,

Nume Prenume DataN Studii Venit


Ion 11:11:1976 SUPERIOARE 12000000

Popescu
Georgescu Mihai 02:12:1973 SUPERIOARE 23400000
Înregistrarile
.
.
Avrom Mihai 08:23:1964 MEDII 23000000

Acest tabel formeaza un fisier de date, fisier ce se salveaza sub numele


de cursanti.dbf (acesta va fi fisierul fizic care va contine efectiv datel
737m1219h e ), tabel ce se depune în containerul baza de date.

Dupa cum se observa definirea unei tabele implica specificarea numelui


de tabel,a câmpurilor componente, împreuna cu caracteristicile acestora si
eventual a indexilor.

Fiecare câmp al unei tabele este caracterizat prin mai multe


caracteristici ce se precizeaza la definirea tabelului :

 numele sau folosit la identificare ( de fapt numele coloanei ).


Numele este format din caractere ( de obicei litere , cifre si liniuta de
subliniere) . Daca tabelul este inclus în baza de date , numele
câmpului poate fi de lungime maxima 128 de caractere. Daca tabelul
este liber, nefiind legat de o anumita baza de date , numele este
format din maxim 10 caractere ( prima litera), tabelul fiind de fapt
un fel de baza de date din versiunile mai vechi de Foxpro

 tipul câmpului - precizeaza tipul datelor , valorilor ce vor fi stocate


în câmpul (coloana) respectiva. Tipurile de date puse la dispozitie de
Visual Foxpro sunt urmatoarele :

- Character- folosit pentru stocarea datelor de tip sir de caractere


(cum ar fi nume de persoane, nume de obiecte, adrese, denumiri,
etc) . Câmpurile de tip caracter pot pastra pâna la 254 de
caractere ( de obicei litere, cifre , semne de pe tastatura, semne
tiparibile).

- Curency - folosit pentru a stoca valori în dolari (i se mai spune


tipul monetar ) . Valoarea maxima permisa este de $922 000 de
miliarde si permite patru zecimale.( valorile sunt stocate pe 8
octeti în memorie).

- Numeric si Float - folosite pentru pastrarea valorilor numerice ,


permitând panp la 20 de cifre semnificative, cu maxim 19 cifre
zecimale. Valorile inime si maxim între care se poate lucra sunt
0.9999999999 x10-19 si 0.9999999999 x1020 .

- Date si DateTime - sunt folosite pentru pastrarea datelor


calendaristice în memorie sub forma YYYYMMDD, iar DateTime
pastreaza si data calendaristica si timpul în formatul HHMMSS .
Datele variaza între limitele 01-01-100 si 12-31-9999, iar timpul
de la 12:00:00 AM la 11:59:59 PM. Trebuie precizat faptul ca în
tabel data calendaristica este afisata implicit în formatul american
MMDDYY. Pentru a schimab acest format se poate tasta ( în
fereastra de comanda) comanda SET DATE TO DMY, iar pentru a
avea anul cu 4 cifre trebuie tastata comanda SET CENTURY ON .

- Logical - se foloseste pentru pastrarea a doua valori : adevarat


( notata cu .T. ) si fals ( notata cu .F.) . În general , este folosit
pentru marimi cu doua stari, cum ar fi : taxabil/netaxabil,
bursier/nebursier, scutit/nescutit, etc.
- Memo - se foloseste pentru stocarea sirurilor mari de caractere ,
care depasesc 254. De exemplu, un câmp Observatie sau un
câmp Cv (curriculum vitae) pot fi declarate de tip memo. Trebuie
sa atentionam faptul ca daca se folosesc câmpuri memo , sistemul
va ma atasa un fisier la baza de date , fisier ce are extensia FPT
si stocheaza textul cel lung al cmpului ( câmpurilor ) memo . De
aceea , daca se doreste copierea unei baze de date , trebuiesc
copiate mai multe fisiere : fisierul DBC (containerul b.d.) , DBF-
urile ( tabelele cu date ), FPT-urile ( fisierele cu textul câmpurilor
memo) .

- General - folosit pentru stocarea de referinte la anumite obiecte


cum ar fi grafice. De asemenea , se foloseste pentru adaugarea
de obiecte OLE (imagini, sunete, documente Windows). si el este
stocat în fisierul cu extensia FPT asociat.

 lungimea câmpului - adica numarul de pozitii necesare pentru pastrarea


datelor acelui câmp ( numarul maxim estimat a se ocupa ) .

 numarul de zecimale - se refera la câmpurile numerice si precizeaza câte


pozitii pentru zecimale se vor aloca.

 fanionul (indicatorul) de indexare - acesta stabileste daca se foloseste


un index pe baza câmpului respectiv .

Observatie : Indecsii reprezinta o tehnologie cu ajutorul careia datele din


tabel sunt vazute într-o anumita ordine , dupa un anume criteriu . Îi vom
discuta la subiectul de ordonare a datelor .

 fanionul (indicatorul) de valoare nula (NULL) - arata daca în câmpul


respectiv poate fi memorata sau nu o valoare nula. Acest lucru permite
diferentierea unui câmp lasat necompletat de utilizator si unul completat
cu valoarea 0.

Pe lânga tabele cu date si ( vom vedea mai târziu) relatiile dintre aceste
tabele , o baza de date relationala în Visual Foxpro mai poate contine si alte
elemente . De asemenea, fata de versiunile mai vechi, în Visual Foxpro avem
câteva caracteristici noi :
 nume lungi ale tabelelor si a câmpurilor acestora , pentru a obtine o
lizibilitate mai buna.

 diferente secvente de cod ( proceduri si functii) care sa fie executate


automat la aparitia anumitor evenimente ( cum ar fi completarea de
cître utlizator a unui câmp de date , adaugarea de înregistrari,
modificarea unei anumite valori din câmp.

 restrictii de integritate sau conditii ce trebuie respectate la


modificarea bazei de date.

 vederi ale bazei de date

 conexiuni cu alte surse de date , cu alte tipuri de baze de date.

Trebuie precizat faptul ca exista de fapt doua tipuri de tabele : cele


stocate si legate în baza de date ( ele permit caracteristicile de mai sus) si
cele libere , nelegate de o baza de date ( cu restrictiile anterioare, nume
scurte , etc.) folosite pentru aplicatii mai vechi din vechile versiuni .

CREAREA BAZEI DE DATE SI A TABELELOR COMPONENTE :

Practic, pentru crearea bazei de date si (eventual) a tabelelor ,


utilizatorul are la dispozitie cel putine doua metode : folosind comenzile din
meniurile mediului Visual Foxpro, fie tastând comenzi dedicate în fereastra de
comanda .
Prima metoda consta în
alegerea optiuniiNew din meniul File , dupa care , în fereastra deschisa pe
ecran, se alege butonul Database (în felul acesta se indica sistemului ca se
doreste construirea unui container baza de date ). În final , fie se actioneaza
butonul New file , fie se alege asistentul Wizard pentru a construi baza de
date .

Se alege o noua

baza de
date
Se alege un nou fisier

p
entru baza de date.
Daca se alege
varianta New File, sistemul va cere directorul unde se stocheaza baza de date
si numele bazei de date. Dupa specificarea numelui b.d. , pe ecran se va
deschide fereastra Constructorului de baze de date, ca în figura de mai jos. .

Zona în care se vor

afisa tabelele si relatiile

Dupa crearea containerului, se poate trece la crearea tabelelor bazei de


date sau adaugarea în container a unor tabele cu date existente . Pentru a
crea un tabel, se poate apasa butonul dreapta pentru a obtine meniul rapid
cu comenzi si a alege comanda New Table. De aseamenea, se poate apasa
primul buton ( New Table) din fereastra de comenzi Database
Designer sau se poate realege din meniul File , comanda New cu optiunea
Table. Îndiferent de metoda aleasa , mediul va cere sa precizati modul de
lucru : fisier nou sau cu ajutorul asistentului . Apoi, se alege numele
directorului în care se stocheaza tabelul si numelele tabelului ce se creaza. În
final, va aparea Constructorul de table prin intermediul caruia se va preciza
structura logica a tabelului :

Câmpurile

Tipul de date

ce se poate alege

pentru fiecare câmp


În final, se poate
confirma salvarea structurii cu butonul OK si eventual introduce date în tabel,
revenind apoi în constructorul bazei de date :

Daca se apasa butonul dreapta în zona tabelului (vezi figura anterioara),


va aparea un alt meniu rapid din care se poate alege Modify - pentru a modifica
structura bazei de date sau Browse -pentru a afisa si eventual a modifica
datele din tabel. Cu ajutorul comenzii Modify se poate reveni în
structura tabelului, se pot adauga noi câmpuri, se pot sterge câmpuri sau se
pot modifica caracteristicile celor vechi.

Tabelele create anterior sunt tabele legate de baza de date . Aceste


tabele permit nume lungi pentru denumirea tabelului si pentru denumirile
câmpurilor (maxim 128 de caractere) . De asemenea , pentru câmpurile unei
tabele legate se pot preciza formate implicite de afisare a datelor, machete
de introducere a datelor în câmp, reguli de validare la nivel de câmp, etc.
Exista si alte elemente noi cum ar fi posibilitatea de a incorpora în baza de
date elemente speciale cum ar fi conexiunile , vederile , etc.

Pe lâna aceste tabele legate, se pot crea tabele libere , care sa nu


apartina unei baze de date . Aceste tabele libere nu ofera toate facilitatile de
mai sus , existente la tabelel legate (nume lungi, etc). Ele se pot crea separat
în scopul folosirii lor în programe mai vechi din vechile versiuni de Foxpro,
fie pentru adaugarea ulterioara în baza de date . Crearea tabelelor libere este
similara crearii tabelelor legate . Pentru aceasta , în ipoteza ca nu exista nici
o baza de date deschisa, se alege comanda File, optiunea New si
tipul Table, dupa care se parcurge acelasi dialog de creare a tabelului
(prezentat anterior ).
Un tabel liber poate fi adaugat ulterior unei baze de date deschise , cu
ajutorul comenzii Add Table ca în figura de mai jos.

Toate operatiile anterioare legate de crearea bazei de date si a


tabelelor legate sau libere se mai pot realiza si cu ajutorul comenzilor
echivalente ce se tasteaza în fereastra de comanda:

 pentru crearea containerului baza de date folosim CREATE


DATABASES nume, unde nume va reprezenta numele noii baze de
date sau CREATE DATABASES , caz în care aparea o fereastra de
dialog pentru introducerea numelui .

 pentru deschiderea constructorului si afisarea acestuia se


foloseste MODIFY DATABASE .

 crearea tabelelor se face cu comanda CREATE TABLE


nume sau CREATE TABLE ( se poate omite numele TABLE ).

 adaugarea de date în tabelul curent se face cu comanda APPEND .


Observatii:

1. Orice comanda ce se foloseste în fereastra de comanda poate fi scrisa


prescurtat folosind doar primele patru litere din nume . De
exemplu, puteti tasta doar CREA DATA.

2. De asemenea se poate lucra combinat, fie tastând comenzi în fereastra


de comanda fie folosind comenzile din meniuri sau din ferestrele
Constructorilor de tabele sau baze de date.

3. Daca un tabel poate fi adaugat într-o baza de date, de asemenea el poate


fi sters din baza de date. Lucrul acesta se realizeaza fie cu
ajutorul comenzii REMOVE din meniul DATABASE, fie cu
ajutorul butonului Remove Table din bara de instrumente Database , fie
cu ajutorul comenzii Delete din meniul rapid ce se obtine prin apasarea
butonului dreapta al mouselui pe simbolul tabeleului .

Indexarea tabelelor .

Nimeni nu se asteapta ca utlizatorii sa introduca datele gata sortate,


gata aranjate. Din acest motiv, de multe ori avem nevoie sa vedem datele
într-o anumita ordine. Lucrul acesta este posibil de realizat în mai multe
moduri în Visual Foxpro. Unul din aceste moduri poate fi folosit chiar din
momentul crearii tabelei prin intermdiul unei tehnologii numita indexare.
Indecsii servesc pentru doua scopuri principale. Întâi , folosim indecsii pentru
a forma realtii între tabele . Al doilea scop este de a ajuta la regasirea datelor
si de a îmbunatati performantele interogorilor si ale rapoartelor.

În momentul crearii tabelului, utilizatorul poate sa-si defineasca si


indecsi. De fapt, indexarea reprezinta o tehnica de ordonarea logica a datelor
dintr-o tabela , dupa diferite criterii, operatie care însa nu afecteaza ordinea
fizica a datelor din tabela, ci doar modul în care sunt vazute de utilizator.
Ordonarea tabelei presupune stabilirea unui criteriu dupa care sa fie parcurse
înregistrarile. Criteriul este de obicei un câmp sau o combinatie de câmpuri.
De exemplu, pentru tabelul cursanti ne intereseaza sa avem , sa vedem
cursanti fie în ordinea alfabetica a numelui, fie în ordinea anului de studiu.
Câmpul dupa care se face ordonarea se mai cheama cheie de ordonare. De
fapt indexul, este un fisier separat atasat tabelului , ce îi spune sistemului cum
sa parcurga baza de date pentru ca utlizatorul sa o vada ordonata .
De exemplu :

Carti.cdx Carti.dbf

Titlu Pozitie Nr. Titlu Autor Nr.


înreg pag.
Amintiri din copil. 2 1 Ion Liviu. R. 400
Ion 1 2 Amintiri din copilarie Ion Creanga 100

Insula misterioasa 4 3 Morometii Marin Preda 350


Morometii 3 4 Insula misterioasa Jules Verne 450

Daca se doreste afisarea datelor, sistemul se uita în fisierul index si de


acolo afiseaza mai întâi inregistrarea de pe pozitia 2 (ce o gaseste în tabelul
carti.dbf), apoi înregistrarea 1,4 si în final 3.

În Visual Foxpro, indecsii sunt memorati într-un fisier cu extensia


CDX.. Indecsii pot fi de doua feluri :

 normali (Regular ) - acestia construiesc pentru fiecare înregistrare


a tabelei câte o înregistrare în fisierul index respectiv, indiferent de
duplicarea valorii câmpului de indexare. Prin urmare, într-o tabela
indexata care contine doua persoane cu acelati nume, ambele
înregistrari vor fi "vazute" de utilizator.

 unici (Unique) , care permit o unica valoare a cheii de indexare . În


varianta aceasta , daca exista mai multe persoane cu aceast nume,
doar prima înregistrare va fi accesibila.

Totusi, pentru a putea face legaturi între tabelel bazei de date exista
înca doua tipuri de indecsii :

 indexul candidat (Candidate) - reprezinta un index asemanator cu


cel unic , dar interzice încarcarea de înregistrari care dubleaza
valoarea cheii de indexare. În cazul indecsilor unici se permitea
încarcarea acestora, dar înregistrarile respective erau ascunse
utilizatorului.
 indexul de tip cheie primara (Primary) - Exista situatii în care în
tabela s-au creat mai multe criterii unice de ordonare . Dintre acestea
, se poate stabili unul care sa fie folosit drept cheie primara a tabelei,
pentru a putea stabili relatii între tabela respectiva si alte tabele ale
unei baze de date .

Observatie: De obicei proiectantul bazei de date si a tabelelor , îsi stabileste


un câmp ca si cheie primara unica . De exemplu, cod matricol , cod numeric
personal , cod produs, cod carte , marca persoana , etc. Crearea indecsilor se
poate face la creare tabelelor, folosind pagina Fields , asa cum se vede din
figura de mai jos :

Ordinea Câmpul Tipul de


index Cheia de indexare Filtru

crescatoare/descrescatoare
Dupa cum se oberva în figura anterioara , cu ajutorul paginii Index se poate
defini unul sau mai multi indecsi. Pentru aceasta trebuie precizate câteva
informatii :

 cum se ordoneaza : crescator sau descrescator;

 numele simbolic al indexului;

 tipul idexului ( unul din cele patru tipuri prezentate anterior);

 expresia de indexare folosita ca si criteriu de ordonare, expresie formata


dintr-un singur câmp al tabelei sau dintr-o combinatie de câmpuri legate
prin operatori. Expresia se construieste cu ajutorul Constructorului de
expresii.

 un filtru care sa restrânga accesul la înregistrarile tabelei , pe baza unor


conditii pe care le precizeaza utlizatorul . Conditia de filtrare se poate tasta
manual sau construi cu ajutorul Constructorului de expresii aflat în dreapta
coloanei Filter.

Indecsii , pentru a putea avea efect , trebuie deschisi. Vom vedea la


subiectul de ordonarea datelor cum se folosesc , cum se deschid, etc.

Formatul de afisare si de citire. Validarea datelor.

În momentul crearii tabelului, utlizatorul are posibilitatea de a


introduce formate de afisare si formate pentru citirea datelor . De asemenea,
un lucru foarte util în practica, utilizatorul poate impune conditii de validare a
datelor pentru a preveni introducerea de date inconsistente. Optiunile
respective se pot vedea în figura de mai jos:
Formatul de afisare si masca de intrare al unui câmp se refera la
modul cum vor fi afisate datele într-o fereastra de editare a tabelei (de exmplu
cu comanda Browse ) sau într-o lista afisata cu comanda List sau Display
sau într-un raport si la modul cum vor fi citite datele (inclusiv într-un
formular). Formatul de afisare si masca de citire sunt de fapt un sir de
caractere, un fel de sablon, alcatuit din mai multe coduri , în functie de care
se decide afisarea si citirea datelor. De exemplu, se poate folosi caracterul 9
pentru a preciza fiecare pozitie a unei cifre dintr-un numar ( de exemplu 99.99
- precizeaza afisarea pe 5 pozitii cu 2 zecimale . De asemenea se poate folosi
caracterul A pentru a preciza caractere de tip litera sau se poate folosi
caracterul ! pentru a preciza majuscule ( de exemplu !Axxx precizeaza ca
avem numai majuscule, prima obligatoriu litera ) . Mai multe amânunte legate
de sabloanele de afisare si citire la realizarea rapoartelor de afisare si a
formularelor de citire.

Conditiile de validare a datelor sunt expresii pe care le putem


introduce în ideea de a face verificari ale datelor introduse. Acest lucru este
util pentru a preveni introducerea datelor inconsistente . Pentru aceasta se
foloseste caseta Rule si , eventual, Constructorul de expresii aflat în dreapta
casetei Rule (vezi figura anterioara) . De aici se poate construi o expresie
logica ce foloseste operatori relationali (<, >, =, <>, <=, >=), operatori logici
(AND, OR, NOT sau !).

Regulile acestea sunt verificate în momentul în care se încearca mutarea


câmpului sau modificarea valorilor acestuia cu ajutorul unei comenzi .

Valorile implicite pentru câmpuri se refera la posibilitatea de a


preciza de la început cu ce valoare va fi initializat un anumit câmp . În felul
acesta , daca utilizatorul nu introduce o valoare , câmpul va avea o valoare
initiala . O alta situatie este aceea în care o anumita valoare se repeta la mai
multe înregistrari , este mai simplu sa initializam câmpul si sa
modificam doar acele înregistrari care nu se portivesc.

Valorile titlurilor de figura (proprietatea Caption pe figura ) se


refera la titlurile coloanelor, de exemplu la comenzile Browse sau Edit titlurile
coloanelor sunt denumirile câmpurilor . de multe ori aceste denumiri nu sunt
suficient de sugestive fiind de fapt prescurtari . Cu acesta proprietate, acele
titluri pot fi schimbate.

Comentariile câmpurilor se refera la mesaje explicative ce le pune


programatorul pentru a stii mai târziu la ce folosea acel câmp ( dupa un timp
, programul va trebui depanat , actualizat si programatorul uita la folosea acel
câmp) .

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