capitol 3

41
3. SISTEMUL DE GESTIUNE A BAZELOR DE DATE VISUAL FOXPRO 3.1. Aspecte generale ale SGBD-ului Visual FoxPro Visual FoxPro este un sistem de gestiune a bazelor de date relaţionale, ce dispune de un limbaj de programare procedural, puternic şi flexibil, util în descrierea datelor şi a aplicaţiilor. Se va prezenta versiunea Visual FoxPro 5, ce face parte din pachetul integrat de medii de dezvoltare de aplicaţii Microsoft Visual Studio 97 pentru Windows şi Internet. Produsul foloseşte facilităţile oferite de noul stil de programare, în principal modelul orientării pe obiecte, modelul programării conduse de evenimente şi cel al programării vizuale. SGBD-ul Visual FoxPro are în componenţă un gestionar al aplicaţiilor (Project Manager) care controlează întreaga activitate, punând la dispoziţie elementele utile tuturor operaţiunilor necesare cum ar fi: generatoare (Designers), asistenţi integraţi (Builders) şi asistenţi speciali (Wizards). Altfel spus, Visual FoxPro este un SGBD care îmbină caracteristicile modelului relaţional de organizare a datelor cu cele ale programării orientate pe obiect. Fiind o componentă a pachetului Microsoft Visual Studio 97 pentru Windows şi Internet, Visual FoxPro (prescurtat în cele ce urmează VFP) are o interfaţă cu utilizatorul modernizată, cu un aspect unitar cu cel al programelor sistemului de operare Windows 9x. Fereastra principală a unei sesiuni Visual FoxPro este redată în figura 4.1. Prin sesiune de lucru se înţelege totalitatea comenzilor VFP executate între o lansare a programului şi comanda de părăsire a mediului (QUIT). Modurile de lucru ce pot fi folosite de utilizator în cadrul unei sesiuni de lucru sunt: modul de lucru asistat sau interfaţa Visual FoxPro - cel mai simplu mod de lucru, dar şi cel mai restrictiv, întrucât nu sunt folosite toate facilităţile oferite de VFP. Acesta

Upload: gabriel-ion

Post on 20-Jan-2016

27 views

Category:

Documents


0 download

DESCRIPTION

ebook

TRANSCRIPT

Page 1: Capitol 3

3. SISTEMUL DE GESTIUNE A BAZELOR DE DATE VISUAL

FOXPRO

3.1. Aspecte generale ale SGBD-ului Visual FoxPro

Visual FoxPro este un sistem de gestiune a bazelor de date relaţionale, ce dispune de un limbaj de programare procedural, puternic şi flexibil, util în descrierea datelor şi a aplicaţiilor.

Se va prezenta versiunea Visual FoxPro 5, ce face parte din pachetul integrat de medii de dezvoltare de aplicaţii Microsoft Visual Studio 97 pentru Windows şi Internet. Produsul foloseşte facilităţile oferite de noul stil de programare, în principal modelul orientării pe obiecte, modelul programării conduse de evenimente şi cel al programării vizuale.

SGBD-ul Visual FoxPro are în componenţă un gestionar al aplicaţiilor (Project Manager) care controlează întreaga activitate, punând la dispoziţie elementele utile tuturor operaţiunilor necesare cum ar fi: generatoare (Designers), asistenţi integraţi (Builders) şi asistenţi speciali (Wizards). Altfel spus, Visual FoxPro este un SGBD care îmbină caracteristicile modelului relaţional de organizare a datelor cu cele ale programării orientate pe obiect.

Fiind o componentă a pachetului Microsoft Visual Studio 97 pentru Windows şi Internet, Visual FoxPro (prescurtat în cele ce urmează VFP) are o interfaţă cu utilizatorul modernizată, cu un aspect unitar cu cel al programelor sistemului de operare Windows 9x. Fereastra principală a unei sesiuni Visual FoxPro este redată în figura 4.1. Prin sesiune de lucru se înţelege totalitatea comenzilor VFP executate între o lansare a programului şi comanda de părăsire a mediului (QUIT).

Modurile de lucru ce pot fi folosite de utilizator în cadrul unei sesiuni de lucru sunt:

modul de lucru asistat sau interfaţa Visual FoxPro - cel mai simplu mod de lucru, dar şi cel mai restrictiv, întrucât nu sunt folosite toate facilităţile oferite de VFP. Acesta constă în activarea şi folosirea meniurilor implicite, respectiv a opţiunilor acestora din bara de meniuri;

Page 2: Capitol 3

Figura 4.1

modul de lucru direct sau comandă - modul de lucru implicit la deschiderea unei sesiuni de lucru VFP. Acestui mod de lucru îi este specifică fereastra de comenzi (Command), în care se introduce, pe fiecare rând, câte o comandă.

modul de lucru programat - cel în care sunt create programele; presupune cunoaşterea aprofundată a comenzilor şi funcţiilor VFP pentru a putea fi exploatate performant.

Sintaxa generală a unei comenzi cuprinde elementele:verb [lista expresii][FIELDS listă câmpuri][domeniu][FOR expr_log1][WHILE expr_log2][TO FILE nume_fişier TO PRINTER TO ARRAY masiv TO variabila_memorie][ALL [LIKE EXCEPT mască]][IN alias][NOOPTIMIZE]

unde: verb este un cuvânt rezervat, obligatoriu, reprezentând numele comenzii şi

acţiunea de executat; lista expresii cuprinde şiruri de operanzi legaţi între ei prin operatori; FIELDS listă câmpuri - este clauza prin care sunt specificate câmpurile ce

răspund la comanda dată; Limbaje de Programare www.RegieLive.ro Home

domeniu - clauza prin care se stabileşte cât din fişier va fi exploatat de comandă;

Bara de instrumenteBara de meniuriBara de titlu

Fereastra de comenziSuprafaţa de lucru

Page 3: Capitol 3

FOR expr_log1 - clauza cu ajutorul căreia sunt selectate doar înregistrările pentru care condiţia expr_log1 este adevărată;

WHILE expr_log2 – clauza este aplicată începând de la articolul curent şi acţionează cât condiţia este adevărată; prima înregistrare ce nu îndeplineşte condiţia duce la abandonarea comenzii;

TO FILE nume_fişier TO PRINTER TO ARRAY masiv TO variabila_memorie – rezultatele obţinute în urma comenzii pot fi salvate într-un fişier, la imprimantă, într-un masiv sau o variabilă de memorie.

ALL [LIKE EXCEPT mască – indică includerea/excluderea de sub incidenţa comenzii a unor fişiere, câmpuri sau variabile de memorie conform „măştii”;

IN alias – permite manipularea datelor dintr-o altă zonă de lucru; NOOPTIMIZE – inhibă tehnica Rushmore de accesare rapidă a înregistrărilor.În formatul general al comenzilor VFP sunt utilizate următoarele convenţii de

sintaxă:- cuvintele rezervate sunt scrise cu litere mari;- denumirile date de utilizator sunt scrise cu litere mici;- parantezele pătrate indică clauze opţionale;- bara verticală indică opţiunile exclusive în mod reciproc;- literele mici ce apar ca prefix în faţa numelui variabilei indică tipul de dată

pentru respectiva variabilă: c pentru date de tip character, n pentru numeric, l pentru logical, d pentru date, t pentru time, y pentru currency, o pentru object şi e pentru alte expresii.

O comandă este lansată, după scriere, prin acţionarea tastei Enter. Ea poate fi refolosită, fără a fi necesară tastarea din nou a acesteia, prin mutarea cursorului pe rândul ce conţine comanda respectivă şi apăsarea tastei Enter.

Modul de lucru direct este folosit, de obicei, pentru familiarizarea utilizatorului cu formatele generale ale comenzilor în vederea creării ulterioare a programelor sau în exploatarea ocazională a bazelor de date.

3.2. Tipuri de date în Visual FoxPro

Tipul unei date este o caracteristică ce stabileşte modul în care data este înregistrată pe suportul de memorie al sistemului de calcul, precum şi modul de interpretare şi prelucrare a acesteia.

Tipurile de date folosite în VFP sunt: logic sau boolean (logical) – folosit pentru gestiunea pe un octet a datelor ce

pot lua doar două valori: adevărat (true) sau fals (false); construcţia afişată are forma .T. sau .F.

şir de caractere (character) – folosit pentru introducerea a maxim 254 de caractere, alinierea datelor de acest tip fiind implicit la stânga;

caracter binar (binary) - asemănător cu tipul caracter, dar datele sunt memorate în format binar;

numeric (numeric) – pentru manipularea numerelor de până la 20 de cifre, din care 19 pot fi zecimale; atunci când numerele au o valoare informativă (numere de telefon, numere de cont, de factură etc.), este de preferat

Page 4: Capitol 3

declararea lor ca date de tip caracter; alinierea datelor de acest tip este implicit la dreapta;

valută sau monetar (currency) - pentru memorarea valorilor exprimate în bani; dimensiunea implicită este de 8 octeţi, cu 4 poziţii zecimale;

flotant (float) – reprezentarea datelor în memoria internă este în virgulă flotantă; este folosit, de obicei, în calculele ştiinţifice, cu grade mari de precizie;

numeric dublu (double) - pentru memorarea numerelor foarte mari, în virgulă mobilă, cu dublă precizie; dimensiunea implicită este de 8 octeţi;

numeric întreg (integer) – folosit pentru stocarea datelor numerice ca valori binare, pe 4 octeţi, ceea ce înseamnă economie de spaţiu de memorare pentru fiecare înregistrare;

dată calendaristică (date) – pentru gestionarea datelor calendaristice, într-un format de 8 octeţi; ordinea implicită este formatul american ll/zz/aa, acesta putând fi modificat prin comenzi de tip SET DATE nume_format;

dată calendaristică şi timp (date time) – pentru introducerea suplimentară, pe lângă data calendaristică, a timpului, în format hh:mm:ss AM/PM; memorarea datelor se face pe 8 octeţi, 4 pentru dată şi 4 pentru timp;

memo (memo) – pentru prelucrarea şirurilor de caractere de dimensiuni mari sau variabile, sau cu un anumit grad de confidenţialitate; datele sunt memorate în blocuri ce au dimensiunea predefinită de 64 octeţi;

memo binar (binary) – asemănător cu tipul memo, dar datele sunt memorate în format binar;

general (general) – pentru stocarea unor elemente create cu ajutorul altor programe (documente, foi de calcul, imagini etc.) utilizând tehnica OLE, de încorporare şi legare a obiectelor.

3.3. Crearea bazelor de date relaţionale

O bază de date relaţională reprezintă o structură folosită la memorarea şi gestionarea datelor, descriind un anumit tip de obiecte.

În VFP o bază de date relaţională are asociat un fişier special (cu extensia .dbc) în care sunt memorate tabelele componente, relaţiile permanente între tabele, dicţionarul de date asociat bazei de date etc.

În modul de lucru direct, o bază de date se creează scriind în fereastra de comenzi următoarea comandă:

CREATE DATABASE [DatabaseName | ?]în care:

DatabaseName - reprezintă numele dat de către utilizator bazei de date;? - deschide o fereastră în care, în zona de editare, se poate tasta un nume nou sau

se poate alege unul din cele afişate.Exemplu. În modul de lucru direct, baza de date biblioteca.dbc se creează

cu comanda:

CREATE DATABASE biblioteca

În modul de lucru asistat se folosesc comenzile File New Database, pictograma New File.

Page 5: Capitol 3

Indiferent de modul de lucru folosit, se deschide fereastra Database Designer, cu propria bară de instrumente, iar în meniul sistem apare un nou submeniu numit Database. Bara de instrumente conţine butoane pentru realizarea diferitelor operaţii (Add Table, New Table etc.), opţiuni ce se regăsesc şi în submeniul Database.

3.4. Crearea tabelelor

Un tabel reprezintă o structură în care se pot memora date ce descriu un anumit tip de elemente. Fiecare caracteristică a elementelor alcătuieşte un câmp, iar elementele propriu-zise sunt memorate în înregistrări.

Tabelele pot fi libere (free) sau incluse în baza de date.

3.4.1. Metode directe de creare a tabelelor

În modul de lucru direct, pentru a crea un tabel, se foloseşte comanda:CREATE [FileName | ?]

în care:[FileName] este numele tabelului, dat de utilizator;? – este un parametru ce deschide o fereastră în care, în zona Enter Table, se poate

edita un nume nou pentru tabel sau se poate alege unul din cele afişate.În modul de lucru asistat, se alege submeniul File, opţiunea New, butonul New

Table şi apoi pictograma New File (figura 4.2).Dacă se doreşte crearea unui tabel inclus într-o bază de date, se alege din

submeniul Database opţiunea New Table.Extensia implicită a unui tabel este .dbf.Indiferent de modul de lucru folosit, se deschide fereastra Table Designer, în care

vor fi completate caracteristicile noului tabel. În figura 4.3 este prezentată structura tabelului cititori.dbf.

Figura 4.2

Fereastra Table Designer conţine o zonă inferioară în care pot fi exploatate facilităţile specifice containerelor (validări de câmpuri, valori prestabilite etc.).

Page 6: Capitol 3

Definirea unui tabel presupune specificarea numelui tabelului, a câmpurilor componente, a caracteristicilor acestora şi a indecşilor folosiţi la ordonarea datelor din tabel. Fiecare câmp al tabelului este caracterizat prin:

name (nume) – specifică numele fiecărui câmp (trebuie să fie unic); type (tip) – specifică tipul datelor ce pot fi memorate în câmp; width (lungime) – specifică numărul de caractere pe care îl ocupă fiecare dată

memorată în câmpul respectiv; decimal (numărul de zecimale) – pentru câmpurile numerice, se specifică

numărul de cifre de după punctul zecimal; lungimea totală specificată la width trebuie să cuprindă şi numărul de zecimale, precum şi punctul zecimal propriu-zis;

index (fanionul de indexare) – indică dacă se stabileşte un index pe baza câmpului respectiv;

null (fanionul de valoare nulă) – indică dacă în câmpul respectiv se poate memora o valoare nulă.

Exemplu. Crearea tabelului cititori.dbf constă în următoarea secvenţă de paşi:

scrierea comenzii CREATE cititori; completarea ferestrei Table Designer cu următoarea structură (figura 4.3):nr_permis N (numeric) 5nume C (character) 15prenume C (character) 8cnp C (character) 13localitatea C (character) 10telefon C (character) 10

Figura 4.3

Page 7: Capitol 3

Asemănător cu modul de creare a tabelului cititori.dbf s-au creat şi tabelele carte, domeniu şi imprumut, componente ale bazei de date biblioteca, cu următoarele structuri:

- pentru tabelul carte.dbf:cota N 6nume_a C 10prenume_a C 10titlu C 20coddomeniu N 2editura C 10an_aparitie N 4nr_volume N 3pret N 6valoare N 9- pentru tabelul imprumut.dbf:cota N 6nr_permis N 5data_i D 8data_r D 8- pentru tabelul domeniu.dbf:coddomeniu N 2denumire C 15Toate aceste caracteristici se completează în fereastra Table Designer, pagina

Fields. În figura 4.4, este prezentată baza de date biblioteca.dbc cu cele patru tabele componente: carte.dbf, cititori.dbf, domeniu.dbf şi imprumut.dbf.

Pagina etichetată Indexes este asociată paginii Fields şi conţine informaţii atunci când s-au stabilit chei de indexare. Tot aici (figura 4.5), pot fi stabilite sensul ordonării (în coloana Order), numele etichetei index (în coloana Name), tipul de index (din lista Type), cheia de indexare (coloana Expression) şi un filtru care să restrângă accesul la înregistrările din tabel, pe baza unor condiţii impuse de utilizator (coloana Filter).

Pagina Table (figura 4.6) afişează informaţii privind tabelul care se creează (nume, număr câmpuri, lungime etc.).

După ce a fost stabilită structura tabelului, se activează butonul OK. Se deschide o fereastră în care este afişată o întrebare referitor la introducerea de înregistrări în tabel. Dacă răspunsul este pozitiv, se deschide o nouă fereastră ce cuprinde macheta de încărcare a primului articol din tabel. Dacă răspunsul este negativ, tabelul se închide, fiind salvată doar structura lui. Ulterior, prin comenzi de adăugare, se pot încărca articole.

Page 8: Capitol 3

Figura 4.4

Figura 4.5

Conţinutul fiecărui tabel (carte, cititori, imprumut, domeniu), component al bazei de date biblioteca, este dat în figurile 4.7, 4.8, 4.9 şi 4.10. Înregistrările acestor tabele vor fi supuse ulterior diferitelor prelucrări.

Page 9: Capitol 3

Figura 4.6

Figura 4.7

Figura 4.8

Page 10: Capitol 3

Figura 4.9

Figura 4.103.5. Deschiderea şi închiderea bazelor de date şi a tabelelor

3.5.1. Deschiderea şi închiderea bazelor de date

În modul de lucru asistat, se apelează meniul File, opţiunea Open; în zona de editare Files of Types se alege Database (*.dbc), iar în zona File name se precizează numele bazei de date.

Dacă se alege modul de lucru direct, în fereastra de comenzi se scrie comanda OPEN DATABASE, care are ca efect deschiderea bazei de date cu numele specificat.

Sintaxa comenzii este:OPEN DATABASE [FileName | ?]Dacă numele bazei de date nu este specificat şi se foloseşte parametrul ?, se

deschide fereastra Open, din care se selectează numele bazei de date ce se doreşte a fi deschisă.

Exemplu. Se deschide baza de date biblioteca, urmând ca ulterior să se efectueze operaţii asupra acesteia:

OPEN DATABASE biblioteca

Comanda cu care se închide o bază de date are formatul general:CLOSE DATABASE [ALL]Clauza ALL închide toate bazele de date deschise. Dacă este omisă clauza,

comanda va închide doar baza de date activă.

3.5.2. Deschiderea şi închiderea tabelelor

Page 11: Capitol 3

În modul de lucru asistat, un tabel poate fi deschis alegând din submeniul File, opţiunea Open şi apoi completând în fereastra deschisă cele două zone de editare, astfel: în zona Files of types - tipul fişierului - Table (*.dbf), iar în zona File name - numele fişierului.

O altă posibilitate, asemănătoare cu cea de mai sus, este următoarea: din submeniul Window se alege opţiunea Data Session. Se deschide o fereastră cu acelaşi nume ca al opţiunii (figura 4.11).

Se acţionează butonul Open care deschide o fereastră de dialog pentru alegerea tabelului dorit, identică cu cea descrisă mai sus. Tabelul ales va fi afişat în lista din stânga a ferestrei Data Session. Dacă tabelul este încorporat într-o bază de date, atunci deschiderea sa va determina implicit şi deschiderea bazei de date din care face parte.

Exemplu. Se deschide tabelul carte.dbf, din baza de date biblioteca.dbc. Figura 4.12 prezintă fereastra Data Session, având în partea stângă tabelul carte şi în partea de jos numele bazei de date din care face parte tabelul deschis (Database: Biblioteca), numărul zonei de lucru ocupate (Work area: 1) şi numărul total de înregistrări din tabelul deschis (Records:12).

Figura 4.11

Page 12: Capitol 3

Figura 4.12Într-o sesiune de lucru pot fi deschise simultan 32767 de tabele. Sistemul alocă

pentru fiecare din ele câte o zonă de memorie numită zonă de lucru (work area). La un moment dat poate fi activă doar o singură zonă de lucru numită zonă curentă. Selectarea unei anumite zone de lucru se face cu comanda SELECT, cu următorul format general:

SELECT nWorkArea | cTableAliasunde:

- nWorkArea specifică numărul zonei selectate;- cTableAlias – specifică aliasul tabelului ce se activează (aliasul reprezintă un

nume suplimentar de identificare a tabelului ce se deschide).Comanda ?SELECT () returnează numărul zonei de lucru curente, iar ?

SELECT(1) – selectează ultima zonă nefolosită.În modul de lucru direct, comanda folosită pentru deschiderea unui tabel este

USE, cu sintaxa:USE [[DatabaseName.]Table | SQLViewName | ?]

[IN nWorkArea | cTableAlias][ONLINE][ADMIN][AGAIN][NOREQUERY [nDataSessionNumber]][NODATA][INDEX IndexFileList | ?[ORDER [nIndexNumber | IDXFileName| [TAG] TagName [OF CDXFileName]

[ASCENDING | DESCENDING]]]][ALIAS cTableAlias][EXCLUSIVE][SHARED][NOUPDATE]

DatabaseName. Table | SQLViewName | ? – indică numele tabelului ce va fi deschis sau a vederii SQL. Dacă se foloseşte parametrul ?, se deschide fereastra de dialog Open prezentată anterior.

Cele mai utilizate clauze sunt: IN nWorkArea | cTableAlias - determină deschiderea tabelului într-o zonă de

lucru specificată, alta decât cea curentă; AGAIN – permite redeschiderea tabelului specificat în altă zonă de lucru; ALIAS cTableAlias – permite specificarea unui nume suplimentar pentru

tabelul ce se deschide; INDEX IndexFileList | ? – indică lista fişierelor index ce se vor deschide; ORDER nIndexNumber | IDXFileName – specifică indexul activ; | TAG TagName [OF CDXFileName] - indică numele cheii principale; ASCENDING|DESCENDING – precizează ordinea pentru accesarea şi

afişarea înregistrărilor. Această clauză deschide un tabel simultan cu fişierele index asociate.

Exemplul 1. Pentru deschiderea tabelului cititori.dbf în zona de lucru 2, comanda este următoarea:

Page 13: Capitol 3

USE cititori IN 2Închiderea tabelelor se realizează cu comenzile:

USE && închide tabelul curentCLOSE ALL && închide toate fişierele deschise

Pentru părăsirea sesiunii de lucru Visual FoxPro şi reîntoarcerea în sistemul de operare Windows se foloseşte comanda QUIT.

3.6. Afişarea şi modificarea structurii tabelelor

Structura unui tabel creat anterior poate fi afişată folosind una din comenzile LIST STRUCTURE sau DISPLAY STRUCTURE, cu sintaxa:

LIST DISPLAY STRUCTUREFigura 4.13 afişează pe ecran structura tabelului cititori.Modificarea structurii unui tabel se poate face în modul de lucru asistat, cu

comanda View Table Designer.În modul de lucru direct, comanda ce realizează modificarea structurii unui tabel

este MODIFY STRUCTURE.Indiferent de modul de lucru folosit, pe ecran apare fereastra Table Designer,

identică cu cea activată în cazul creării tabelului. Modificările ce pot fi efectuate sunt: schimbarea numelui câmpurilor, a tipului de dată, a dimensiunii, introducerea de noi câmpuri (cu butonul Insert), ştergerea de câmpuri (cu butonul Delete). Întrucât prin această comandă se pot pierde informaţii din tabel, se recomandă crearea în prealabil a unei copii de siguranţă. În figura 4.4 este afişată fereastra Table Designer pentru tabelul cititori.

Figura 4.13 3.7. Afişarea conţinutului unui tabel

Page 14: Capitol 3

Atunci când nu interesează în mod deosebit aspectul rezultatelor obţinute, pentru afişare se folosesc comenzile LIST şi DISPLAY cu sintaxa:

LIST DISPLAY[[FIELDS] FieldList][Scope] [FOR lExpression1] [WHILE lExpression2]

În mod implicit, comanda LIST determină afişarea tuturor câmpurilor tabelului. Clauza FIELDS se foloseşte pentru a afişa doar anumite câmpuri ce vor fi introduse în listă. Clauzele Scope, FOR şi WHILE indică domeniul înregistrărilor ce vor fi afişate. Celelalte clauze din format au aceleaşi funcţiuni ca şi cele din comenzile anterioare. Domeniul implicit pentru comanda LIST este ALL.

Exemplu. Pe ecran se afişează informaţii din tabelul carte.dbf, dar numai câmpurile Nume_a, Titlu, An_aparitie pentru cărţile apărute după 1995.

USE carteLIST FIELDS nume_a, titlu, An_aparitie FOR; An_apariţie >1995

Pe suprafaţa de lucru sunt afişate informaţiile ce respectă condiţiile impuse (figura 4.14).

Figura 4.14

Deşi comanda DISPLAY are format comun cu LIST, totuşi, în utilizarea lor, există câteva diferenţe şi anume:

Domeniul implicit pentru DISPLAY este înregistrarea curentă, iar pentru LIST este ALL, aşa încât expresiile DISPLAY ALL şi LIST, respectiv DISPLAY şi LIST NEXT, sunt echivalente.

Pentru expresia DISPLAY ALL afişarea este „ecran cu ecran”, iar pentru LIST „în defilare continuă”.

Conţinutul unui tabel mai poate fi afişat în format tabelar, cu ajutorul comenzii BROWSE (figura 4.15).

Page 15: Capitol 3

3.8. Prelucrarea înregistrărilor din tabele

Prelucrarea înregistrărilor din tabele constă în actualizarea înregistrărilor, în fapt, în adăugarea de noi date, modificarea sau ştergerea logică şi/sau fizică a datelor existente.

Principalul instrument pentru realizarea diferitelor prelucrări a datelor din tabele este fereastra Browse. Conţinutul tabelului este afişat într-o formă tabelară asemănătoare unei pagini din Excel, coloanele reprezentând câmpurile, iar liniile fiind înregistrările tabelului. Deschiderea ferestrei Browse se poate realiza prin mai multe modalităţi, şi anume:

în fereastra de comenzi se scrie comanda BROWSE; se apelează comanda View Browse; în fereastra Data Session, din submeniul Window, după selectarea tabelului,

se acţionează butonul Browse.Odată deschisă fereastra Browse, în meniul sistem este adăugat un nou submeniu,

Table, care conţine comenzi pentru realizarea diferitelor prelucrări asupra tabelului.

3.8.1. Adăugarea de noi înregistrări în tabele

Adăugarea de noi înregistrări într-un tabel se poate face, în funcţie de poziţia pe care o va ocupa noua înregistrare, la sfârşitul tabelului sau în interiorul tabelului.

Pentru a adăuga o nouă înregistrare la sfârşitul tabelului, fiind deschisă fereastra Browse, se alege opţiunea Append Mode din submeniul View, sau din submeniul Table, opţiunea Append New Record.

Comanda de adăugare a unei înregistrări la sfârşitul tabelului este APPEND, iar pentru o înregistrarea goală, APPEND BLANK, urmând ca informaţiile să se încarce mai târziu prin alte comenzi.

Comanda APPEND permite şi extinderea tabelului curent prin adăugarea la sfârşitul lui a unor articole preluate dintr-un alt fişier. Acelaşi lucru se obţine dacă, odată deschisă fereastra Browse, din submeniul Table se alege opţiunea Append Records….Se va deschide fereastra Append From în care se va introduce numele tabelului din care se adaugă înregistrări. În funcţie de criteriile impuse de utilizator, se vor completa zonele afişate în urma acţionării butonului Options, respectiv Fields sau For (figura 4.17).

Page 16: Capitol 3

Figura 4.17

Exemplu. Lucrând în modul direct, la sfârşitul tabelului cititori.dbf se adaugă date dintr-un alt tabel, cititori1.dbf, tabel cu aceeaşi structură. Se adaugă numai cititorii din localitatea Iasi. În final, se va afişa tabelul. Secvenţa de instrucţiuni necesară acestor operaţii este următoarea:

USE cititoriAPPEND FROM cititori1 FOR localitate =”IASI”BROWSE

Pentru a introduce o înregistrare în interiorul unui tabel, se foloseşte comanda INSERT. Dacă se foloseşte şi clauza BEFORE, atunci noua înregistrare va fi plasată înaintea celei curente. Clauza BLANK are acelaşi efect ca şi în cazul comenzii APPEND.

3.8.2. Modificarea conţinutului unui tabel

Modificarea datelor dintr-un tabel se poate face în modul de lucru direct cu una din comenzile: BROWSE, CHANGE, EDIT, REPLACE.

Comenzile CHANGE şi EDIT sunt identice şi deschid ferestre verticale asemănătoare cu cele de încărcare a înregistrărilor.

Comanda BROWSE este cea mai utilizată referitor la prelucrările de efectuat asupra înregistrărilor dintr-un tabel.

Comanda REPLACE este comanda de modificare propriu-zisă, înlocuind fiecare câmp specificat cu rezultatul evaluării expresiei asociate. Sintaxa comenzii este:

REPLACE FieldName1 WITH eExpression1 Domeniul implicit al comenzii este înregistrarea curentă. Dacă se doreşte

modificarea altei înregistrări sau a unui grup de înregistrări, se folosesc clauzele Scope, FOR sau WHILE.

Exemplu. În tabelul carte, deoarece câmpul valoare nu conţine şi valoarea TVA-ului, se va modifica acest câmp:

USE carteREPLACE ALL valoare WITH valoare*1.19

Page 17: Capitol 3

BROWSE

Pentru obţinerea aceluiaşi rezultat, fiind deschisă fereastra Browse, se apelează submeniul Table, opţiunea Replace Field. Se afişează o fereastră de dialog în care, din lista Field, se selectează câmpul valoare. Expresia cu care se va înlocui acest câmp este valoare*1.19 (figura 4.18).

Din lista Scope se alege domeniul All, modificarea realizându-se astfel pentru toate înregistrările tabelului.

Figura 4.18

3.8.3. Ştergerea înregistrărilor dintr-un tabel

Ştergerea înregistrărilor unui tabel se poate face la nivel logic sau fizic. Realizarea operaţiei presupune utilizarea comenzilor sau a meniului sistem, respectiv submeniul Table.

În cazul ştergerii logice, înregistrarea nu este ştearsă propriu-zis din tabel, ci este marcată pentru ştergere cu semnul *. Comanda folosită pentru realizarea acestei operaţii este DELETE, cu următorul format general:

DELETE [Scope] [FOR lExpression1] [WHILE lExpression2][IN nWorkArea | cTableAlias]

Domeniul implicit al comenzii este înregistrarea curentă. Clauzele din formatul general au acelaşi rol ca la celelalte comenzi precedente.

Cu comanda SET DELETED ONOFF este controlat accesul la înregistrările marcate pentru ştergere. Opţiunea implicită este OFF şi admite accesarea tuturor înregistrărilor indiferent de marcajul lor de ştergere. Opţiunea ON împiedică accesul comenzilor FoxPro la înregistrările marcate pentru ştergere.

Exemplul 1. Vor fi şterse din tabelul carte toate cărţile de la editura ECONOMICA şi vor fi afişate pe ecran informaţii doar din câmpurile titlu şi editura:

USE carte

Page 18: Capitol 3

DELETE FOR editura =”ECONOMICA”LIST FIELDS titlu, editura

Rezultatul secvenţei de instrucţiuni de mai sus este redat în figura 4.19. Se observă că în dreptul înregistrărilor ce respectă condiţia impusă de utilizator apare semnul *.

Figura 4.19

Pentru ca înregistrările marcate pentru ştergere să nu fie luate în considerare la prelucrare, se foloseşte comanda:

SET DELETED ONLIST FIELDS titlu, editura

Rezultatul este vizibil în figura 4.20, observându-se dispariţia celor două înregistrări marcate anterior cu semnul *.

Page 19: Capitol 3

Figura 4.20

Înregistrările marcate pentru ştergere pot fi refăcute, redevenind accesibile tuturor comenzilor. Comanda ce realizează această operaţie este RECALL, cu sintaxa:

RECALL [Scope] [FOR lExpression1] [WHILE lExpression2]Comanda are aceleaşi clauze ca DELETE. Exemplul 2. În tabelul carte se va anula marcajul de ştergere pentru titlul

FINANTE (figura 4.21), folosind următoarele instrucţiuni:

USE carteRECALL FOR titlu=”FINANTE”LIST FIELDS titlu, editura

Se vor afişa pe suprafaţa de lucru doar informaţiile referitoare la titlul cărţilor şi editura la care au apărut.

Page 20: Capitol 3

Figura 4.21

Dacă se foloseşte fereastra Browse, marcarea pentru ştergere se realizează prin alegerea opţiunii Delete Records… din submeniul Table sau, mai simplu, printr-un clic pe marcatorul de ştergere din dreptul înregistrării respective. Acest marcator este un comutator plasat într-o coloană specială din partea stângă a ferestrei (figura 4.22). Demarcarea unei înregistrări şterse logic se realizează prin deselectarea marcatorului din dreptul înregistrării sau prin alegerea opţiunii Recall Records… din submeniul Table.

Ştergerea fizică presupune eliminarea permanentă a înregistrărilor din tabel. Comenzile folosite sunt PACK şi ZAP.

Figura 4.22

Comanda PACK elimină permanent toate înregistrările marcate în prealabil pentru ştergere. După executarea comenzii, înregistrările şterse nu mai pot fi recuperate.

Page 21: Capitol 3

Comanda ZAP şterge definitiv toate înregistrările din tabelul curent, fără ca acestea să fi fost marcate pentru ştergere înainte; este echivalentă cu secvenţa de instrucţiuni:

DELETE ALLPACKDacă se foloseşte fereastra Browse, ştergerea fizică a înregistrărilor marcate logic

se realizează prin alegerea opţiunii Remove Deleted Records din submeniul Table.

3.9. Ordonarea înregistrărilor din tabele

Exploatarea unui tabel implică ordonarea după anumite criterii a datelor conţinute de acesta. De obicei, încărcarea datelor se realizează într-un mod aleatoriu, iar actualizarea se face după necesităţi obiective ce nu coincid întotdeauna cu ordinea din tabele. Ordonarea unui tabel presupune stabilirea unui criteriu după care să fie parcurse înregistrările. Criteriul de ordonare, numit şi cheie de ordonare, este o expresie alcătuită dintr-un câmp sau o combinaţie de câmpuri ale tabelului.

Există două metode de ordonare a unui tabel: ordonarea fizică a tabelului sau sortarea ordonarea logică sau indexarea tabelului.

3.9.1. Sortarea înregistrărilor din tabele

Sortarea presupune schimbarea înregistrărilor între ele, după un anumit algoritm, până se obţine ordinea dorită. Se obţine astfel un nou tabel, cu nume diferit, dar cu aceeaşi structură, care conţine aceleaşi înregistrări cu ale tabelului iniţial, dar ordonate după criteriul impus.

Sortarea se realizează cu ajutorul comenzii SORT, cu sintaxa:SORT TO TableName ON FieldName1 [/A | /D] [/C]Tabelul care se obţine în urma operaţiei de sortare trebuie specificat în clauza TO.

Criteriul de sortare se stabileşte în clauza ON şi poate conţine unul sau mai multe câmpuri, numite chei de sortare. Pentru fiecare câmp cheie, se pot asocia parametri suplimentari: /A pentru ordonare crescătoare după câmpul respectiv, /D pentru ordonare descrescătoare. Parametrul /C (Case sensitive) este folosit în cazul câmpurilor de tip şir de caractere, atunci când se doreşte ignorarea diferenţei prioritare între literele mari şi literele mici. Clauzele ASCENDING şi DESCENDING sunt asemănătoare cu parametrii /A şi /D, dar diferă prin faptul că acţionează la nivel de înregistrare. Prin folosirea clauzelor opţionale [Scope], [FOR], [WHILE], [FIELDS], tabelul rezultat în urma sortării poate să conţină doar înregistrările care satisfac condiţiile de selecţie.

Exemplu. Plecând de la tabelul cititori, se vor ordona înregistrările după cheia de sortare nume, selectând doar cititorii din localitatea IASI. În figura 4.24, în fereastra de comenzi (Command), este prezentată secvenţa corespunzătoare de instrucţiuni, iar într-o fereastră Browse tabela cititsort obţinută în urma sortării.

Page 22: Capitol 3

Figura 4.24

3.9.2. Indexarea înregistrărilor din tabeleIndexarea, spre deosebire de sortare care realizează un nou tabel, presupune o

ordonare logică a datelor din tabele, prin crearea unui nou fişier numit fişier index asociat tabelului. Acest fişier nu conţine înregistrări, ci doar informaţii privind ordinea de accesare a înregistrărilor. Prin indexare, ordinea fizică a înregistrărilor din tabel nu se modifică. Se schimbă modul în care utilizatorul are acces la datele respective.

3.9.2.1. Crearea fişierelor indexÎn versiunile mai vechi de FoxPro există două clase de indecşi: simpli şi compuşi.

Indecşii simpli conţin un singur criteriu de indexare, iar cei compuşi mai multe astfel de criterii. Indecşii compuşi sunt şi ei de două tipuri: structurali (memoraţi într-un fişier index cu acelaşi nume cu al tabelului) şi nestructurali (memoraţi în fişiere cu nume diferite de cel al tabelului). Indecşii structurali sunt deschişi automat la deschiderea tabelului, iar cei nestructurali trebuie deschişi explicit.

În versiunea Visual FoxPro, indecşii compuşi structurali sunt creaţi implicit, devenind astfel mai avantajoşi. Aceşti indecşi sunt memoraţi într-un singur fişier cu extensia .cdx. Fiecărui index dintr-un asemenea fişier i se atribuie un nume, numit etichetă index. La acest nume se face referire în comenzile de prelucrare.

Indecşii compuşi structurali pot fi de mai multe tipuri, şi anume: normal (Regular) care construiesc pentru fiecare înregistrare a tabelului câte o

înregistrare în fişierul respectiv, indiferent de multiplicarea cheii de indexare. Altfel spus, într-un tabel indexat toate înregistrările sunt accesibile, indiferent de valoarea cheii de indexare.

unic (Unique) care permit o valoare unică a cheii de indexare. În cazul tabelelor cu valori repetate ale cheii de indexare, se include în fişierul index numai prima apariţie a înregistrării cu valoarea respectivă a cheii, următoarele înregistrări cu aceeaşi valoare a cheii de indexare fiind ignorate, deşi fizic există.

candidat (Candidate) - sunt asemănători cu cei unici, dar interzic încărcarea de înregistrări care dublează valoarea cheii de indexare, generând un mesaj de eroare.

Page 23: Capitol 3

cheie primară (Primary) - sunt folosiţi în cazul în care se creează relaţii între tabele, fiind criteriul care identifică în mod unic înregistrările tabelului.

Responsabilitatea stabilirii tipului de index îi revine programatorului. Astfel, pentru tabelul cititori.dbf nu se pot stabili indecşi de tip unic, candidat sau cheie primară pentru câmpul nume, întrucât pot exista mai mulţi cititori cu acelaşi nume. În cazul unui index unic, a doua persoană din tabel cu acelaşi nume nu va fi accesibilă, iar în cazul indecşilor candidat sau cheie primară, nu va putea fi introdusă înregistrarea corespunzătoare celei de-a doua persoane. Câmpul nr_permis sau cnp (cod numeric personal) ar putea fi index unic, candidat sau cheie primară, întrucât acestea identifică în mod unic fiecare persoană.

Indecşii compuşi structurali pot fi precizaţi odată cu crearea tabelului, direct în fereastra Table Designer, pagina cu eticheta Indexes, după ce în pagina Fields, în câmpul respectiv, a fost marcat fanionul de indexare. Fiecare element ce trebuie introdus în această fereastră a fost descris la crearea tabelelor, pagina Indexes (figura 4.5).

O altă modalitate de creare a indecşilor simpli şi compuşi constă în folosirea comenzii INDEX, cu formatul general:

INDEX ON eExpression TO IDXFileName | TAG TagName [OF CDXFileName]

Prin clauza ON eExpression este precizată ordinea de accesare a înregistrărilor; eExpression poate fi de tip numeric, caracter şi dată calendaristică, incluzând câmpuri din tabel, funcţii, operatori, constante, variabile din memorie.

Clauza TO IDXFileName permite crearea unui fişier index simplu (numit şi index de sine stătător), cu extensia implicită .idx şi numele specificat de utilizator. Fiecare fişier conţine un singur index şi este independent de celelalte.

Clauza TAG TagName [OF CDXFileName] permite crearea unui fişier index compus, cu extensia .cdx. Într-un astfel de fişier, se poate stoca un număr nelimitat de expresii de indexare distincte. Fişierele structurale se creează implicit prin clauza TAG TagName (nume etichetă) şi au acelaşi nume cu al tabelului. Aşa cum am mai amintit, acest tip de index se deschide automat odată cu tabelul. Fişierele nestructurale se creează cu ajutorul clauzei OF CDXFileName, numele lor fiind specificat explicit de către utilizator.

Exemplu. Se va crea pentru tabelul carte un index compus structural pentru accesul cărţilor după valoare, în ordine crescătoare. În fereastra de comenzi se va introduce următoarea secvenţă de instrucţiuni:

USE carteDISPLAY ALLINDEX ON valoare TAG valoareDISPLAY ALL?CDX(1) && afişează numele indexului structural

Pe suprafaţa de lucru va fi afişat numele şi calea de acces a fişierului index structural obţinut:

C:\PROGRAM FILES\DEVSTUDIO\VFP\CARTE.CDX)Indexarea tabelului presupune crearea fişierului carte.cdx, în care se

memorează poziţiile înregistrărilor din tabel, în ordinea dorită (în exemplul considerat,

Page 24: Capitol 3

ordine crescătoare, după câmpul valoare). Accesul la datele din tabelul indexat carte se face după schema din figura 4.25.

Dacă se doreşte citirea datelor referitoare la cartea cu valoarea a 5-a ca mărime, se procedează astfel:

Sistemul citeşte din fişierul index asociat (carte.cdx) înregistrarea din poziţia a 5-a, care conţine atât valoarea cheii pentru înregistrarea respectivă, cât şi indicatorul către înregistrarea corespunzătoare din tabel.

Pe baza acestui indicator, se stabileşte poziţia fizică a înregistrării corespunzătoare din tabel (în exemplul din figura 4.25, după cum indică săgeata, este înregistrarea 1).

Se citesc apoi datele din tabel.

Figura 4.25

3.10. Generatoare în Visual FoxPro

Generatoarele sunt instrumente încorporate în pachetul VFP, care, cu minim de informaţii oferite de utilizator, permit executarea rapidă a unei game largi de acţiuni asupra tabelelor sau a bazelor de date. Ele asigură realizarea uşoară a ecranelor, meniurilor, rapoartelor, interogărilor şi a etichetelor, fără a scrie programe sursă. Principiul de funcţionare a generatorului cere ca utilizatorul să-şi specifice, prin intermediul interfeţei VFP, opţiunile şi cerinţele sale, iar VFP să genereze programe obiect pe baza acestora.

În secţiunile următoare se prezintă câteva noţiuni privind realizarea rapoartelor, etichetelor, meniurilor, formelor şi proiectelor cu ajutorul generatoarelor. Generatorul de filtre a fost prezentat în paragraful referitor la interogarea bazelor de date.

3.10.1. Generatorul de rapoarte

Rapoartele reprezintă liste cu structuri complexe ce cuprind ansambluri de informaţii construite pe baza datelor din tabele, informaţii care urmează a fi afişate pe ecran, salvate într-un fişier text sau listate la imprimantă.

Generatorul de rapoarte este un utilitar al sistemului VFP care permite utilizatorului construirea raportului în mod interactiv, prin folosirea diferitelor ferestre de dialog, opţiuni etc.

Carte.dbfNr.înreg Nume_a … … Valoare

1 EMINESCU 1785002 BACOVIA 1071003 REBREANU 1428004 SADOVEANU 2665605 VINTILA 2261006 STANCU 4760007 PETRUS 178500

… … … … …

Carte.cdxValoare Poziţie

89250 10107100 2128520 9142800 3178500 1178500 7202300 8

…. …

Page 25: Capitol 3

Lansarea generatorului de rapoarte se poate face în modul de lucru direct, cu comanda:

CREATE REPORT [FileName | ?]sau, în modul de lucru asistat, prin alegerea din meniul File a opţiunii New, butonul Report, pictograma New File sau Wizard.

Indiferent de modul de lucru folosit, în bara meniului sistem devine disponibil meniul Report (figura 4.40) şi se deschide fereastra Report Designer pentru configurarea noului raport (figura 4.41).

Figura 4.40

Implicit, fereastra de configurare prezintă 3 benzi orizontale (figura 4.41): banda Page Header (antet de pagină), în care se pot plasa texte, constante,

variabile care vor fi afişate sau tipărite în partea superioară a fiecărei pagini a raportului final (de exemplu: titlu, antet, număr de pagină, dată).

banda Detail (detalii) – reprezintă conţinutul propriu-zis al raportului şi conţine informaţii din baza de date folosite în raport. Pot fi şi câmpuri calculate pe baza expresiilor construite de utilizator.

banda Page Footer (subsol de pagină) cuprinde texte, constante, variabile ce vor fi afişate sau tipărite în partea inferioară a fiecărei pagini din raport. Implicit, în această bandă figurează funcţia Date() şi variabila Page No care afişează data sistemului şi numărul paginii.

Figura 4.41

Pe lângă aceste benzi, mai pot fi afişate ulterior şi altele, prin alegerea unor opţiuni din meniul Report. Astfel, benzile Title şi Summary sunt afişate prin alegerea

Page 26: Capitol 3

opţiunii Title/Summary şi activarea comutatoarelor respective din fereastra de dialog deschisă.

Banda Title (titlu) conţine un titlu ce se afişează o singură dată pe prima pagină a raportului.

Banda Summary (rezumat) poate cuprinde, pe ultima pagină a raportului, informaţii rezumative şi/sau calcule generale privind datele din raport.

Atunci când se doreşte gruparea articolelor după criterii stabilite de utilizator, în fereastra de configurare devin disponibile benzile Group Header (antetul grupului) - ce conţine informaţii care asigură identificarea fiecărui grup în parte şi Group Footer (subsolul grupului) – ce poate conţine calcule intermediare pe baza datelor din fiecare grup, rezumate şi/sau subtotaluri realizate pe baza informaţiilor din grup. Definirea grupurilor de articole se realizează cu opţiunea Data Grouping din meniul Report.

Pentru o grupare corectă, înaintea lansării generatorului de rapoarte, este necesară indexarea tabelului după criteriul folosit ca element de grupare.

Se pot obţine şi aşa numitele rapoarte rapide prin alegerea opţiunii Quick Report din meniul Report. În fereastra de dialog deschisă (figura 4.42), se stabileşte structura raportului rapid.

Figura 4.42

Butoanele de comandă Field layout stabilesc cum vor fi plasate câmpurile în banda de detalii, respectiv pe coloane sau pe linii. Dacă se activează caseta de validare Titles, atunci, în antetul raportului, vor fi afişate, pe coloane, numele câmpurilor. Dacă se activează şi caseta Add alias, la numele câmpurilor din banda de detalii se va ataşa şi aliasul tabelului din care fac parte. Caseta Add table to data environment activată salvează informaţiile privind starea mediului VFP. Butonul Fields permite selectarea din fereastra Field Picker a câmpurilor ce vor face parte din raport.

În benzile rapoartelor pot fi incluse, cu ajutorul instrumentelor din bara utilitară Report Controls Toolbar, activată din meniul View, diferite tipuri de obiecte precum texte, câmpuri ale tabelelor sau câmpuri calculate, elemente grafice (linii, chenare), imagini.

Modificarea structurii unui raport creat anterior se face fie prin alegerea din meniul File a opţiunii Open şi apoi a numelui raportului respectiv, fie cu ajutorul comenzii MODIFY REPORT care are următoarea sintaxă:

Page 27: Capitol 3

MODIFY REPORT [FileName | ?]Executarea unui raport se realizează cu comanda REPORT FORM:REPORT FORM FileName1 | ?Exemplu. Se foloseşte tabelul carte, din care se va obţine un raport cu titlul

„SITUAŢIA FONDULUI DE CARTE”, în care articolele se grupează după codul domeniului (coddomeniu). Pentru fiecare domeniu, se calculează valoarea totală a cărţilor, iar în finalul raportului, valoarea totală a întregului fond de carte.

USE carteINDEX ON coddomeniu TO domenCREATE REPORT carte

Din meniul Report se alege opţiunea Quick Report pentru a se obţine un raport rapid. Pentru scrierea titlului, se activează opţiunea Title Band, apoi butonul Label din Report Controls Toolbar si se scrie titlul în zona dorită.

Pentru gruparea datelor, din meniul Report se va selecta Data Grouping Insert. Se va activa butonul cu trei puncte pentru a lansa constructorul de expresii (Expression Buider). Din fereastra acestuia, se selectează câmpul după care se doreşte gruparea datelor (coddomeniu) şi după care s-a realizat indexarea bazei de date.

Pentru calcularea valorii totale, în banda Group Footer se selectează din bara de instrumente butonul ab (field) şi din fereastra constructorului de expresii (Expression Builder) se selectează câmpul valoare. Se revine apoi la butonul Calculations, de unde se alege tipul de calcul dorit - în cazul exemplului propus - Sum (suma).

În banda Summary se calculează asemănător suma totală pentru întregul fond de carte.

Fereastra Report Designer va arăta, în final, ca în figura 4.43.

Figura 4.43

Pentru previzualizarea raportului obţinut, se foloseşte View Preview, rezultatul fiind cel din figura 4.44.

Page 28: Capitol 3

Figura 4.44

3.10.2. Generatorul de etichete

Informaţiile din tabele sau baze de date pot fi prezentate în etichete, sub formă simplificată. Sunt folosite pentru obţinerea cărţilor de vizită, a invitaţiilor, etichetelor produs, etichetelor pentru corespondenţă, fluturaşilor pentru salarii etc.

Lansarea generatorului de etichete (Label Designer) se face în modul de lucru asistat, prin apelarea meniului File, opţiunea New, butonul Label şi pictograma New File sau Wizard sau în modul de lucru direct cu comanda:

CREATE LABEL [FileName | ?][NOWAIT] [SAVE][WINDOW WindowName1][IN [WINDOW] WindowName2 | IN SCREEN]

Clauzele sunt asemănătoare cu cele prezentate la comenzile anterioare.Pe ecran se deschide fereastra New Label care permite alegerea, dintr-o listă

predefinită, a parametrilor fizici ai etichetei ce se va obţine (lăţime, înălţime, număr de etichete pe o pagină).

Crearea etichetelor se aseamănă cu crearea rapoartelor, la definirea lor fiind folosit acelaşi meniu Report, împreună cu bara de instrumente Report Controls Toolbar.

După alegerea tipului de etichetă, se deschide fereastra de configurare Label Designer, asemănătoare cu fereastra Report Designer.

În această fereastră, poate fi obţinută o etichetă rapidă prin activarea opţiunii Quick Report din meniul Report. Într-o astfel de etichetă sunt incluse primele 5 câmpuri din tabelul curent. Pentru configurarea unei etichete personalizate, se folosesc butoanele din Report Controls Toolbar.

Modificarea unei etichete create se realizează folosind meniul File, opţiunea Open sau cu comanda:

MODIFY LABEL [FileName | ?][[WINDOW WindowName1][IN [WINDOW] WindowName2 | IN SCREEN]]

Page 29: Capitol 3

[NOENVIRONMENT][NOWAIT][SAVE]

Clauzele din formatul general al comenzii au aceleaşi semnificaţii ca în celelalte comenzi prezentate anterior.

Exemplu. Se obţine, plecând de la tabelul carte, o etichetă care va cuprinde cota cărţii (cota) şi codul domeniului din care face parte cartea (coddomeniu).

Se deschide tabelul carte. Se scrie comanda CREATE LABEL; se alege tipul de etichetă, iar din meniul

Report se selectează opţiunea Quick Report (figura 4.45).

Figura 4.45 Field Layout - pentru dispunerea câmpurilor pe verticală. Fields şi eticheta Field Picker. Se aleg câmpurile cota şi coddomeniu în lista Selected fields, apoi butonul

OK (figura 4.46).

Figura 4.46

Page 30: Capitol 3

Figura 4.47

Dacă se doreşte introducerea unui câmp calculat se foloseşte bara de instrumente Report Controls Toolbar, respectiv butoanele pentru text (A) şi pentru câmpuri (ab). Selectarea butonului ab are ca efect deschiderea ferestrei Report Expression. În continuare, selectând butonul cu trei puncte (…) se lansează constructorul de expresii (Expression builder), cu ajutorul căruia se introduce expresia dorită (figura 4.47).

Fereastra Label Designer este prezentată în figura 4.48.

Figura 4.48

Previzualizarea etichetei obţinute (carte.lbx) se obţine apelând meniul View, opţiunea Preview (figura 4.49).

Page 31: Capitol 3

Figura 4.49