Documente Academic
Documente Profesional
Documente Cultură
Baze de Date
Baze de Date
Bazele Informaticii
i
Limbaje de Programare
Partea a II-a
Note de curs
Romic TRANDAFIR
Bucureti
2006
Cuprins
Cuprins
Cuprins .................................................................................................................................................1
1. Bnci i baze de date........................................................................................................................4
1.1. Notiuni generale........................................................................................................................4
1.2. Sisteme de baze de date ............................................................................................................5
1.3. Nivelul de organizare a datelor ntr-o baz de date ..................................................................6
1.4. Modelarea la nivel logic a datelor ntr-o baz de date ..............................................................6
1.5. Conceptul de sistem de gestiune a bazelor de date ...................................................................8
1.5.1. Activitile asigurate de SGBD..........................................................................................9
1.5.2. Obiectivele unui SGBD .....................................................................................................9
1.5.3. Funciile unui SGBD........................................................................................................11
2. Etapele de realizare a unei bnci de date .......................................................................................13
2.1. Etapa de analiz ......................................................................................................................13
2.2. Etapa de programare ...............................................................................................................13
2.3. Punerea n funciune i exploatarea bazei de date...................................................................13
2.4. Documentaia aplicaiei...........................................................................................................15
3. Sisteme de gestiune a bazelor de date relaionale SGBDR.........................................................16
3.1. Modelul relaional al datelor ...................................................................................................16
3.1.1. Structura relaional a datelor ..........................................................................................16
3.1.2. Operaii n algebra relaional..........................................................................................17
3.1.3. Optimizarea cererilor de date...........................................................................................18
3.2. Regulile lui Codd ....................................................................................................................19
3.3. Normalizarea datelor...............................................................................................................21
3.4. Cerinele minimale de definire a SGBDR...............................................................................22
4. Componentele funcionale ale sistemului Visual FoxPro ..............................................................23
4.1. Programarea orientat pe obiecte............................................................................................23
4.2. Arhitectura VFP 6.0 ................................................................................................................24
4.3. Modurile de lucru n VFP .......................................................................................................26
4.3.1. Modul de lucru meniu sistem...........................................................................................27
4.3.2. Modul de lucru prin comenzi ...........................................................................................30
5. Organizarea datelor nVisual FoxPro.............................................................................................31
5.1. Manipularea bazei de date i a tabelelor n VFP.....................................................................31
5.1.1. Crearea bazei de date .......................................................................................................31
5.1.2. Crearea tabelelor ..............................................................................................................32
5.2. Deschiderea bazei de date/tabelei ...........................................................................................36
5.3. Consultarea i modificarea bazei de date/tabelei ....................................................................37
5.3.1. Modificarea structurii de date a tabelelor- modul asistat.................................................37
5.3.2. Deplasri n tabel. Cutri secveniale.............................................................................39
5.4. nchiderea bazei de date sau a tabelei .....................................................................................40
6. Utilizarea asistentului Wizard n VFP ...........................................................................................41
6.1. Table Wizard...........................................................................................................................41
6.2. Report Wizard .........................................................................................................................42
6.3. Label Wizard...........................................................................................................................44
6.4. Query Wizard..........................................................................................................................44
6.5. Mail Merge Wizard.................................................................................................................45
6.6. Editorul de texte n VFP 6.0....................................................................................................46
7. Elemente ale limbajului propriu Visual FoxPro 6.0 ......................................................................48
7.1. Simboluri.................................................................................................................................48
Baze de date
Baze de date
creare baza
de date
SGBD
ALTE ELEMENTE
Fig. 1
BAZA DE
DATE
Baze de date
baze de date relaionale structura de baz a datelor este aceea de relaie tabel, limbajul
SQL (Structured Query Language) este specializat n comenzi de manipulare la nivel de
tabel. Termenul relaional a fost introdus de un cercettor al firmei IBM dr. E. F. Codd n
1969 cel care a enunat cele 13 reguli de baz necesare pentru definerea unei baze de date
relaionale. Baza de date relaional reprezint o mulime structurat de date, accesibile prin
calculator, care pot satisface n timp minim i ntr-o manier selectiv mai muli utilizatori.
Aceast mulime de date modeleaz un sistem sau un proces din lumea real i servete ca
suport unei aplicaii informatice;
baze de date distribuite sunt rezultatul integrrii tehnologiei bazelor de date cu cea a
reelelor de calculatoare. Sunt baze de date logic integrate, dar fizic distribuite pe mai multe
sisteme de calcul. Integrarea bazei de date distribuite se face cu ajutorul celor 3 tipuri de de
scheme care sunt implementate:
1. schema global definete i descrie toate informaiile din baza de date distribuit n
reea;
2. schema de fragmentare descrie legturile dintre o colecie global i fragmentele
sale. Ea este de tipul unu la mai muli i are forma unei ierarhii;
3. schema de alocare descrie modul de distribuire a segmentelor pe calculatoarele
(nodurile) din reea. Fiecare segment va avea o alocare fizic pe unul sau mai multe
calculatoare. Schema de alocare introduce o redundan minim i controlat: un
anumit segment se poate regsi fizic pe mai multe calculatoare.
Utilizatorul unei asemenea baza de date o vede ca pe o baz de date unic, compact (nivel logic),
cu toate c n realitate ea este distribuit pe mai multe calculatoare legate n reea (nivel fizic).
Aceast organizare a dus la o cretere substanial a vitezei de acces la o baz de date ntr-o reea de
calculatoare. Anumite date stocate pe un server local sunt mult mai rapid accesate dect dac ele sar afla pe un server la distan, unde baza de date ar fi fost stocat n ntregime (nedistribuit);
modele semantice orientate spre obiecte. Aceste modele sunt orientate pe reprezentarea
semnificaiei datelor. Structura de baz folosit pentru reprezentarea datelor este cea de clas
de obiecte definit prin abstractizare din entitatea fizic pe care o regsim n lumea real.
Aici exist entiti simple i clase de entiti care se reprezint prin obiecte simple sau clase
de obiecte, ordonate n ierarhii de clase i subclase. Acest tip de baz de date a aprut din
necesitatea gestionrii obiectelor complexe: texte, grafice, hri, imagini, sunete (aplicaii
multimedia) i a gestionrii obiectelor dinamice: programe, simulri.
Baze de date
10
de
aplicaie;
independena fizic modificarea tehnicilor fizice de memorare fr a determina rescrierea
programelor de aplicaie.
2. Asigurarea redundanei minime i controlate a datelor stocarea informaiilor n bazele de
date se face astfel nct datele s nu fie multiplicate. Totui, pentru a mbunti
performanele legate de timpul de rspuns, se accept o anumit redundan a datelor,
controlat, pentru a asigura coerena bazei de date i eficiena utilizrii resurselor
hardware.
3. Asigurarea facilitilor de utilizare a datelor presupune ca SGBD-ul s aib anumite
componente specializate pentru:
folosirea datelor de ctre mai muli utilizatori n diferite aplicaii datele de la o aplicaie
trebuie s poat fi utilizate i n alte aplicaii.
Baze de date
11
12
UTILIZATORI
FUNCIILE
SGBD
MANIPULARE
UTILIZARE
DESCRIERE
BAZA DE
DATE
Fig.2
ADMINISTRARE
Baze de date
13
14
Introducere date
Aplicaie
Extragere de date
Rapoarte statistice
Meniuri utilizator
Baze de date
Consultri curente
Ferestre utilizator
Ecrane utilizator
Programe
------
Date de la
utilizator
Rezultate
utilizator
Programul
Meniul principal
Programe de
Programe
pentru
introducere
date
Ecrane de
introducere
Rapoart
Filtre
Programe de
extragere
date
Export
Import
Baza de date
Baze de date
15
16
Teoria BD
Colecie de date
Teoria relaional
Relaie
SGBDR
Tabel
Linie
Baze de date
17
Cmp
Valoare
Caracteristic
Domeniu de Valori
Atribut
Domenii
Nume coloan
Domeniu coloan
Atribut
operator de comparaie
valoare
Jonciunea (join-ul) operaie n algebra relaional definit pe dou relaii R1 i R2, care const din
construirea unei noi relaii R3, prin concatenarea unor tupluri din R1 cu tupluri din R2. Se
concateneaz acele tupluri din R1 i R2 care satisfac o anumit condiie, specificat explicit n cadrul
operaiei. Extensia relaiei R3 va conine combinaiile acelor tupluri care satisfac condiia de
concatenare. Cel mai important tip de join din punct de vedere al utilizrii este equijoin-ul, care este
o jonciune dirijat de o condiie de forma:
Intersecia operaie din algebra relaionaldefinit pe dou relaii R1 i R2, ambele cu aceeai
schem, care const din construirea unei noi relaii R3, cu schema identic cu a operanzilor i cu
extensia format din tuplurile din R1 i R2.
Diviziunea operaie din algebra relaional definit asupra unei relaii R, care const din
construirea cu ajutorul unei relaii r a relaiei Q. Tuplurile relaiei Q concatenate cu tuplurile relaiei
r permit obinerea tuplurilor relaiei R.
E1 >< E 2 = E 2 >< E1
E1 E 2 = E 2 E1
Asociativitatea operaiilor de join i produs cartezian:
comuta: F 1 ( F 2 ( E ) ) = F 2 ( F 1 ( E ) )
Comutarea seleciei cu proiecia
Comutarea seleciei cu produsul cartezian
Comutarea seleciei cu reuniunea
Comutarea seleciei cu diferena
Comutarea proieciei cu produsul cartezian
Comutarea proieciei cu reuniunea
18
Baze de date
19
Prin deplasarea operaiilor de selecie ct mai la stnga expresiilor algebrice se reduce numrul de
tupluri care trebuie manipulate n procesul de executare a cererii. Se pot meniona urmtoarele
strategii de optimizare a cererilor de date:
Deplasarea operaiei de selecie naintea operaiei de jonciune jonciunea i produsul cartezian
acioneaz ca generatori de tupluri. Prin selecie se reduce dimensiunea relaiilor la care se aplic
aceti generatori de tupluri. Se ine seama c operaia de jonciune poate fi exprimat sub forma
unui produs cartezian urmat de o selecie, iar n cazul jonciunii naturale printr-un produs cartezian
urmat de de o selecie i de o proiecie.
Deplasarea operaiilor de proiecie naintea operaiilor de jonciune se realizeaz prin folosirea
proprietii de comutare a seleciei cu produsul crtezian
Combinarea seleciilor multiple se realizeaz cu ajutorul relaiei de compunere a seleciilor.
Deplasarea operaiilor de selecie naintea operaiilor de proiecie- realizat pe baza proprietii de
comutare a seleciei cu proiecia. Eliminarea tuplurilor duplicate obinute prin proiecie se face prin
ordonarea tuplurilor. Selecia reduce numrul tuplurilor ce trebuiesc ordonate facilitnd operaia de
proiecie.
Accesarea informaiilor din baza de date relaional se va face prin specificarea numelui tabelei, a
valorii cheii primare i numelui de coloan.
R3 - Valorile null
SGBD trebuie s permit declararea i manipularea valorilor null, cu semnificaia unor date lips
sau inaplicabile. Valorile null, care difer de irurile de caractere spaiu sau de irurile vide de
caractere sunt importante n implementarea restriciilor de integritate (integritatea entitii i
integritatea referenial) din modelul relaional.
R4 - Metadatele
Informaiile despre descrierea bazei de date, metadatele, trebuie s se prezinte la nivel logic n
acelai mod cu descrierea datelor propriu-zise, utilizatorul aplicnd asupra descrierii bazei de date
aceleai operaii ca i la datele obinuite. Sistemul nu trebuie s fac diferene ntre descrierea
datelor i a metadatelor utiliznd o singur structur, cea relaional.
R5 Facilitile limbajelor utilizate
Un sistem relaional trebuie s fac posibil utilizarea mai multor limbaje, n mai multe moduri.
Trebuie s existe cel puin un limbaj de nivel nalt ale crui instruciuni s poat exprima oricare din
urmtoarele operaii: definirea tabelelor de baz, definirea tabelelor virtuale, manipularea datelor,
definirea restriciilor de integritate, autorizarea accesului, precizarea limitelor tranzaciilor.
R6 Actualizarea tabelelor virtuale
Nu toate atributele din cadrul unei tabele virtuale, deci nu toate tabelele virtuale, sunt teoretic
actualizabile.
R7 Actualizrile n baza de date
SGBD trebuie s ofere posibilitatea manipulrii unei tabele (de baz sau virtuale) nu numai n
cadrul operaiilor de regsire ci i n cazul celor de adugare, modificare i tergere a datelor. n
cursul operaiilor prin care se schimb coninutul bazei de date s se lucreze la un moment dat pe o
ntreag relaie.
R8 Independena fizic a datelor
20
Baze de date
21
sistemul suport dou dintre restriciile de integritate de baz ale modelului relaional i anume
22
Baze de date
23
Clasele de obiecte reprezint un tip abstract de date care definete structura obiectelor din
Obiectele o colecie de proprieti care se refer la aceeai entitate. Aceste proprieti descriu
structura de date a obiectului. Un obiect are un nume, prin care este referit, un identificator unic,
metode, o implementare (privat utilizatorul nu are acces) i o interfa (care este public).
Cererile adresate unui obiect pentru a returna o valoare sau pentru a schimba o stare se numesc
mesaje.
acestuia.
Modelul obiect confer obiectelor urmtoarele caracteristici:
ncapsularea descrierea obiectelor se face astfel nct nu exist acces din afara obiectului la datele
sale (black box);
polimorfismul diferitele obiecte pot rspunde diferit la aceleai mesaje;
succesiunea (motenirea) reprezint capacitatea unui obiect de a-i deriva datele i
funcionalitatea din alte obiecte.
Operatorii modelului orientat pe obiecte se refer la actualizarea metodelor, a proprietilor, a
claselor, a instanelor. La baza operaiilor dintr-un astfel de model stau mesajele, care ajut
obiectele s comunice ntre ele.
Restriciile de integritate a datelor:
orice obiect respect restriciile impuse clasei din care face parte;
accesul la obiect este limitat la folosirea protocolului de mesaje definit pentru clasa din care
face parte.
limbajul FoxPro care este propriu sistemului, este de tip procedural. El coine comenzi
att pentru descrierea datelor (LDD) ct i pentru manipularea datelor (LMD). Tot aici sunt
incluse comenzile pentru programarea vizual din tehnologia orientat spre obiecte.
nucleul extins SQL este un subset din standardul SQL. Acesta este un limbaj relaional
descriptiv, care conine att comenzi pentru descrierea datelor (LDD) ct i pentru manipularea
datelor (LMD).
2.
Interfeele sunt produse VFP pentru dezvoltarea aplicaiilor cu baze de date relaionale.
24
Baze de date
25
EDITOR de texte permite ncrcarea i editarea programelor surs (fiiere .PRG), precum i a
fiierelor ASCII. Apelarea editorului se poate face prin comanda dat n fereatra Command:
MODIFY COMMAND <nume_fiier>
INTERFEE
DESIGNER
BUILDER
EXPORT/IMPORT
WIZARD
Generatoare
API
NUCLEU
Limbajul FoxPro
INSTRUMENTE
EDITOR TEXTE
HELP/DEMO
UTILITARE
de ntreinere
INTERNET
Fig. 1
DEBUG
BD
INTERNET permite utilizarea unor sevicii de Internet (mail, transfer de fiiere etc.).
Fig. 2
bara de titlu pe care este scris Microsoft Visual FoxPro (n stnga) i butoanele pentru
bara meniului sistem care conine un meniu orizontal cu opiunile de lucru (modul de lucru
meniu sistem):File, Edit, View, Format, Tools, Program, Window, Help. La selectarea unei opiuni
apare un submeniu vertical, de unde se alege mai departe subopiunea dorit.
bara cu instrumente care conine butoane (icon-uri) dispuse orizontal. Acestea pot fi active sau
nu, n funcie de starea curent de lucru. Prin aceste butoane se poate apela, sub o alt form, o
suboperaiune din meniul sistem.
fereastra de comand care conine un cursor i permite introducerea unei comenzi VFP sau
aria de ieire este format din restul spaiului neocupat din fereastra principal unde vor fi
26
Baze de date
27
Fig. 3
28
View permite setarea unor parametri privind bara curent de instrumente de lucru.
etc.
Baze de date
29
Fig. 6
La alegerea opiunii Browse (rsfoire), fie din meniul View fie din fereastra Data Session, va apare
meniul Table n bara de meniuri cu urmtoarele subopiuni (fig. 7):
Go to Record regsirea unei nregistrri dup diferii parametri:
numr nregistrare, deplasare la nceputul/sfritul tabelului,
localizare nregistrare dup valoarea unui cmp etc.
Append New Record adgarea unei noi nregistrri.
Append Records adugarea de noi nregistrri dintr-un alt fiier
Delete Records marcare pentru tergere (la nivel logic).
Recall Records anularea marcrii pentru tergere.
Remove Deleted Records tergerea definitiv din tabel a
nregistrrilor marcate (la nivel fizic).
Replace Field actualizare cmp nregistrare (schimbarea valorii
cmpului).
Size Field modificarea limii de afiare a cmpului n browser.
Fig.7
executabil care va conine toate obiectele declarate ca fiind utilizate n aplicaie. Pentru a realiza
proiectul n form executabil, n prealabil se folosete opiunea Build, pentru a realiza compilarea
i link-editarea.
Fig. 8
30
Baze de date
31
date/tabel
Not
Secvenele din linia de comand care apar ntre paranteze drepte au semnificaia de
element opional.
32
opiunea TABLE din fereastra de dialog i se apas butonul NEW. Aceast secven are ca
efect apariia unei ferestre de dialog CREATE, n care se specific discul logic, directorul i
numele tabelei care va fi creat
utiliznd tasta <TAB> sau mouse-ul. Dup introducerea numelui tabelei se apas butonul SAVE
(fiierul va fi salvat cu extensia .DBF) i se afieaz o nou fereastr TABLE DESIGNER. n
acest fereastr, se selecteaz opiunea FIELDS afiat sus, utilizatorul trebuie s introduc
structura tabelei. Fereastra conine urmtoarele cmpuri de preluare a informaiilor structurale:
Name, Type, Width, Dec, Index, NULL i patru butoane pentru opiunile: OK, Cancel,
Insert, Delete. Sub Name se tasteaz numele cmpului, format din maxim 10 caractere,
ncepnd cu o liter, iar sub Type se declar tipul cmpului nou creat sau se alege o opiune din
meniul pop-up afiat.
Cmpul poate fi de tip:
dat admite maxim 8 caractere i are formatul implicit ll/zz/aa. Formatul poate fi schimbat cu
memo admite implicit 10 caractere, ns sistemul poate stoca blocuri mari de text pentru
fiecare nregistrare. Dimensiunea blocurilor de text este limitat de spaiul pe hard disk. Tabelele
care au declarate n structur cmpuri de tip memo sunt stocate sub forma a dou fiiere, unul cu
extensia .DBF i cellalt cu extensia .FTP n care se salveaz cmpurile memo ale tabelei.
general se folosete pentru memorarea elementelor de tip OLE (Object Linking and
Baze de date
33
34
moneda
Exemplu. Folosind modul comand se creaz o tabel cu evidena studenilor, cu numele ESTUD,
cu urmtoarele cmpuri:
- numr matricol: MATR de tip numeric, lungime maxim 5
- nume i prenume: NUME de tip caracter, lungime maxim 40
- adres: ADRESA de tip caracter, lungime maxim 30
- anul de studii: ANS de tip numeric, lungime maxim 1
- anul intrrii n facultate: ANIF de tip numeric, lungime maxim 4
- data naterii: DATAN de tip dat.
Comanda:
CREATE TABLE ESTUD (MATR N(5),NUME C(40),ADRESA C(30),ANS N(1),ANIF N(4),
DATAN D)
Alte comenzi utilizate n crearea tabelelor
Pentru crearea unei tabele se pot utiliza i comenzile COPY STRUCTURE EXTENDED TO sau
CREATE ... FROM ...
Baze de date
35
FIELD_LEN
FIELD_DEC
USE ESTUD
TO TEMP
USE TEMP
APPEND BLANK
36
MBAC
REPLACE FIELD_TYPE WITH N
USE ESTUD1
BROWSE
CLOSE DATABASES
Baze de date
37
nestructural compus (.CDX), separate prin virgul, fr specificarea extensiei. Primul fiier de index
din list este cel care controleaz accesarea i afiarea datelor din tabel.
ALIAS <alias_tabel> - creaz un nou nume pentru tabel, diferit de numele extern. Referirea la
fiier se poate face prin intermediul alias-ului, n funcii sau comenzi care cer sau suport alias-ul.
Specificarea zonei de lucru poate fi fcut i separat asociind comanda SELECT la comanda USE.
SELECT <nr_zon_de_lucru> | <nume_alias>
USE <nume_fiier>
Not
Semnul | |n sintaxa unei comenzi marcheaz alternana unor clauze care se exclud.
n modul asistat, deschiderea se face utiliznd meniul FILE/OPEN, se selecteaz DATABASE sau
TABLE din meniul pop-up afiat i se specific discul logic, subdirectorul i numele bazei de date
sau tabelului, precum i modul de deschidere (se bifeaz sau nu, opiunea EXCLUSIVE). Cnd
toate aceste informaii sunt specificate se apas butonul OK.
Dup operaia de deschidere n meniul View avem subopiunile Browse (vizualizare coninut),
Database Designer (proiectantul pentru baza de date), Table Designer (proiectantul pentru tabele).
Se pot face consultri cu Browse, modificri ale structurii cu Database Designer (adugare,
eliminare de tabele din baz, stabilirea/anularea relaiilor ntre tabele) sau Table Designer
(actualizare cmpuri).
38
character
10
Cmpurile ce urmeaz vor fi mpinse cu un rnd n jos. Se introduce numele cmpului n prima
csu, se alege tipul i lungimea maxim din meniurile pop-up. Pentru tergere se poziioneaz
cursorul pe cmpul respectiv i se apas tasta <DELETE> sau se folosete butonul cu opiunea
DELETE.
Salvarea modificrilor se face selectnd opiunea OK (buton), sistemul afind urmtorul mesaj:
Make structure changes permanent ?
YES
NO
Opiunea YES salveaz noua structur a tabelului, fereastra de dialog STRUCTURE se nchide i
controlul (cursorul) trece n fereastra de comand.
Not
Modificarea structurii tabelelor se poate face i cu comanda ALTER TABLE din nucleul
SQL.
La alegerea opiunii Browse(rsfoire), fie din meniul VIEW fie din fereastra DATA SESSION, va
apare opiunea Table n bara de meniuri cu urmtoarele subopiuni:
Go to Record regsirea unei nregistrri dup diferii parametri: numr articol, deplasare la
nceputul/sfritul tabelului, localizare nregistrare dup valoarea unui cmp etc.
Append New Record adgarea unei noi nregistrri.
Baze de date
39
care au valoarea TRUE pentru expresia dat. Clauza While este de asemenea o expresie logic i
nregistrrile selectate trebuie s verifice condiia pentru a se realiza modificarea.
Constructorul de expresii are o regiune de editare n care vor fi introduse condiiile, manual sau
asistat de calculator.
Prin apsarea butonului Replace are loc operaia de modificare.
40
Baze de date
41
42
pasul 5 setarea relaiilor: dac tabelul aparine unei baze de date, se pot stabili relaiile ntre
cmpuri, ntre tabelul nou creat i tabelele existente n baz. Pentru definirea relaiei se face click cu
mouse-ul pe butonul radio care identific tipul relaiei, se selecteaz cmpul care se leag n baza de
date (dac se selecteaz new field, se va tipri numele) i operaia se termin cu click pe butonul
OK.
pasul 6 terminare (butonul Finish): noul tabel va fi afiat ntr-o fereastr de tip Browse. Se poate
alege opiunea Append New Record din meniul sistem Table, pentru a aduga nregistrri noi n
tabel. Dup salvarea fiierului, acesta poate fi deschis mai trziu pentru a modifica structura cu
aplicaia Table Designer.
Form Wizard creaz un videoformat pentru date extrase dintr-un singur tabel. Lansarea
asistentului se face utiliznd meniul sistem Tools, submeniul Wizard, opiunea Form:
pasul 1 selectarea cmpurilor: se face pe baza opiunilor utilizatorului exprimate n 3 ferestre:
Databases and tables, Available fields, Selected fields, la fel ca n cazul Wizard Table.
pasul 2 selectarea stilui videoformatului specific stilul controalelor din videoformat. n
fereastra Style este afiat o list cu tipurile de videoformate: standard, chiseled, shadowed, boxed,
embossed, fancy etc. Se poate alege din panoul cu butoane radio (Button type) tipul butoanelor
utilizate: Text buttons, Picture buttons, No buttons, Custom buttons. Tipul de butoane ales va
genera n videoformat butoane pentru navigare n fiier (Top, Previous, Next, Bottom), Find
(afieaz cutia de dialog Search - caut), Print (tiprete un raport), Add (adaug o nou
nregistrare), Delete (terge nregistrarea curent), Exit (nchide videoformatul).
pasul 3 sortarea nregistrrilor: se vor selecta acele cmpuri care dorim s fie sortate. Se poate
alege de asemenea o etichet (intrare) pentru un index (TAG).
pasul 4 terminare (butonul Finish): dac s-a ales un numr mare de cmpuri la pasul 1 i vrem s
fim siguri c toate cmpurile vor ncpea n videoformat se poate alege opiunea Add pages for
fields that do not fit. n caz contrar, dac numrul cmpurilor depete dimensiunea
videoformatului, VFP va afia formatul cu bare de deplasare (Scroll Bars). Videoformatul poate fi
vizualizat nainte de salvare cu opiunea Preview. Dup salvarea videoformatului, acesta poate fi
deschis mai trziu i modificat cu aplicaia Form Designer.
Baze de date
43
Tools, submeniul Wizard, opiunea Report. n cutia de dialog Wizard Selection se alege Report
Wizard:
pasul 1 selectarea cmpurilor: se introduc opiunile n cele 3 ferestre de dialog: Databases and
tables, Available fields, Selected fields. Selecia poate fi fcut dintr-un tabel sau o viziune.
pasul 2 gruparea nregistrrilor: se poate folosi gruparea datelor pentru a mpri pe categorii i a
sorta nregistrrile, pentru a fi mai uor de citit (de exemplu situaia ncasrii impozitelor pe familie,
pe sectoare i centralizat pe municipiu). Dup alegerea unui cmp n csua Group by, se pot alege
opiunile Grouping Options i Summary Option pentru a mbuntii selecia. Alegnd Grouping
Options se va deschide caseta de dialog Grouping Intervals care permite selectarea nivelurilor de
filtrare relevante pentru tipul de date coninute n cmpurile selectate pentru grupare. Alegnd
Summary Options se deschide o cutie de dialog n care utilizatorul poate specifica tipul de calcul
care se va aplica unui cmp numeric:
Tipuri de calcul
Rezultat
SUM
AVG
COUNT
MIN
MAX
Se pot alege de asemenea opiunile Summary only sau No Totals pentru raport. Cmpurile care sunt
selectate pentru grupare nu vor fi disponibile la pasul 3.
pasul 3 alegerea stilului pentru raport : sunt disponibile urmtoarele stiluri:Executive, Ledger,
Presentation, Banded, Casual, asistentul prezentnd ntr-un grafic, sub o lup, un exemplu al stilului
ales.
pasul 4 definirea formatului raportului: cnd se specific un numr de coloane sau se selecteaz
una din opiunile pentru format, asistentul prezint ntr-un grafic, sub o lup, un exemplu. Dac s-a
fcut opiunea de grupare la pasul 2, opiunile Columns i Field Layout nu mai sunt disponibile.
pasul 5 sortarea nregistrrilor: se pot selecta unul sau mai multe cmpuri sau o etichet de index
(TAG) n ordinea n care dorim s sortm nregistrrile (ascendent, descendent).
pasul 6 terminare (butonul Finish): dac numrul cmpurilor selectate nu ncap pe o singur linie
pe limea paginii de raport, acest cmp va fi nglobat pe linia urmtoare. Dac nu vrem s fie
nglobat cmpul pe linia urmtoare, se deselecteaz opiunea Wrap fields that do not fit. Cu butonul
Preview se poate vizualiza raportul fr a prsi asistentul. Dup salvarea raportului, acesta poate fi
deschis ulterior i modificat cu aplicaia Report Designer.
44
butoanele de adugare; apoi se selecteaz cmpurile din alt tabel sau viziune etc.
Pasul 2 stabilirea relaiilor ntre tabele: utilizatorul poate selecta cmpurile comune mai multor
fiiere din lista afiat, pentru a stabili relaiile ntre tabele sau viziuni.
Pasul 3 includerea nregistrrilor: se poate limita interogarea (query) alegnd din dou tabele,
numai liniile care coincid, sau toate liniile dintr-unul din tabele. Implicit numai nregistrrile care
Baze de date
45
coincid sunt incluse. Dac vrem s cream o jonciune intern selectm opiunea Only matching row
(numai nregistrrile care coincid). Dac vrem s realizm o jonciune extern, selectm toate
nregistrrile din unul din cele dou tabele.
Pasul 4 filtrarea nregistrrilor: se poate reduce numrul nregistrrilor selectate n interogare, prin
crearea de expresii logice care s filtreze nregistrrile din tabelele sau viziunile alese. Se pot crea
dou expresii logice, legate cu operatorul And, care va permite selectarea
numai a acelor
nregistrri care satisfac ambele criterii. Utilizarea operatorului Or face ca n selecia nregistrrilor,
s intre acelea care satisfac doar unul din criterii. Opiunea Preview permite vizualizarea
nregistrrilor care vor fi incluse n interogare (Query), pe baza aplicrii criteriilor de filtrare.
Pasul 5 sortarea nregistrrilor: se pot selecta pn la 3 cmpuri (chei de sortare) sau o etichet de
index (TAG) pentru a stabili ordinea n care rezultatele interogrii vor fi sortate (ascendent sau
descendent).
Pasul 6 limitarea nregistrrilor: se poate limita suplimentar numrul de nregistrri n interogare,
fie indicnd un procent de vizualizare din numrul de nregistrri cu valorile cele mai mari (sortare
descendent) / mai mici (sortare ascendent), fie indicnd numrul de nregistrri cu valorile cele
mai mari/mai mici, care va fi afiat. De exemplu, pentru a vedea doar primele 10 nregistrri cu
valoarea cea mai mare din interogare (sortare descendent), se introduce la opiunea Number of
records valoarea 10 n csua Portion value. Cu opiunea Preview se pot vizualiza rezultatele
interogrii pe baza restriciilor impuse.
Pasul 7 terminare (butonul Finish): dup ce interogarea a fost salvat, ea poate fi deschis ulterior,
lansnd aplicaia Query Designer.
pasul 3 selectarea tipului de document: se creaz un nou document sau se adaug date la un
Pocument existent.
Pasul 4 selectarea stiluilui documentului: se selecteaz unul din tipurile de fiiere pe care le
recunoate programul Word. Dac crem un document nou se va specifica tipul documentului Form
Letter, Label, Envelope, Catalog.
Pasul 5 terminare (butonul Finish): dac am selectat crearea unui document nou n Word,
asistentul va deschide documentul n Microsoft Word. Dac am selectat opiunea de creare a unui
fiier de tip text, asistentul l va salva.
Introducerea unui cmp al bazei de date n documentul Word se face astfel:
pe bara de instrumente pentru interclasare din opiunea pop-up Insert Merge Field se alege numele
cmpului pe care l inserm;
activnd opiunea
vedea efectiv valoarea cmpului selectat pentru inserare. Butoanele pentru deplasare la nceputul /
sfritul fiierului sau secvenial nainte / napoi, vor muta pointerul de fiier pe nregistrarea
corespunztoare, afind noua valoare a cmpului, n documentul Word.
46
47
Baze de date
marcarea blocului se ine tasta <Shift> apsat i cu una din sgeile direcionale, sau tastele
<Home>, <End>, <Page Up>, <Page Down> se marcheaz liniile de text (care vor apare n videoinvers).
copierea blocului de linii marcat n Clipboard se face:
folosind opiunea Cut din meniul Edit sau apsnd simultan tastele <Ctrl>+<X>, textul selectat va fi
ters din fiier;
folosind combinaia de taste <Ctrl>+<C>, caz n care textul rmne n fiier.
inserarea la o nou poziie n fiier a textului din Clipboard se face utiliznd opiunea Paste din
fereastra Edit sau combinaia de taste <Ctrl>+<V>.
deselectarea unui bloc de linii se face fie apsnd una din sgeile direcionale sau butonul stng
de la mouse.
Programele n VFP au ca regul general, scrierea instruciunilor pe o singur linie (255 caractere).
Dac totui vrem s scriem o instruciune pe mai multe rnduri, la sfritul fiecrei linii se pune un
caracter de continuare ; .
literele alfabetului latin, litere mari / litere mici, compilatorul nefcnd diferen ntre cele
dou tipuri;
cifrele 0..9;
7.3. Comentariul
Se folosete pentru a indica nceputul unei linii neexecutabile n program. Sunt admise pentru
comentariere:
caracterul * plasat la nceputul liniei va comentaria ntreagul rnd (fr spaiu de demarcare);
caracterele && plasate la nceputul / sfritul liniei, cu cel puin un spaiu de demarcare fa de
textul propriu-zis;
cuvntul rezervat NOTE, pentru a comentaria mai multe rnduri de text, se introduce n continuare
prima linie de comentariu (la distan de minim un spaiu), se marcheaz continuarea comentariului
pe rndul urmtor cu caracterul punct i virgul (;), nchiderea comentariului se face cu caracterul
punct.
48
Baze de date
49
Datele (variabile sau constante) utilizate n programare pot fi simple sau sub form de masiv de date
(vectori, matrici, care presupun o ordonare a datelor dup un criteriu de poziie). La rndul lor
aceste dou categorii pot fi alctuite din date de tip:
logic, care nu pot lua dect dou valori: .T. (adevrat) i .F. (fals);
numeric;
calendaristic.
Se pot construi expresii, combinnd datele (operanzi) cu operaii specifice (operatori). Operatorii la
rndul lor sunt de tip:
logic, lucreaz cu toate tipurile de date i returneaz o valoare logic (.T. / .F.)
Operator Aciune
Cod
()
NOT, !
negare logic
AND
I logic
OR
SAU logic
LvarX OR LvarY
unde Cvar variabil de tip caracter, Nvar variabil de tip numeric, Lvar variabil de tip logic.
relaional, lucreaz cu toate tipurile de date, expresia este evaluat i se returneaz o valoare
logic .T. / .F.(adevrat / fals).
Operator Aciune
Cod
<
? 23 < 54
>
egal cu
? cVar1 = cVar
<>, #, != diferit de
<=
50
>=
? 32 >= n_ani
==
n cazul variabilelor de tip caracter operatorii relaionali funcioneaz prin compararea codurilor
ASCII corespunztoare caracterelor din cele dou iruri, comparaia fcndu-se caracter cu caracter,
de la stnga la dreapta.
Dac irurile care se compar nu au aceeai lungime, implicit se completeaz irul mai scurt cu
codul ASCII pentru caracterul 0.
Operaia de egalitate a dou iruri de caractere este controlat de comanda:
SET EXACT ON|OFF
prin clauza OFF, implicit, se consider c cele dou iruri sunt egale n cazul cnd caracterele
coincid pe lungimea celui mai scurt.
prin clauza ON, egalitatea se verific pe lungimea irului mai lung, spaiile de la sfritul irurilor
sunt ignorate.
Cod
()
gruparea subexpresiilor
(4-3) * (12/Nvar2)
**, ^
exponent (putere)
? 3 ** 2 sau ? 3 ^ 2
*, /
nmulire, mprire
? 2 * 7 sau ? 14 / 7
+, -
adunare, scdere
? 4 + 15
Operator Aciune
+
Cod
Concatenare. Se unesc dou iruri de caractere, un ir i un cmp dintr-o ? 'Bun ' + 'ziua'
Baze de date
51
? 'Bun ' +
'seara'
? 'punct' $
caractere.
contrapunct'
? 'principal' $
clienti.adresa
cmpuri de tip numeric (N), ntreg (I), virgul mobil (F) dintr-un tabel;
Funcie VFP
mod (n1,n2)
abs(x)
x
partea ntreag a lui x
int(x)
ceiling(x)
floor(x)
round(nExpr,nr_zecimale)
ex
exp(x)
ln(x)
log(x)
log10 x
log10(x)
sqrt(x)
sin x
sin(x)
cos x
cos(x)
tg x
tan(x)
arcsin x
asin(x)
arccos x
acos(x)
52
arctg x
atan(x)
dtor(x)
rtod(x)
set decimals to n
valoarea constantei
PI()
Funcii financiare
Scop
Funcie VFP
PAYMENT(s,d,nr)
PV(s,d,nr)
(Present Value)
FV(s,d,nr)
(Future Value)
lunar).
53
Baze de date
54
Baze de date
55
Dac irul de caractere conine n componena sa caracterul () atunci pentru definirea irului se
folosesc caracterele ().
Scop
56
Funcie VFP
CHR(n)
ASC(c)
SUBSTR(s,n1,n2)
poziia n1
Extragerea unui subir de n caractere, ncepnd din stnga irului s
LEFT(s,n)
RIGHT(s,n)
REPLICATE(s,n)
SPACE(n)
ALLTRIM(s)
de la nceputul irului s
LTRIM(s)
de la sfritul irului s
RTRIM(s)
PADC(s,n[,
la stnga
c_pad])
la dreapta
PADL(s,n[,c_pad])
PADR(s,n[,c_pad])
LEN(s)
AT(s,ss,n)
ntr-un ir de caractere s
Returneaz poziia de nceput, la a n-a apariie, a unui subir de caractere ss
ATC(s,ss,n)
RAT(s,ss,n)
UPPER(s)
LOWER(s)
PROPER(s)
Baze de date
57
O dat de tip dat calendaristic precizeaz ziua, luna, anul, ordinea acestor 3 elemente poate fi
aleas din 11 moduri, cu ajutorul comenzii:
SET DATE TO <tip_dat>
unde:
tip_dat
Format
AMERICAN
ll/zz/aa
ANSI
aa.ll.zz
BRITISH
zz/ll/aa
FRENCH
zz/ll/aa
GERMAN
zz.ll.aa
ITALIAN
zz-ll-aa
JAPAN
aa/ll/zz
USA
ll-zz-aa
MDY
ll/zz/aa
DMY
zz/ll/aa
YMD
aa/ll/dd
Scop
58
Funcie VFP
DATE()
CDOW(d)
DOW(d)
CMONTH(d)
MONTH(d)
YEAR(d)
TIME()
DTOS(d)
numele
coninutul
tipul variabilei
locale, acioneaz ntr-o funcie sau procedur. Declararea utilizrii lor se face cu comanda:
LOCAL <list_variabile>
Baze de date
59
FOR I=1 TO 2
FIS='ESTUD'+ALLTRIM(STR(I))+'.DBF'
USE &FIS
BROWSE
ENDFOR
CLOSE DATABASES
Variabilele create cu PUBLIC / LOCAL sunt iniializate cu valoarea fals (.F.). Variabilele locale
sunt legate de funcia sau procedura n care au fost declarate, dar pot fi transmise prin referin;
60
Baze de date
61
AINS(nume_masiv,n[,2])
Are ca efect:
inserarea unei linii ntr-o matrice, naintea liniei cu numrul n, argumentul 2 lipsete;
inserarea unei coloane ntr-o matrice, naintea coloanei cu numrul n, argumentul 2 apare.
ACOPY(masiv_surs,masiv_destinaie[,nr_ncep_surs[,nr_elem_copiate[,nr_ncep_destin]]])
Este comanda de copiere a elementelor unui masiv (surs) n elementele altui masiv (destinaie),
unde:
nr_elem_copiate numrul de elemente ce vor fi copiate din masivul surs, dac are
valoarea 1 toate elementele ncepnd cu poziia nr_ncep_surs vor fi copiate;
COL. 1
COL. 2
62
Baze de date
63
ASORT(LIT,1)
Sortarea ncepe cu primul element al masivului (1,1). Elementele din prima coloan a masivului
sunt plasate n ordine ascendent prin rearanjarea liniilor masivului.
LINI
COL. 1
COL. 2
COL. 1
COL. 2
Dac sortarea se efectueaz cu succes funcia returneaz valoarea 1, n caz contrar valoarea 1.
Pentru a putea fi sortate, elementele masivului trebuie s fie de acelai tip.
64
Comenzile pentru operaiile de deschidere, creare, nchidere a unei baza de date (OPEN
DATABASES..., CREATE DATABASES, CLOSE DATABASES), tabel de date (USE...,
CREATE TABLE..., CLOSE TABLES, USE), fiiere de index (USE...INDEX..., INDEX ON...,
CLOSE INDEX) n modul de lucru comand (interpretor), au aceeai sintax i n cadrul
programelor scrise n limbajul propriu VFP.
Clauza PROMPT determin afiarea unei casete de dialog nainte de ieirea la imprimant
(se pot face setri legate de imprimant).
Baze de date
65
Se mai poate folosi i comanda LIST STRUCTURE care are aceleai clauze.
Copierea structurii unui tabel
Crearea unui nou tabel care va conine structura tabelului activ se face cu comanda
COPY STRUCTURE EXTENDED TO <nume_fiier> [FIELDS <list_cmpuri>]
Numai cmpurile din lista de cmpuri vor fi incluse n nregistrarea din noul fiier. Dac clauza
FIELDS este omis, vor fi incluse toate cmpurile tabelului surs.
Comanda GO
GO [RECORD] <nr_nreg> [IN <nr_zon_de_lucru> | IN <alias_tabel>]
sau
GO TOP | BOTTOM [IN <nr_zon_de_lucru> | IN <alias_tabel>]
Comanda are ca efect mutarea pointer-ului de pe nregistrarea curent pe nregistrarea nr_nreg.
Funcia RECNO()
Returneaz numrul curent al nregistrrii pe care este poziionat pointer-ul n fiierul curent sau
specificat.
RECNO(<nr_zon_de_lucru> | <alias_tabel>)
nr_zon_de_lucru reprezint zona de lucru n care este activ tabelul. Dac s-a lansat o comand
SEEK pentru a cuta o nregistrare i aceasta nu a fost gsit, se poate utiliza comanda GO
66
RECNO(0) pentru a returna numrul nregistrrii cu cea mai apropiat valoare cutat. Funcia
RECNO(0) va returna valoarea 0 dac nu s-a gsit nici o valoare apropiat.
Funcia RECCOUNT()
Returneaz numrul de nregistrri din tabelul curent sau specificat.
RECCOUNT(<nr_zon_de_lucru> | <alias_tabel>)
Funcia EOF()
Este funcia logic care returneaz valoarea adevrat (.T.), dac pointer-ul de fiier este poziionat
pe ultima nregistrare, n fiierul curent. n caz contrar, valoarea returnat este fals (.F.).
EOF ([<nr_zon_de_lucru> | <alias_tabel>])
Funcia BOF()
Este funcia logic care returneaz valoarea adevrat (.T.), dac pointer-ul de fiier este poziionat
pe prima nregistrare, n fiierul curent. n caz contrar, valoarea returnat este fals (.F.).
BOF ([<nr_zon_de_lucru> | <alias_tabel>])
Comanda SKIP
SKIP [<nr_nreg>] [IN <nr_zon_de_lucru> | IN <alias_tabel>]
nr_nreg specific numrul de nregistrri peste care se mut pointer-ul n fiier. Dac nu se
specific, pointer-ul se va muta la urmtoarea nregistrare. Dac valoarea lui nr_nreg este pozitiv,
pointer-ul se mut ctre sfritul fiierului. Dac valoarea este negativ, pointer-ul se mut ctre
nceputul fiierului.
Comanda SET FILTER TO
Specific condiia pe care trebuie s o ndeplineasc nregistrrile din tabelul curent pentru a putea
fi accesate.
SET FILTER TO [<expr_L>]
expr_L condiia de accesare a nregistrrilor. Numai nregistrrile care satisfac expresia logic
sunt disponibile i toate comenzile care vor accesa tabelul vor respecta condiia declarat n
comanda SET FILTER TO. Dac este omis, toate nregistrrile sunt accesibile.
Baze de date
67
Comanda LOCATE
Realizeaz cutarea secvenial ntr-un tabel, a primei nregistrri care ndeplinete condiiile
specificate n expresia logic de cutare.
LOCATE FOR <expr_L_1> [Scope] [WHILE <expr_L_2>]
unde:
FOR expr_L _1 este condiia pentru care are loc cutarea secvenial.
Scope specific domeniul nregistrrilor n care are loc cutarea. Numai nregistrrile din
interiorul domeniului vor fi evaluate. Clauza poate lua valorile ALL, NEXT n, RECORD n,
REST. Implicit clauza este ALL (toate nregistrrile).
Comanda CONTINUE
Se utilizeaz dup o comand LOCATE, pentru a continua cutarea, dup gsirea primei nregistrri
care ndeplinete condiiile specificate. Comanda CONTINUE mut pointer-ul de fiier la
urmtoarea nregistrare pentru care expresia logic din comanda LOCATE este adevrat.
Exemplu. Presupunem c avem un tabel CLIENTI i vrem s aflam numrul clienilor care sunt din
Frana.
USE CLIENTI
STORE 0 TO TOTAL
LOCATE FOR ALLTRIM(UPPER(TARA))=FRANTA
DO WHILE FOUND()
TOTAL=TOTAL+1
CONTINUE
ENDDO
?TOTAL CLIENTI DIN FRANTA: +LTRIM(STR(TOTAL))
CLOSE DATABASES
Comanda SEEK
Caut ntr-un tabel o nregistrare la prima apariie, a crei cheie de index se potrivete cu expresia
general i mut pointer-ul pe nregistrarea gsit.
68
ORDER nr_index specific numrul fiierului index care conine cheia de indexare. Dac
s-au deschis odat cu tabela i fiierele de index, este numrul care indic poziia din lista de
fiiere de index.
Exemplu. S se indexseze fiierul ESTUD2 dup cmpul NUME i s se caute nregistrrile care
ncep cu literele BAR. Structura tabelului ESTUD2: MATR N(5), NUME C(40), ADRESA C(30),
ANS N(1), DATAN D, MBAC N(5,2)
USE ESTUD2
INDEX ON UPPER(NUME) TAG NUME
STORE 'BAR' TO CAUTL
SEEK CAUTL
IF FOUND( )
BROWSE FIELDS NUME, ADRESA FOR UPPER(NUME)=CAUTL
ELSE
WAIT WINDOW 'NU EXISTA INREGISTRARE'
ENDIF
CLOSE DATABASES
Funcia FOUND()
Retuurneaz valoarea logic adevrat (.T.), dac comenzile CONTINUE, LOCATE sau SEEK s-au
executat cu succes.
FOUND(<zon_de_lucru> | <alias_tabel>)
Baze de date
69
Dac argumentele zon_de_lucru, alias_tabel sunt omise, funcia va returna rezultatul pentru
fiierul deschis n zona de lucru curent.
Vizualizarea coninutului unei tabele
Comanda afieaz informaii (nume cmpuri, date) despre tabelul activ n ferestra principal VFP
sau ntr-o ferestr definit de utilizator. Sintaxa este
DISPLAY[[FIELDS] <list_cmpuri>] [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>]
[NOCONSOLE] [TO PRINTER [PROMPT] | TO FILE <nume_fiier>]
unde:
[FIELDS] <list_cmpuri>] specific cmpurile care vor fi afiate. Dac se omite clauza
se vor afia toate cmpurile.
FOR <expr_L_1> - vor fi afiate doar nregistrrile care satisfac condiia logic.
WHILE <expr_L_2> - atta vreme ct condiia este ndeplinit, nregistrrile vor fi afiate.
FOR < expr_L> - se va aduga cte o nou nregistrare, din nregistrrile tabelului selectat
pentru adugare, cele care ndeplinesc condiia dat de expresia logic expr_L.
TYPE specific tipul fiierului surs din care se adaug. Se folosete n cazul n care nu
este un tabel VFP.
DELIMITED fiierul surs din care se adaug datele n tabelul VFP este un fiier de tip
ASCII n care fiecare nregistrare se termin cu <CR> i <LF> (Enter i Line Feed - salt la
linie nou). Cmpurile coninute sunt implicit separate prin virgul, iar cele de tip caracter
sunt declarate ntre apostroafe duble.
FIELDS <list_cmpuri>- specific faptul c numai anumite cmpuri (cele din list) din
noua nregistrare vor fi actualizate cu date din linia masivului.
FIELDS LIKE <ablon>- specific faptul c doar cmpurile care se potrivesc ablonului vor
fi actualizate.
70
Baze de date
71
Dac masivul este unidimensional, comanda APPEND FROM ARRAY adaug o singur
nregistrare n tabel, coninutul primului element trece n primul cmp al nregistrrii, coninutul
celui de al doilea element trece n cel de al doilea cmp etc., cmpurile MEMO i GENERAL sunt
ignorate.
Exemplu comanda:
APPEND FROM ARRAY NUME FIELDS LIKE M*, A* EXCEPT NUM*
are ca efect adugarea din masivul NUME, a cmpurilor care ncep cu litera M i A mai puin cele
care au primele trei litere NUM. Caracterul asterisc (wildcard) are semnificaia de orice combinaie
de caractere.
Not Utilizarea clauzelor FIELDS LIKE i EXCEPT trebuie s se fac ntr-un tabel ale crui
nregistrri au cmpuri care accept valori de tip NULL (pentru a putea fi exceptate de la
scriere).
Exist i comanda invers, cu care putem aduga datele din nregistrarea curent a unui tabel ntr-un
masiv:
SCATTER [FIELDS <list_cmpuri>] | [FIELDS LIKE <ablon>] | [FIELDS EXCEPT <ablon>]
[MEMO] TO ARRAY <nume_masiv> [BLANK]
Semnificaia clauzelor este aceai ca i la comanda APPEND FROM ARRAY ..., clauza BLANK
determin crearea masivului cu elemente vide, care sunt de aceai mrime i tip cu cmpurile din
tabel. Clauza MEMO specific existena unui cmp de tip MEMO n list; implicit cmpurile
MEMO sunt ignorate.
Exemplu. S se creeze un masiv cu numele MASIV1, s se ncarce cu date vide, de acelai tip i
mrime cu cele ale cmpurilor tabelului ESTUD1 (MATR N(5), NUME C(40), ADRESA C(30),
ANS N(1), DATAN D, MBAC N(5,2)). S se introduc datele cmpurilor n masiv i s se adauge
sub form de nregistrare nou n tabelul ESTUD1.
USE ESTUD1
* se deschide tabelul ESTUD1
SCATTER TO MASIV1 BLANK
72
DATA <expr_c> - expresie de tip caracter care este evaluat i trecut sub form de ir de
caractere ctre obiectul OLE din cmpul general. Obiectul OLE trebuie s fie capabil s
primesc i s proceseze irul de caractere. De exemplu nu poate fi trimis un ir de caractere
ctre un obiect grafic creat cu Paint Brush.
LINK - creaz o legtur ntre obiectul OLE i fiierul care conine obiectul. Obiectul OLE
apare n cmpul general, dar definirea obiectului rmne n fiierul care-l conine. Dac se
omite clauza, obiectul este nglobat n cmpul general.
CLASS <nume_clas> - specific o clas pentru un obiect de tip OLE, alta dect clasa
implicit.
Baze de date
73
FOR <expresie_L_1> - specific faptul c doar nregistrrile care satisfac condiia logic
dat de expresie_L_1, vor fi afiate n fereastra de editare.
Comanda BROWSE este una dintre cele mai utilizate comenzi pentru afiarea i editarea
nregistrrilor dintr-un tabel. Cu ajutorul tastelor <TAB> sau <SHIFT>+<TAB> se poate face
deplasarea n cmpul urmtor sau anterior. Cu tastele <Page Up> <Page Down> se pot face
deplasri pe vertical n tabel.
Apsarea simultan a tastelor: <Ctrl>+<End> sau <Ctrl>+<W> - ieire cu salvare din fereastra
de BROWSE; <Ctrl>+<Q>sau <Esc> ieire fr salvarea modificrilor.
STYLE <stil_font> - specific stilul literelor folosite n fereastra BROWSE (B- ngroat, Iitalic, U- subliniat).
FOR <expr_L_1> - vor fi afiate numai acele nregistrri care ndeplinesc condiia dat de
expresia logic expr_L_1.
FREEZE <nume_cmp> - permite modificri doar ntr-un singur cmp, specificat prin
nume_cmp.
LOCK <nr_cmpuri> - specific numrul cmpurilor care pot fi afiate n partea stng, n
fereastra BROWSE, fr a fi necesar deplasarea cu TAB-uri sau cursorul ferestrei (Scroll
Bar).
NOAPPEND mpiedic utilizatorul s adauge noi nregistrri (se inhib aciunea tastelor
<Ctrl>+<Y> i opiunea Append new record din meniul Table).
WHEN <expr_L_3> - se evaluaez condiia dat de expresia logic expr_L_3 atunci cnd
utilizatorul mut cursorul la o alt nregistrare. Dac expresia returneaz valoarea .F. (fals)
nregistrarea nu mai poate fi modificat (devine read-only).
74
Baze de date
75
Scope specific domeniul nregistrrilor care vor fi nlocuite (NEXT n, ALL, REST,
RECORD n).
FOR <expr_L_1> - specific faptul c vor fi nlocuite cmpurile desemnate, doar din
nregistrrile pentru care evaluarea expresiei logice expr_L_1 are valoarea .T. (adevrat).
WHILE <expr_L_2> - specific condiia pentru care atta vreme ct expresia logic are
valoarea .T., cmpurile desemnate vor fi modificate.
76
Clauza ON este implicit i determin afiarea unei casete de dialog, pentru confirmarea de
ctre utilizator a suprascrierii fiierului.
FOR <expr_L_1> - specific condiia pentru care vor fi marcate pentru tergere acele
nregistrri pentru care expr_L_1 este adevrat.
WHILE <expr_L_2> - vor fi marcate pentru tergere nregistrri, atta vreme ct condiia
expr_L_2 este adevrat.
Funcia DELETED() returneaz o valoare logic care indic dac nregistrarea curent a fost
marcat pentru tergere.
DELETED ([nr_zon_de_lucru | alias_tabel])
Comanda RECALL deselecteaz nregistrrile marcate pentru tergere.
RECALL [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>]
unde:
FOR <expr_L_1> - doar nregistrrile pentru care expr_L_1 este adevrat (.T.) vor fi
deselectate.
Comanda PACK face parte din comenzile de tergere la nivel fizic; va terge toate nregistrrile
marcate pentru tergere din tabelul curent.
Baze de date
77
MEMO permite tergerea fiierului MEMO ataat tabelului curent, dar nu i nregistrrile
marcate pentru tergere (fiierul MEMO are acelai nume cu tabelul dar extensia este .FPT).
DBF se vor terge nregistrrile marcate pentru tergere din tabelul curent, dar nu
afecteaz fiierul MEMO.
Comanda ZAP terge fizic toate nregistrrile din tabel, rmnnd doar structura tabelului. Este
echivalent cu comanda DELETE ALL, urmat de comanda PACK, dar este mult mai rapid.
ZAP [nr_zon_de_lucru | alias_tabel]
Comanda DELETE FILE terge un fiier de pe disc.
DELETE FILE [<nume_fiier>] [RECYCLE]
unde:
Comanda SET DELETED specific dac sistemul VFP va procesa (terge) nregistrrile marcate
pentru tergere sau dac acestea sunt disponibile pentru a fi utilizate n alte comenzi.
SET DELETED ON | OFF
Semnificaia clauzelor:
Clauza OFF este implicit. nregistrrile marcate pentru tergere pot fi accesate de alte
comenzi care opereaz cu nregistrri.
Clauza ON are ca efect ignorarea nregistrrilor marcate pentru tergere, de comenzile care
opereaz cu nregistrri.
78
nume_fiier specific numele noului fiier care se creaz cu comanda COPY TO.
FIELDS <list_cmpuri> - specific n list cmpurile ce vor fi copiate n noul fiier. Dac
clauza se omite, atunci toate cmpurile din tabelul activ vor fi copiate. Prin declararea
clauzei FIELDS se realizeaz operaia de proiecie (se selecteaz numai anumite cmpuri coloane - din tabel).
FIELDS LIKE <ablon> - specific cmpurile din tabelul surs care se potrivesc unui ablon
i vor fi copiate n noul fiier. Se poate folosi i caracterul asterisc (de exemplu comanda
COPY TO TABEL1 FIELDS LIKE P*,A* va avea ca efect copierea n noul fiier a tuturor
cmpurilor care ncep cu litera P i A).
FIELDS EXCEPT <ablon> - vor fi copiate toate cmpurile, mai puin cele care se
ncadreaz n ablonul specificat.
Scope specific domeniul din care vor fi selectate nregistrrile care vor fi copiate.
FOR <exprL_1> - vor fi copiate doar acele nregistrri pentru care evaluarea expresiei
logice exprL_1 are valoarea adevrat (.T.)
WHILE <exprL_2> - specific condiia pentru care atta vreme ct expresia logic exprL_2
este adevrat, nregistrrile vor fi copiate n noul fiier.
Not Dac se utilizeaz clauzele [Scope], FOR sau WHILE, fr clauza FIELDS, se va
implementa operatorul relaional de selecie (se aleg doar o parte din nregistrri, cu toate
cmpurile). Dac se folosete clauza FIELDS n combinaie cu clauzele [Scope], FOR sau
WHILE, va rezulta o operaie compus: proiecie i selecie.
Baze de date
79
ADDITIVE clauza pstreaz toate celelalte relaii stabilite anterior n zona de lucru
specificat.
Pentru a stabili o relaie ntre dou tabele trebuie ndeplinite urmtoarele condiii:
cele dou tabele ntre care se stabilete relaia tata-fiu trebuie s fie indexate dup aceeai
cheie (cmp), care face legtura ntre ele;
Tabelele legate printr-o relaie au n general un cmp comun. De exemplu, presupunem c avem un
tabel CLIENI, care conine informaii despre clieni i are cmpuri pentru nume, adres, i un cod
unic al clientului. Un al doilea tabel, FACTURI, conine informaii despre facturi (numr, cantitate,
produse etc.), care va avea de asemenea un cmp pentru codul clientului. Se pot uni astfel
informaiile despre clieni cu cele despre facturi. Comanda SET RELATION leag cele dou tabele
prin cmpul comun cod client. Pentru a stabili relaia, tabelul-fiu (FACTURI) trebuie s fie indexat
dup cmpul comun. Dup stabilirea relaiei, de cte ori mutm pointer-ul n fiierul CLIENI pe o
nregistrare, pointer-ul din fiierul FACTURI (fiu) se va muta pe nregistrarea care are acelai cod
client corespunztor n fiierul CLIENI.
Exemplu
SELECT 2
USE CLIENTI
SELECT 3
USE FACTURI
INDEX ON COD_CLIENT TAG COD_CLIENT ADDITIVE
&& se indexeaz cmpul COD_CLIENT
80
SELECT 2
SET ORDER TO TAG COD_CLIENT OF FACTURI.CDX IN FACTURI
&& se stabilete indexul principal
SET RELATION TO COD_CLIENT INTO FACTURI ADDITIVE
&& se stabilete relaia ntre CLIENI, FACTURI
Comanda RENAME redenumete un fiier.
RENAME <nume_fiier1> TO <nume_fiier2>
unde:
DYSPLAY FILES [ON <Drive>] [LIKE <ablon>] [TO PRINTER [PROMPT]] | TO FILE
<nume_fiier>]
LIKE <ablon> - specific condiia pentru care vor fi afiate informaii, doar despre acele
fiiere care se ncadreaz n ablon.
Informaii identice se pot obine i cu comanda DIR care are aceleai clauze.
Comanda SET ALTERNATE direcioneaz la ecran sau la imprimant, ieirea rezultat din
folosirea comenzilor DISPLAY sau LIST.
SET ALTERNATE ON | OFF
sau
SET ALTERNATE TO [<nume_fiier> [ADDITIVE]]
Baze de date
81
unde:
ADDITIVE clauz prin care ieirea este adugat la sfritul fiierului specificat cu
nume_fiier. Dac se omite clauza, coninutul fiierului de ieire este suprascris.
folosind comanda SORT, prin care se creaz un nou fiier cu nregistrrile sortate dup
criteriul ales.
folosind metoda indexrii, care const n crearea unui fiier de index, n care se stocheaz
ordinea nregistrrilor din tabelul surs.
nume_cmp_1 specific cmpul din tabelul nesortat asupra cruia se aplic procedura.
Implicit sortarea este ascendent. Nu se pot sorta cmpuri memo sau general. Este cheia
primar dup care se face sortarea.
Scope specific domeniul de sortare (tot fiierul sau doar o parte din nregistrri) ALL,
NEXT n, RECORD n, REST.
FOR expresie_1 specific care nregistrri particip la sortare, respectiv acelea pentru care
expresie_1 are valoarea TRUE
WHILE expresie_2 specific condiia pentru care atta vreme ct au valoarea TRUE,
nregistrrile vor fi sortate.
FIELDS lista_cmpurilor specific cmpurile din tabelul original care vor fi incluse n
noul fiier sortat. Dac se omite clauza, toate cmpurile din tabelul original vor fi incluse n
tabelul sortat.
Exemplu. S se sorteze fiierul ESTUD1, ntr-un nou fiier SESTUD1, dup cmpul NUME,
ascedent, fr s se in seama de litere mici/mari, lund doar studenii cu media peste 8.00 i
cmpurile MATR, NUME, MBAC.
USE ESTUD1
SORT TO SESTUD1 ON NUME/A/C FOR MBAC>8.00 FIELDS MATR,NUME,MBAC
USE SESTUD1
BROWSE
CLOSE DATABASES
DELETE FILE SESTUD1.DBF
Sortarea este un procedeu care n cazul tabelelor mari duce la mrirea timpului de execuie i a
spaiului solicitat pe hard disk. Se consider c este mai eficient folosirea metodei indexrii.
82
Baze de date
83
Prin metoda indexrii se creaz un fiier de index, care va conine cel puin un cmp al tabelei
de date, sortat dup un criteriu alfabetic, numeric sau cronologic. Fiierul de index este o sortare
virtual a unei tabele, nregistrrile din tabelul de date rmnnd nesortate. Fiierul de index conine
informaii de localizare a nregistrrilor dintr-o tabel.
Fiierele index sunt de 2 tipuri:
simple au extensia IDX, conin o singur cheie de indexare i deci un singur criteriu de
ordonare.
compuse au extensia CDX (Compound Index File), n care se stocheaz mai multe criterii
de ordonare, fiecare avnd asociat un nume ( TAG - eticheta de index), corespunztor mai
multor chei de indexare.
<expr> - expresia indexului care include cmpuri din tabela ce va fi indexat. Tipurile de
expresii admise sunt: C, D, N.
TAG<tag_name> OF<.CDX file> - permite crearea unui fiier cu mai multe intrri (etichete
de index TAG-uri), numrul lor fiind limitat doar de spaiul pe hard disk.
UNIQUE pentru valori repetate ale cheii, specific includerea n fiierul de index numai la
prima apariie.
ADDITIVE permite crearea unui fiier de index pentru o tabel, chiar dac mai sunt
deschise alte fiiere de index.
Indexarea dup mai multe cmpuri este similar sortrii multiple. Nu se pot face indexri multiple
pe cmpuri cu tipuri diferite, deci trebuie aduse la o form comun (ir de caractere).
84
Comanda
INDEX ON cmp_car + STR(cmp_numeric,nc) + DTOS(cmp_dat) TO <fiier_index>
permite indexarea dup 3 cmpuri diferite.
Semnificaia parametrilor i a clauzelor:
Pentru deschiderea simultan a tabelei de date i a fiierelor de index asociate se folosete comanda:
USE <nume_tabel> INDEX <list_fiiere_index>
Exemplul 1. Presupunem c avem un tabel (STUD) cu urmtoarea structur:
matricola
N(5)
nume
C(40)
data_n
adresa
C(40)
nume
data_n
215
Aldea I. Dan
22/03/79 Bucureti
110
Barbu A. Vasile
10/05/80 Craiova
300
Alexandru F. Ion
13/07/80 Iai
200
Dinu A. Adrian
25/08/79 Bucureti
210
Cornea C. Ilie
16/07/80 Ploeti
250
Ene V. Dan
24/03/80 Bucureti
Secvena de comenzi:
CLEAR
USE STUD
BROWSE
INDEX ON MATRICOLA TO IMATR.IDX
?? NDX(1)
adresa
Baze de date
85
nr_nreg
110
200
210
215
250
300
Exemplul 2. S se indexseze tabelul STUD dup cmpul NUME i s se creeze un fiier structural
STUD.CDX.
USE STUD
INDEX ON UPPER(NUME) TAG NUME
BROWSE
CLOSE DATABASES
Exemplul 3. S se indexeze tabelul ESTUD1 dup cmpul NUME, s se creeze un fiier
nestructural INUM.CDX, ordonat ascendent dup valorile cheii:
USE ESTUD1
INDEX ON UPPER(NUME) TAG NUME OF INUM.CDX ASCENDING
BROWSE
CLOSE DATABASES
Exemplul 4. Utiliznd tabelul ESTUD1 s se indexeze tabelul dup o cheie compus (NUME,
MBAC), fr a permite existena dublurilor, ntr-un fiier de index INM.IDX. Structura tabelului
este: MATR N(5), NUME C(40), ADRESA C(30), ANS N(1), ANIF N(4), DATAN N(4), MBAC
N(5,2).
USE ESTUD1
INDEX ON UPPER(NUME)+STR(MBAC,5) TO INM.IDX UNIQUE
BROWSE
CLOSE DATABASES
Exemplul 5. S se indexeze tabelul ESTUD1 dup cmpul numeric MATR, ntr-un fiier de index
IMATR.IDX, numai pentru nregistrrile care au cmpul MBAC (medie bacalaureat) >8.00:
USE ESTUD1
INDEX ON MATR TO IMATR.IDX FOR MBAC>8.0
BROWSE
CLOSE DATABASES
86
Baze de date
87
9. Programarea procedural
Mediul VFP ofer pe lng modul de lucru n fereastra de comand (stil interpretor de comenzi) i
posibilitatea de a dezvolta programe surs n limbajul propriu sistemului (stil compilator), prin
comenzi i funcii care descriu datele i pot efectua prelucrrile necesare dezvoltrii aplicaiei.
Programul surs folosete att tehnica de programare procedural (structurat, modular) ct i cea
de programare pe obiecte. ntr-un program surs pot fi utilizate de asemenea i comenzile din
nucleul SQL, care permit o programare descriptiv i de manipulare a datelor la nivel de tabel.
Limbajul VFP ofer facilitatea de creare a unui proiect, n care aceste module pot fi declarate n una
din categoriile implementate:
Data se pot declara baze de date (Databases), tabele libere (Free Tables), interogri
(Query);
Other alte componente: meniuri (Menus), fiiere de tip text (Text Files);
Toate aceste componente sunt nglobate n proiect, care constituie baza pentru crearea aplicaiei n
format executabil.
9. Programarea procedural
88
SAY <expr> - comanda de afiare pe ecran, la coordonatele fixate, a unei expresii sau a unei
funcii.
PICTURE <expr_c1> - formatul de afiare (se utilizez codurile din tabel indicndu-se
formatul ntre apostroafe: 9999.99, pentru date de tip numeric).
Semnificaie
Caractere alfabetice
Litere i cifre
Orice caractere
Baze de date
89
CENTER clauza pentru plasarea obiectului BMP n centrul unei arii determinate prin
clauza SIZE sau delimitate de coordonatele linie, coloan.
ISOMETRIC | STRETCH clauze pentru cazul n care zona de afiare a obiectului BMP
este mai mic dect dimensiunea real a acestuia. ISOMETRIC redimensioneaz obiectul la
dimensiunea ariei, cu pstrarea proporiilor. STRECH creaz un raport separat pentru fiecare
coordonat OX, OY, obiectul se poate distorsiona pe vertical sau orizontal.
Exemplu.
@1,1 SAY "1.JPG" BITMAP CENTER ISOMETRIC
9. Programarea procedural
90
WAIT WINDOW
CLEAR
Comanda
@<linie>,<coloana> GET <var> [PICTURE <expr_c>]
permite editarea variabilei de memorie var (pentru a introduce o nou valoare).
Se poate combina operaia de afiare cu cea de editare a unei variabile, caz n care vom utiliza
comanda:
@<linie>,<coloana> SAY <mesaj> GET <var>
ntotdeauna o comand (sau mai multe comenzi) @...GET va fi nsoit de o comand READ.
Practic se poate construi o machet cu cmpuri de afiare @SAY i cmpuri de citire @GET,
cursorul se deplaseaz de la o linie la alta apasnd tasta <ENTER> sau <TAB> i napoi cu
<SHIFT>+<TAB> (permite reactualizarea unor cmpuri nainte de citirea efectiv). La apsarea
tastei <ENTER> la ultima linie GET se va executa comanda READ i se va citi ntreg ecranul.
Comanda READ realizeaz citirea tuturor cmpurilor editate cu comanda GET.
READ [CYCLE] [MODAL] [VALID <expr_L>|<expr_N>] [WHEN <expr_L1>]
unde:
CYCLE clauz care mpiedic ncheierea citirii variabilelor editate, atunci cnd cursorul
depete primul sau ultimul obiect creat cu GET. Dac utilizatorul se plaseaz pe ultimul
obiect GET i apas <Enter> sau <TAB>, cursorul se va deplasa pe primul obiect GET.
Pentru a ncheia o comand READ ciclic se apas tasta <Esc> sau tastele <CTRL>+<W>.
MODAL este clauza care previne activarea ferestrelor care nu sunt implicate n execuia
comenzii READ.
VALID expr_L | expr_N clauz care valideaz valorile introduse n cmpul GET, la
terminarea comenzii READ. Dac expresia logic returneaz valoarea adevrat (.T.)
comanda READ se ncheie.
Baze de date
91
Comanda IFENDIF execut condiionat un set de comenzi, n funcie de valoarea logic returnat
de o
exprL specific expresia logic care este evaluat. Dac cele dou clauze THEN i ELSE
sunt prezente i expresia este adevrat vor fi executate comenzile de pe ramura THEN,
dac expresia este fals, vor fi executate comenzile de pe ramura ELSE.
Dac expresia logic este fals i ramura ELSE nu este inclus, va fi executat prima
comand care urmeaz clauzei ENDIF.
Clauza ENDIF trebuie inclus la orice declarare a unui IF. O comand IF poate include mai
multe blocuri IFENDIF pe ramurile sale (imbricare), cu condiia ca nchiderea lor (cu
ENDIF) s se fac n aceai ordine ca i deschiderea (nu se admite intersecia blocurilor).
Exemplu. n fiierul PRODUSE, s se caute un anumit produs; dac este gsit s se afieze
cmpurile PRODUS, CANT, PU, dac nu, s se afieze un mesaj.
CLEAR
USE PRODUSE
GETEXPR 'INTRODUCETI CONDITIA DE LOCALIZARE' TO
GTEMP;
TYPE 'L' DEFAULT 'PRODUS = ""'
LOCATE FOR &GCTEMP
&& caut produsul cu comanda LOCATE
IF FOUND( )
&& dac este gsit
DISPLAY FIELDS PRODUS,CANT,PU&& afieaz cmpurile PRODUS, CANT,
9. Programarea procedural
92
PU
ELSE
&& dac nu
? 'CONDITIA ' + GTEMP + ' NU A FOST GASITA '
&& afieaz mesajul
ENDIF
CLOSE TABLE
Funcia IIF returneaz pe baza evalurii unei expresii logice, una din cele dou valori ale unei
expresii de tip numeric, caracter, moned, dat calendaristic sau timp.
IIF(expr_L, expr_1, expr_2)
unde: expr_L specific expresia logic pe care funcia o evalueaz.
Aceast funcie este cunoscut i sub numele de IF scurt (imediat). Este folosit mai ales la
expresiile care condiioneaz afiarea coninutului unui cmp, n rapoarte sau etichete. Execuia sa
este mai rapid dect echivalentul su IFENDIF.
Comanda DO CASEENDCASE
Execut primul set de comenzi ale cror expresie condiional este adevrat. Comanda este
echivalentul unor instruciuni IF cascadate.
DO CASE
CASE <expr_L_1>
<comenzi>
CASE <expr_L_2>
<COMENZI>
....
CASE <expr_L_n>
<comenzi>
[OTHERWISE
<comenzi>
ENDCASE
Aciunea comenzii:
Baze de date
93
CASE <expr_L_1>
valoarea adevrat, blocul de comenzi va fi executat pn la apariia unei noi comenzi CASE
sau a clauzei ENDCASE. Execuia programului continu cu prima instruciune executabil
care urmeaz lui ENDCASE.
Dac expresia din prima clauza CASE este fals, blocul de comenzi aferent este ignorat i se
trece la evaluarea expresiei logice a urmtoarei clauze CASE.
Dup gsirea primei expresii logice adevrat, orice alt clauz CASE pentru care expresia
logic este adevrat, va fi ignorat.
OTHERWISE <comenzi> - dac toate expresiile logice CASE au returnat valoarea fals,
clauza ofer o alternativ pentru introducerea unui bloc de comenzi un bloc de comenzi.
Exemplu
@1,1 SAY DATI N: GET N
READ
DO CASE
CASE N = 0
? 'ZERO'
CASE N > 0
? 'POZITIV'
OTHERWISE
? 'NEGATIV'
ENDCASE
WAIT WINDOW
9. Programarea procedural
94
<comenzi>
[EXIT]
[LOOP]
ENDFOR | NEXT
unde:
var specific o variabil sau un element de masiv, de tip ntreg, care acioneaz ca un
contor (variabil de ciclare).
EXIT permite ieirea forat din ciclu (nainte de atingerea valorii finale a variabilei de
ciclare). n program va fi executat prima comand care urmeaz clauzei ENDFOR.
LOOP returneaz controlul napoi comenzii FOR, fr a se mai executa comenzile dintre
LOOP i ENDFOR. Contorul este incrementat sau decrementat ca i cum s-ar ajunge la
clauza ENDFOR.
Exemplu. Din fiierul CLIENTI se vor afia la monitor, din primele 10 nregistrri, din doi n doi,
clienii.
USE CLIENTI
STORE 2 TO VI,K
STORE 10 TO VF
DISPLAY FIRMA
ENDFOR
CLOSE TABLE
Comanda DO WHILE ... ENDDO execut un bloc de comenzi n interiorul unui ciclu condiionat
anterior.
DO WHILE <expr_L>
<comenzi>
[LOOP]
Baze de date
95
[EXIT]
ENDDO
unde:
expr_L specific o expresie logic a crei valoare de adevr determin dac blocul de
comenzi cuprins ntre DO WHILE i ENDDO va fi executat. Atta vreme ct condiia logic
este adevrat, comenzile vor fi executate.
EXIT transfer controlul, din interiorul ciclului DO WHILE, ctre prima comand care
urmeaz clauzei ENDDO. Clauza este echivalent cu o ieire forat din ciclu.
Exemplu. Din fiierul PRODUSE s se afieze totalul produselor n stoc, care au preul mai mare de
30$.
CLEAR
USE PRODUSE
STOC=0
DO WHILE !EOF()
IF PU<30
SKIP
ENDIF
STOC=STOC+CANT
? PRODUS,CANT
SKIP
ENDDO
CLOSE TABLES
?STOC
Comanda SCAN...ENDSCAN realizeaz mutarea pointer-ului prin toate nregistrrile din tabelul
curent i execut un bloc de comenzi pentru nregistrrile care corespund condiiilor specificate.
SCAN
[Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>]
[comenzi]
9. Programarea procedural
96
[LOOP]
[EXIT]
[ENDSCAN]
unde:
Scope specific domeniul nregistrrilor care vor fi scanate (clauze: ALL, NEXT n,
RECORD n, REST). Clauza implicit este ALL.
FOR expr_L_1 execut comenzile doar pentru nregistrrile pentru care expresia logic
expr_L_1 este adevrat. Includerea clauzei permite filtrarea nregistrrilor, eliminnd pe
cele pe care nu vrem s le scanm.
WHILE expr_L_2 specific o condiie pentru care blocul de comenzi va fi executat atta
vreme ct valoarea expresiei logice expr_L_2 este adevrat.
LOOP returneaz controlul napoi la comanda SCAN (se reia execuia comenzii).
Exemplu. Utiliznd comanda SCAN s se afieze din fiierul CLIENI, numele firmei, oraul i
persoana de contact, cu care o firm are contracte n FRANA.
USE CLIENTI
SCAN FOR UPPER(TARA)=FRANTA
? FIRMA,ORAS,CONTACT
ENDSCAN
CLOSE TABLES
Baze de date
97
Definirea unei proceduri de ctre utilizator, este de asemenea un bloc de comenzi, care prelucreaz
parametrii transmii din programul apelant. Dup prelucrare controlul este redat programului
apelant.
Din punct de vedere al locaiei, funciile se pot defini fie n programul apelant, fie ntr-o librrie sau
pot fi salvate n fiiere externe, de tip .PRG.
9.2.1. Proceduri
Asocierea procedurilor cu programul apelant se face cu comanda:
SET PROCEDURE TO [<fiier_1> [,<fiier_2>,...]] [ADDITIVE]
unde:
fiier_1,fiier_2 specific succesiunea n care vor fi deschise fiierele. Se pot declara mai
multe nume de fiiere care conin proceduri. Aceast opiune permite crearea unor librrii de
sine stttoare de funcii care pot fi specificate separat.
PARAMETERS list_parametrii
bloc de comenzi
RETURN [expresie]
PROCEDURE este o declaraie n interiorul unui program, care specific nceputul unei
proceduri i definete numele procedurii. Numele procedurii poate ncepe cu o liter sau
caracterul _ (underscore) i poate conine orice combinaie de litere, numere i caractere
underscore. Lungimea maxim a numelui este de 254 caractere.
9. Programarea procedural
98
Metoda folosit la transmiterea parametrilor la proceduri sau funcii este implicit prin
valoare iar la programe prin referin.
Variabilele transmise ctre procedur cu comanda DO...WITH sunt transmise prin referin.
9.2.2. Funcii
Elementele unei funcii definite de utilizator (UDF) sunt:
FUNCTION nume_funcie
bloc de comenzi
RETURN [expresie]
Implicit parametrii sunt transmii n funcie prin valoare. Numrul maxim de parametri care poate fi
transmis, este 27. Parametrii pot fi transmii n funcie, prin includerea clauzei PARAMETERS n
funcie, sau prin plasarea unei liste de parametri imediat dup FUNCTION nume_funcie. Lista se
inchide ntre paranteze, parametrii sunt separai cu virgul.
Baze de date
99
Comanda
SET UDFPARAMS TO VALUE | REFERENCE
specific dac parametrii sunt transmii ctre o funcie definit de utilizator (UDF) prin valoare sau
prin referin. Cnd o variabil este transmis prin valoare, valoarea variabilei poate fi modificat n
funcia definit de utilizator, dar valoarea original a variabilei n programul apelant nu se modific.
Cnd o variabil este transmis prin referin i funcia definit de utilizator modific valoarea
variabilei transmise, valoarea original a variabilei n programul apelant de asemenea se modific.
Implicit parametrii sunt transmii prin valoare. Se poate fora transmiterea parametrilor ctre o
funcie utilizator, n funcie de opiunea aleas n comanda SET UDFPARAMS. Variabilele se
nchid ntre paranteze pentru a fora transmiterea prin valoare. Forarea transmiterii prin referin se
face tiprind n faa variabilei caracterul @.
Exemplul 1.
*** TRANSMITEREA VARIABILELOR PRIN VALOARE ***
CLEAR
SET TALK OFF
WAIT 'APASATI O TASTA PENTRU A TRANSMITE VARIABILA PRIN VALOARE
WINDOW
SET UDFPARMS TO VALUE
STORE 1 TO GNX
*** VALOAREA LUI GNX ESTE NESCHIMBATA ***
@ 2,2 SAY 'VALOARE UDF: ' + STR(PLUSUNU(GNX))
@ 4,2 SAY 'VALOARE GNX: ' + STR(GNX)
*** TRANSMITEREA VARIABILEI PRIN REFERINTA***
WAIT ' APASATI O TASTA PENTRU A TRANSMITE VARIABILA PRIN REFERINTA'
WINDOW
CLEAR
SET UDFPARMS TO REFERENCE
STORE 1 TO GNX
*** VALOAREA LUI GNX SE SCHIMBA ***
@ 2,2 SAY 'VALOARE UDF: ' + STR(PLUSUNU(GNX))
@ 4,2 SAY 'VALUE OF GNX: ' + STR(GNX)
SET UDFPARMS TO VALUE
9. Programarea procedural
100
Baze de date
101
Sintaxa comenzii:
SELECT [ALL | DISTINCT] [TOP expr_num [PERCENT]] alias.]art_selectat [AS nume_coloan]
[[alias.]art_selectat [AS nume_coloan]] ROM [FORCE] nume_baz_de_date!]tabel [[AS]
alias_local] [INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN
nume_baz_de_date!]tabel [[AS] alias_local] [ON condiie_join] [[INTO destinaie] | [TO FILE
nume_fiier [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN ]] [NOCONSOLE] [PLAIN]
[WHERE condiie_join [AND condiie_join] [AND | OR condiie_filtrare [AND | OR
condiie_filtrare]]] [GROUP BY coloan_grup [,coloan_grup]] [HAVING condiie_filtrare]
[UNION [ALL] comand_selectare] [ORDER BY articol_ordonat [ASC | DESC] [,articol_ordonat
[ASC | DESC]]]
Semnificaia clauzelor:
ALL implicit se vor afia toate nregistrrile din tabel care ndeplinesc condiiile de
selecie, n rezultatul interogrii.
102
art_selectat specific cmpul care trebuie inclus n rezultatul interogrii. Acesta poate fi:
constant care specific o valoare, care va apare n fiecare nregistrare din rezultatul
interogrii.
FROM se declar tabelele care conin datele pe care vrem s le extragem n urma
interogrii. Dac nu este deschis nici un tabel, VFP va deschide caseta de dialog Open
pentru a specifica locaia fiierului care conine datele.
FORCE clauza prin care specific c tabele sunt unite (join) n ordinea n care ele apar n
clauza FROM.
nume_baz_de_date![tabel] specific numele unei baze de date, care nu este deschis, care
conine tabelul cu date. Clauza se folosete n cazul n care tabelul cu date nu face parte din
baza de date curent (deschis). Semnul ! se folosete pentru adresarea tabelului prin
calificare.
[AS] alias_local specific un nume temporar pentru tabelul menionat n argumentul tabel.
Baze de date
103
INNER JOIN rezultatul interogrii va conine numai nregistrrile din tabel care coincid
cu una sau mai multe nregistrri, din alt tabel (jonciune intern).
LEFT [OUTER] JOIN rezultatul interogrii va conine toate nregistrrile din tabel n
stnga cuvntului JOIN i nregistrrile care coincid vor fi afiate la dreapta cuvntului
JOIN. Clauza OUTER (exterior) este opional, se include pentru a sublinia faptul c se
creaz o jonciune exterioar.
RIGHT [OUTER] JOIN rezultatul interogrii va conine toate nregistrrile din tabel la
dreapta cuvntului JOIN i nregistrrile care coincid n stnga.
FULL [OUTER] JOIN rezulatul interogrii va conine att nregistrrile care coincid ct i
cele care nu coincid,din cele dou tabele.
ON condiie_join specific condiia pentru care tabelele sunt unite (fac jonciune).
INTO destinaie .- specific unde vor fi stocate rezultatele interogrii. Destinaia poate fi una
din urmtoarele clauze:
TO FILE nume_fiier clauz prin care rezultatele interogrii sunt direcionate ctre un
fiier de tip ASCII (text).
PLAIN mpiedic afiarea capului coloanei (numele coloanei) la ieirea din interogare.
104
condiie_join [AND condiie_join] specific cmpurile care leag tabele din clauza
FROM. Se include operatorul AND pentru a lega condiii multiple de unire (jonciune).
UNION [ALL] comand_selectare - combin rezultatele finale ale unei clauze SELECT cu
rezultatele finale ale altei clauze SELECT. Implicit UNION verific rezultatele combinate i
elimin nregistrrile duplicat. Clauza ALL mpiedic aciunea clauzei UNION de a elimina
nregistrrile duplicat.
Exemplu. Din tabelele CLIENI i COMENZI s se selecteze firma (CLIENI), data comenzii i
mijlocul de transport (COMENZI), sortate ascendent dup dat. Rezultatul se va scrie n fiierul
TRANSPORT.DBF.
OPEN DATABASES (TEST)
SELECT A.FIRMA,B.DATA_CDA,B.MIJLOC FROM CLIENTI A,COMENZI B ;
WHERE A.COD_FIRMA=B.COD_FIRMA ;
ORDER BY B.DATA_CDA ASC INTO TABLE TRANSPORT
BROWSE
CLOSE DATABASES
Baze de date
105
ALTER [COLUMN] nume_cmp1 specific numele unui cmp existent care se modific.
NULL | NOT NULL permite declararea unui cmp care accept sau nu valori de tip
NULL.
PRIMARY KEY creaz o o etichet primar de index. Eticheta de index are acelai nume
cu cel al cmpului.
106
Exemplu. n fiierul CLIENI din baza de date TEST, s se modifice cmpul cantitate maxim
(CANT_MAX) la valoarea 25.
OPEN DATABASES (TEST)
USE CLIENTI
UPDATE CLIENTI SET CANT_MAX=25
BROWSE FIELDS FIRMA,CANT_MAX
CLOSE DATABASES
4. Comanda INSERT SQL adaug o nou nregistrare la sfritul unui tabel existent. Noua
nregistrare conine date descrise n comanda INSERT sau pot fi preluate dintr-un masiv.
Sintaxa comenzii:
INSERT INTO tabel [(nume_cmp_1[,nume_cmp_2,...])] VALUES (valoare_1, valoare_2,...])
sau
INSERT INTO tabel FROM ARRAY nume_masiv | FROM MEMVAR
unde:
INSERT INTO tabel specific numele tabelului n care se adaug o nou nregistrare.
FROM ARRAY nume_masiv specific numele masivului din care vor fi inserate datele n
noua nregistrare.
Baze de date
107
Exemplu. n tabelul CLIENI din baza de date TEST coninutul nregistrrii curente va fi transmis
n memorie ca variabile i structura tabelului va fi copiat ntr-un nou tabel CLIENI2.
CLOSE DATABASES
CLEAR
OPEN DATABASES (TEST)
USE CLIENTI
* Se transmite nregistrarea curent n memorie ca variabile
SCATTER MEMVAR
* Se copiaz structura tabelului curent n tabelul CLIENTI2
COPY STRUCTURE EXTENDED TO CLIENTI2
* Se insereaz nregistrarea memorat n variabile
INSERT INTO CLIENTI2 FROM MEMVAR
SELECT CLIENTI2
BROWSE
USE
DELETE FILE CLIENTI2.DBF
5. Comanda CREATE CURSOR SQL creaz un tabel temporar. Fiecare cmp din tabelul
temporar este definit cu nume, tip, precizie, numr zecimale, valoare null i reguli de integritate
referenial. Aceste definiii pot fi obinute din comand sau dintr-un masiv.
Sintaxa comenzii::
CREATE CURSOR nume_alias(nume_cmp_1 tip_cmp [precizie[,nr_zecimale])
[NULL | NOT NULL] [CHECK expr_L [ERROR mesaj_eroare]] [DEFAULT expresie]
[UNIQUE] [NOCPTRANS]] [,nume_cmp_2...]) | FROM ARRAY nume_masiv
unde:
nume_alias specific numele tabelului temporar creat, care poate fi i numele unei
expresii.
108
tip_cmp prin intermediul unei singure litere, specific tipul fiecrui cmp.
CHECK expr_L specific regula de validare pentru valorile care se vor nscrie n cmp.
Expresia logic expr_L poate fi i o funcie definit de utilizator.
ERROR mesaj_eroare specific mesajul de eroare pe care sistemul VFP l va afia n cazul
n care validarea datelor genereaz eroare.
DEFAULT expresie specific valoarea implicit pentru cmp. Tipul de dat dat de
expresie trebuie s fie de acelai fel cu tipul cmpului.
UNIQUE creaz un index candidat pentru cmp. Eticheta de index candidat are acelai
nume cu cel al cmpului. Valorile null i nregistrrile duplicat nu sunt permise ntr-un cmp
utilizat ca index candidat.
NOCPTRANS previne trecerea la o alt pagin de cod pentru caractere i cmpuri de tip
memo. Dac cursorul este convertit la o alt pagin de cod, cmpurile pentru care a fost
specificat clauza NOCPTRANS nu vor fi translatate.
FROM ARRAY nume_masiv specific numele unui masiv existent care conine numele,
tipul, precizia, numrul de zecimale pentru fiecare cmp din tabelul temporar.
Baze de date
109
nume_tabel_1 specific numele tabelului care va fi creat. Opiunile TABLE i DBF sunt
identice.
NAME nume_lung specific un nume lung pentru tabel. Acest nume poate fi specificat
numai dac este deschis o baz de date, el fiind stocat (memorat) n cadrul bazei de date.
Numele lung poate conine pn la 128 caractere i poate fi folosit numai n cadrul bazei de
date.
(nume_cmp_1
tip_cmp
[mrime[(,mrime_cmp[,precizie])]
specific
numele
cmpului, tipul, mrimea i precizia (numrul de poziii zecimale). Un tabel poate conine
110
pn la 255 cmpuri. Dac unul sau mai multe cmpuri accept valori de tip null, limita se
reduce la 254.
NULL | NOT NULL permite / mpiedic introducerea de valori de tip null n cmp.
CHECK expr_L_1 specific o regul de validare pentru cmp. Expresia logic expr_L_1
poate fi o funcie definit de utilizator. La adugarea unei nregistrri vide, se verific regula
de validare. Dac regula de validare nu prevede acceptarea de valori vide n cmp, se
genereaz eroare.
DEFAULT expr_1 specific valoarea implicit pentru cmp. Expresia expr_1 trebuie s
fie de acelai tip cu tipul cmpului.
[PRIMARY KEY creaz un index primar pentru cmp. Eticheta de index primar are
acelai nume cu cel al cmpului.
UNIQUE creaz un index candidat pentru cmp. Numele etichetei de index candidat este
acelai cu cel al cmpului.
NOCPTRANS previne trecerea la o alt pagin de cod pentru caractere i cmpuri memo.
Dac tabelul este convertit la o alt pagin de cod, cmpul pentru care a fost specificat
clauza NOCPTRANS, nu va fi translatat.
PRIMARY KEY expr_2 TAG etich_2_index specific indexul primar care va fi creat.
Expresia expr_2 poate specifica orice cmp sau combinaie de cmpuri din tabel. TAG
etich_2_index specific numele etichetei de index primar. Deoarece un tabel nu poate avea
dect o singur cheie primar de indexare, nu se poate include aceast clauz dac deja
exist definit o cheie primar.
UNIQUE expr_3 TAG etich_3_index creaz un index candidat. Expresia expr_3 specific
orice cmp sau combinaie de cmpuri din tabel. Clauza TAG etich_3_index specific
numele etichetei de index pentru eticheta de index candidat, care va fi creat.
Baze de date
111
FOREIGN KEY expr_4 TAG etich_4_index [NODUP] creaz un index extern (nonprimar) i stabilete o relaie cu tabelul printe. expr_4 specific expresia indexului extern.
Clauza TAG etich_4_index specific numele etichetei de index externe. Clauza NODUP se
include pentru a crea un index candidat extern.
FROM ARRAY nume_masiv specific numele unui masiv existent care conine numele,
tipul, mrimea i precizia pentru fiecare cmp al tabelului. Coninutul masivului poate fi
definit cu funcia AFIELDS().
7. Comnda DELETE SQL realizeaz tergerea la nivel logic (marcarea pentru tergere) a
nregistrrilor dintr-un tabel.
Sintaxa comenzii:
DELETE FROM [nume_BD!]nume_tabel [WHERE condiie_filtrare_1 [AND | OR
condiie_filtrare_2...]]
unde:
tergerea fiind la nivel logic, nregistrrile vor fi terse fizic din tabel doar dup utilizarea comenzii
PACK.
112
Baze de date
113
12. Aplicaie
Enunul problemei: tema abordat este Evidena rezultatelor activitii studenilor ntr-o facultate.
Datele de intrare:
Fia de nscriere;
Cataloagele de note;
Planul de nvmnt;
Programele analitice.
Datele de ieire:
Componena grupelor;
Situaia dup o sesiune nominal;
Situaia statistic asupra repartiiei notelor la o disciplin;
Situaia statistic asupra repartiiei mediilor.
Actualizarea datelor:
Adugarea de noi studeni;
Modificarea datelor despre studeni;
tergerea unui student;
Adugrea de note;
Modificarea notelor;
tergerea studentului din fiierul de note;
Adugarea de noi discipline;
Modificarea numelui unei discipline;
tergerea unei discipline.
Coduri adoptate:
Codul judeului;
Codurile disciplinelor;
An studii 1-6, an calendaristic 2004-2005.
12. Aplicaie
Interfaa cu utilizatorul:
Stabilirea meniurilor i a videoformatelor pentru programul monitor i a programelor subordonate.
Proiectarea intrrilor:
Cererea de nscriere;
Cataloage;
Formularele cu codurile i denumirile disciplinelor.
Proiectarea ieirilor:
Lista studenilor pe grupe;
Situaia dup sesiune;
Statistica la o disciplin;
Statistica medii;
List bursieri;
List integraliti.
Stabilirea cadrului pentru:
Operaiile de actualizare;
Obinerea rapoartelor finale.
Schema general propus
114
Baze de date
115
CATALOAGE
CEREREA DE
NSCRIERE
PLAN
NVMNT
PROGRAME
ANALITICE
INTRODUCERE DE LA
TASTATUR
VIDEOFORMAT
STUDENT
STUDENT
VIDEOFORMAT NOTE
PROGR. MONITOR
DISCIPLINE
VIDEOFORMAT
DISCIPLINE
LISTA
STUDENILOR PE
GRUPE
NOTE
SITUAIA DUP
SESIUNE
STATISTICA LA O
DISCIPLIN
STATISTIC
MEDII
LISTA BURSIERI
STUDENT
MATR C(5)
NUME_PRE C(30)
ADRESA MEMO
TEL C(9)
AN_STUDII C(1)
GRUPA C(2)
RELAIE
NOTE
MATR C(5)
COD_DIS C(3)
NOTA N(2)
DISCIPLINE
RELAIE
COD_DIS C(3)
DENUMIRE
MEMO
EXAMEN L
COLOCVIU L
TIP_CURS C(1)
TIP_PROMO C(1)
CODIFICARI
O - OBLIGATORIU
TIP_CURSF - FACULTATIV
P - OPTIONAL
O - OBLIGATORIU
TIP_PROMO
N - Nu este obligatoriu pentru promovare
12. Aplicaie
116
CREARE_BD
STUDENTI
NOTE
DISCIPLINE
ACTUALIZARE_BD
ADAUGARE
MODIFICARE
STERGERE
RAPOARTE
STUDENTI
NOTE
DISCIPLINE
SUBMENIU
NIVELUL 2
SUBMENIURI
NIVELUL 1
LISTA STUDENTI
INTEGRALISTI
RESTANTIERI
STATISTICA DISCIPLINA
STATISTICA MEDII
LISTA BURSIERI
IESIRE
Baze de date
117
Aplicaii laborator
1. Modificarea structurii unui fiier
n fereastra de comenzi se introduc comenzile de creare a unui fiier i vizualizare:
CREATE TABLE STUD1 (MATR C(3), NUME C(30), AN C(1), GRUPA C(2))
BROWSE
Se lanseaz comenzile CTRL/Y i se populeaz cu 3-4 nregistrri. Salvm cu CTRL/W.
Se deschide fereastra DATA SESSION i se nchide fiierul STUD1 de la butonul CLOSE.
Se va crea programul de modificare a structurii fiierului anterior pentru adugarea unui nou cmp
cu numele MBAC (medie bacalaureat): FILE/NEW/PROGRAM/NEW FILE i introduc
urmtoarele linii:
SELECT 2
USE STUD1
COPY STRUCTURE EXTENDED TO TEMP
USE TEMP
BROWSE
APPEND BLANK
REPLACE FIELD_NAME WITH MBAC
REPLACE FIELD_TYPE WITH N
REPLACE FIELD_LEN WITH 5
REPLACE FIELD_DEC WITH 2
BROWSE
USE TEMP
CREATE STUD2 FROM TEMP
USE STUD2
APPEND FROM STUD1
BROWSE
CLOSE DATABASES
Salvm i rulm programul.
Aplicaii laborator
118
Baze de date
119
USE NOTE
BROWSE
CLOSE DATABASES
n fiecare fereastr BROWSE cu CTRL/Y se populeaz fiierele cu 3-4 nregistrri. La fiierul Note
nu se completeaz cmpul MEDIA.
c) Procedura de calcul a mediei:
USE NOTE
FOR I=1 TO RECCOUNT()
GOTO I
REPLACE MEDIA WITH (NOTA1+NOTA2)/2
ENDFOR
BROWSE
CLOSE DATABASES
d) Procedura de ieire:
CLEAR EVENTS
CLOSE DATABASES
SET SYSMENU TO DEFAULT
Anexa
120
Anexa
Limitele SISTEMULUI VFP 6.0
Caracteristic
Valoare
1 miliard
2 Gb
65.500
255
255
254
cmp
Nr. maxim de bytes pentru cheia de index
100
compus
Nr. maxim de bytes pentru cheia de index
240
simplu
Nr. maxim de fiiere de index deschise pentru o
nelimitat
tabel
Nr. maxim de fiiere de index deschise pentru toate zonele de
nelimitat
lucru
Nr. maxim de
nelimitat
legturi
Lungimea maxim a unei expresii
nelimitat
relaionale
Valoarea maxim pentru
2.147.483.647
ntregi
Precizia n calculul
16
numeric
Mrimea maxim pentru un cmp de tip
254
caracter
Mrimea maxim pentru un cmp de tip
numeric
20
Baze de date
121
10
liber
Nr. maxim de caractere pentru un cmp dintr-o tabel care aparine unei
128
BD
Nr. maxim de
65.000
variabile
Nr. maxim de masive
65.000
65.000
masiv
Nr. maxim de linii surs ntr-un
nelimitat
program
Mrimea maxim a modulului de program
64 Kb
compilat
Nr. maxim de proceduri
nelimitat
(subprograme)
Nr. maxim de apeluri DO
128
imbricate
Nr. maxim de comenzi de ciclare
384
27
nelimitat
raport
Nr. maxim de niveluri de grupare ntr-un
128
raport
Nr. maxim de ferestre deschise
nelimitat
255
deschise
Nr. maxim de caractere ntr-un ir de
16.777.184
caractere
Nr. maxim de caractere ntr-o linie de
8.192
comand
Nr. maxim de fiiere
deschise
limit sistem
Anexa
122
255
Baze de date
123
Bibliografie
1. Dima, G., Dima M. FoxPro, Editura Teora, Bucureti, 1993.
2. Dima, G., Dima M. FoxPro Meniuri, Editura Teora, Bucureti, 1994.
3. Lungu, I.si al. Sistemul FoxPro Prezentare i Aplicaii, Editura All, Bucureti, 1993.
4. Velicanu, M, Lungu,I Muntean, M. Dezvoltarea Aplicaiilor cu Baze de Date n Visual FoxPro,
Editura All, Bucureti, 2001.
5. *** Visual FoxPro 6.0 Manualele Microsoft