Sunteți pe pagina 1din 162

Introducere

1. INTRAREA I IEIREA N/DIN FOXPROW


1.1 Elemente de interfa
1.2 Help-ul
1.3 Editorul de texte
1.4 Baze de date
2. TIPURI DE DATE
2.1 Tipul logic
2.2 Tipul numeric
2.3 Tipul ir de caractere
2.4 Tipul dat calendaristic
2.5 Alte tipuri de date
3. VARIABILE I TABLOURI (MASIVE)
4. BAZE DE DATE
4.1 Generaliti. Comenzi SET
4.2 Crearea bazelor de date
4.3 Manipularea structurii unei baze de date
4.4 Manipularea cmpurilor unei baze de date
4.5 Vizualizarea coninutului bazelor de date
4.6 Adugarea de nregistrri
4.7 Modificarea coninutului bazelor de date
4.8 tergerea nregistrrilor
4.9 Indicatorul de nregistrri
4.10 Cutarea nregistrrilor. Accesul la nregistrri
4.11 Cmpurile memo i general
4.12 Import / export de date

4.13 Ordonarea (sortarea) unei baze de date


4.14 Extragerea de informai statistice
4.15 Relaii ntre bazele de date
4.16 Fiiere de comenzi
4.17 Proceduri i funcii definite utilizator
5. INTRARE - IESIRE
5.1 Formatul de intrare-iesire
5.2 Comenzile @ say si @ get
5.3 Obiecte de control
5.4 Comanda READ
5.5 Comenzi i funcii pentru controlul cmpurilor GET
5.6 Comenzile ? i ??
5.7 Comenzile *,&&, i ,. TEXT... ENDTEXT
5.8 Lucrul cu ecranul. Elemente semigrafice
5.9 Ferestre
5.10 Meniuri
6. GENERATOARE
6.1 Generatorul de ecrane
6.2 Generatorul de rapoarte
6.3 Componenta grafic FOXGRAPH
6.4 Generatorul de etichete
6.5 Generatorul de filtre
6.6 Generatorul de meniuri
Cap 7. LUCRUL N REEA
7.1 Configurarea FoxPro pentru o staie
Cap. 8 APLICAII BAZE DE DATE
8.1 Crearea i deschiderea unei baze
8.2 Modificarea structurii unei baze
8.3 Poziionarea n baze, tergerea articolelor
8.4 Importul i Exportul bazelor de date
8.5 Ordonarea bazelor de date
8.6 Informaii statistice
8.7 Controlul culorilor i al ecranului
Cap. 9. Realizarea de proiecte
Cap10. PROGRAME TIP

n cadrul programelor tip sunt prezentate o serie de programe pe care putei s le


ncercai i s v convingei de eficacitatea lor.
Descrierea CIP a Bibliotecii Naionale este:
Pfeiffer Emil
Programarea n FOXPRO 2.0 cu exemple de programe comentate
Emil Pfeiffer si Nicu Fantana
Timisoara: EUROBIT 1999
440 p 24 cm - (Colectia de informatica)
Bibliogr
ISBN 973-9441-53-X
Fantana Nicu
FOXPRO 2.6
004-42-FOXPRO 2.6
V mulumesc i v doresc mult succes i lectur plcut!
Cuvnt nainte
Prezenta lucrare este destinat celor care doresc s cunoasc modul n care se
utilizeaz FoxProW n proiectarea de lucrri de prelucrare a datelor cu exemple
practice. Lucrarea este destinat att programatorilor (sau celor care au de gnd s
devina programatori), ct i celor ce doresc s-i ajute pe acetia n munca lor
(ajutorilor programatori). Ea a fost conceput ca suport pentru cursul de FOX al
elevilor clasei a Xll-a de liceu. n cursul expunerii sunt prezentate comenzile FoxPro
utiliznd urmtoarele convenii:
Numele comenzilor i cuvintele Fox sunt scrise cu litere mari.

Cuvintele scrise cu litere mici reprezint nume de cmpuri sau de variabile (care
sunt la alegerea utilizatorulul).
Cuvintele scrise ntre paranteze drepte reprezint opiuni (deci ele pot fi folosite dar
nu este absolut obigatoriu s fie folosite). Ele rezolv anumite opiuni de prelucrare
la alegerea utilizatorului, Dac nu sunt utilizate comanda funcioneaz (dar ntr-o
form mai simpl).
Cuvintele separate ntre ele cu o linie verical (I) dreapt semnific faptul c
respectivele cuvinte se pot utiliza exclusiv (utilizarea unuia l exclude pe cellalt).
- expl - este evaluat ca o expresie logic;
- expn - este evaluat ca o expresie numerica-raional ntreag;
- expc - este evaluat ca o expresie character;
- expr - este evaluata ca o expresie de orice tip.
Capitolul 10 al lucrrii, numit Programe tip se gsesc o serie de programe proprii,
considerate performante, ofenite ca exemplu i care cu anumite modificri pot fi
utitilizate n lucrrile dumneavoastr proprii. Ele rezolv anumite probleme utile i
v ofer un exemplu privind modul de rezolvare a acestor probleme. Exist (tot n
acest capitol) o serie de explicaii privind utilizarea lor i de asernenea se gsesc
aceste programe pe o discheta anexat acestei lucrari (pe care o putei cere dac
considerai necesar). Explicaiile sperm sa v ajute n negerea programelor.
Spernd c aceast carte va satisface exigenele dumneavoastr, va dorim mult
succes n consultarea acestei lucrri.
Autorul
Introducere
Creterea continu a volumului precum i a complexitii datelor n conducerea
proceselor economice precum i a altor aspecte ale vieii sociale i materiale au
impus metode i tehnici de organizare a informaiilor tot mai perfecionate.
Principalele forme de organizare a informaiilor pot fi grupate n fiiere i bnci de
date. Prima etapa n evoluia metodelor i tehnicilor de organizare a informaiilor n
condiiile utilizrii calculatoarelor electronice se caracterizeaz n general prin
adaptarea tipurilor de organizri existente n sistemele de prelucrare manual la
condiiile tehnice impuse i permise de calculatoarele electronice. Principalul tip de
organizare a informaiei este fiierul, Fiierul reprezint o colecie de date avnd un
anumit mod de organizare. Acest sistem de organizare este comun sistemelor
manuale ca i celor automate, un exemplu fiind colecia de fie de personal dintr-o
intreprindere (cuprinznd toate datele de personal) indiferent c aceste date sunt
inute pe suport de hrtie (n varianta manual) sau pe mijloace de memorare
magnetic (n prelucrarea automat).
Un salt calitativ important n sistemele de prelucrare electronic a datelor s-a
nregistrat o dat cu crearea i darea n exploatare a sistemelor de algoritmare i
programelor standard privind integrarea (nlnuirea) fiierelor, att ca mod de
organizare, ct i ca exploatare n sistemele de prelucrare automat. Apar astfel
tehnici de organizare a informaiei care permit reprezentarea datelor i a relailor
dintre ele, avnd ca rezultat utilizarea fiierelor integrate.
Un exemplu al tehnicilor de acest tip pot fi citate sistemele BOMP (Bill of Material
Process) i SCF (Systeme de Chainage de Fichers) utilizate pe calcuatoare tip IBM
(primul) i FELIX-C256 (al doilea). Aceste sisteme s-au dezvoltat n anii 70 i aveau
drept suport calculatoarele din acei ani cu sisteme de operare ca SIRIS-50 ce se
utilizau cu o serie de limbaje de programare ca COBOL, FORTRAN, ASSIRIS n care
sunt definite cteva tipuri de acces la informaii i anume:
Accesul secvenial este acel acces care nu permite rentoarcerea deci accesul se
face de la prima informaie spre ultima sau dac se dorecte accesarea unei
nregistrri este necesar s fie pacurse toate cele anterioare. Acest tip de acces
este relativ lent. El este caractenstic datelor pe suport de hrtie (o carte, cel puin la

scriere permite doar accesul secvenial), sau pe suport de band magnetic, unde,
dei este posibil revenirea benzii magnetice, la citirea unui fiier de pe band
trebuie recunoscut antetul de fiier (nceputul fiierului), structura lui de organizare
i apoi trebuie recunoscut nregistrarea cutat, lucru care se face prin citirea
secvenial, una dup alta a nregistrrilor.
Accesul direct (mai corect spus cvasidirect) la nregistrri care este posibil n cazul
suportului disc magnetic (care s-a dezvoltat n ultimul timp) care este mai rapid.
Acest acces e caracterizeaz prin faptul c este posibil accesarea unei informaii n
mod direct prin trimiterea la aceast informaie (nregistrare) prin intermediul unui
fiier de adrese-index n care se face iniial trimiterea i apoi cunoscnd adresa pe
disc a nregisitrrii se face citirea acesteia. Acest mod de acces este dat de
posibilitile tehnice pe care le ofer discul magnetic prin construcia sa. Acest mod
de organizare a accesului la nregistrri a permis dezvoltarea bazelor de date.
ntr-o etap ulterioar se dezvolt sisteme care s asigure gestionarea datelor
necesare mai multor utilizatori, astfel nct programele de aplicaii s nu depind de
modul de structurare i gestiune a datelor ajungndu-se asfel la bncile de date.
Foxpro 2.6 este un sistem de gestiune a bazelor de date relaionale. El asigur o
rnare vitez de execuie, compatibilitate cu toate sistemele DBASE FOXPRO din
versiunile anterioare i un context pentru ntreinerea i dezvoltarea aplicaiilor de
prelucrare a bazelor de date.
O banc de date presupune trei elemente i anume:
1. o colecie de date (baze de date) aflate n interdependen;
2. descrierea datelor i a relaiilor dintre ele;
3. un sistem de programare pentru gestionarea datelor care asigur independena
programelor aplicative fa de modul de structurare al datelor, o redondan
minima, controlat n memorarea acestora, precum i timp minim de rspuns la
solicitrile utiIizatoror n ansamblul lor (un limbaj de manipulare a datelor.
Noiunea de baz de date se utilizeaz pentru a denumi grupat primele dou
elemente ale bncii de date. Baza de date are deci sens nurnai ca un element al
bncii de date. Componenta a treia a bncilor de date este sistemul de programare
cu o serie de sarcini specificate mai sus i poart denumirea de Sistem de Gestiune
al Bancii de Date (SGBD) care asigura gestionarea (prin programe) a bazei de date
sau a sistemului de baze de date asociate bncii de date. Se mai poate spune c
banca de date este format dintr-o baz de date (sau un sistern de baze de date) i
un SGBD asociat.
Scrierea de aplicaii folosind procedurile FOXPRO ofer o serie de avantaje fa de
alte limbaje de programare. Acestea sunt legate de faptul c un program are o
anumit independen fa de bazele de date (care pot fi create i modificate n
afara programelor. Dac n COBOL, PASCAL, BASIC sau C un program este strict
legat de fiierul pe care l prelucreaz i l creaz, aici nu se ntmpl acelai lucru.
Acest fapt permite s se fac modificri (adugari de cmpuri de exemplu) n baza
de date far ca programul s sufere vre-o modificare i putnd adauga programe
noi care s prelucreze aceste informaii noi. Aceasta deoarece crearea bazelor de
date n FoxPro se face separat (sau se poate face i separate)fa de celelalte
operaii asupra bazelor de date i aceasta d caracterul de SGBD FoxPro-ului.
Aceste avantaje le au i alte SGBD de exemplu PARADOX-ul. n plus ns FOXPRO
posed i o extensie pentru documentarea programelor (FOXDOC)
ceea ce nu posed PARADOX-ul.
Bazele de date n FoxPro au o structur asemntoare unui tabel. De altfel unii
autori le i descriu numindu-le tabele i nu baze de date. n Paradox ele sunt numite
table deci tabele.
n structura lor se disting denumirea cmpurilor, care este de fapt capul tabelului
(structura bazei de date) i nregistrile, care conin rndurile tabelei adic valorile
respective ca n exemplul de mai jos:
--------------------------------------------------- ------------------

codprod_____numep_____contp_____pret
--------------------------------------------------- -----------------0100________tesatura____345______30500
10105_______panza______345______10200
10207_______fir lana_____345______15250
10209_______fir pna_____345_______15700
10311_______fir celo_____345______14800
10350_______fir bbc_____345______16500
==================================
Tabel reprezentnd o baz de date
n cadrul bazelor de date pot fi definite relaii. De exemplu s considerm o baz de
date referitoare la persoanele dintr-un ora. Aceast baz de date poate fi definit
prin numele i prenumele persoanelor care alcatuiesc fiecare familie (persoane
adulte), prin adresa lor s zicem numrul i seria buletinului de identitate i codul
numeric personal pentru o identificare absolut exact. Dar aceast list de
persoane ar putea fi completat cu o alt list cuprinznd copiii acestor persoane,
averea lor, ocupaia etc. O list cuprinznd copiii poate fi definit ca o sublist a
acestei prime liste sau se pot defini anumite relaii ntre aceste liste. Relaiile care
pot fi definite ntre bazele de date n FoxPro sunt de mai multe tipuri:
- relaii 1-1 - care stabilesc o coresponden biunivoc la nregistrrile a dou baze
de date, astfel nct fiecarei nregistrari dintr-o baz de date i corespunde o
nregistrare ntr-o alt baz de date. Aceast relaie nu este neaprat biunivoc n
sensul c unor nregistrri poate s nu le corespund nici o nregistrare n cea de a
doua baza de date. Ca exemplu a unei reiaii de acest tip poate fi relaia ntre un
nomenclator de produse cuprinznd codul i denumirea produsului, i stocul
cantitativ pe o magazie pentru acel produs. Acesta poate lipsi caz n care poziia
respectiv de stoc este vid.
- relaii 1 la mai multe - stabilete o relaie n care o nregistrare conine mai multe
subordonari. Ca exemplu putem da o familie (so-soie) i numarul de copii
corespunzator acelei familii. Acest numar poate varia ntre zero i un numar peste
10.
Un alt exemplu este relaia dintre nomenclatorul de produse definit mai sus cu
stocurile de produse la mai multe magazii (atunci cnd ntr-o unitate economic
exist mai multe magazii care pot avea acelai produs). n acest caz relaia ce se
stabilete poate merge de la 1-0 atunci cnd nu s-a realizat acel produs, i pan la
1- numrul magaziilor, cnd produsul exist n stoc la fiecare magazie.
- relaii mai multe la mai multe - este o relaie n care mai multe nregistrri ntr-o
baz de date sunt puse n legtur cu mai multe nregistrri dintr-o alt baz de
date. Ca exemplu s-ar putea da o relaie stabilit ntre oferta de materii prime i
multitudinea cererilor de materii prime pe fiecare tip de materie prima.
S-ar mai putea defini o relalie tip mai multe la una dar acest tip se reduce la tipul
una la mai multe prin schimbarea sensului relaiei.
Cerintele sistem ale FoxPro-ului sunt nepretenioase. Pentru a putea lucra n FoxPro
sunt necesare:
- un calculator IBM XT sau compatibil cum sunt: IBM XT i AT, PS/2, Compaq
Portable, Plus, DeskPro, Portable II, Portable Ill sau Compaq 386;
- memorie minima 512 Ko;
- o unitate de flopy disk i un hard disk;
- sistem de operare DOS v 2.1 sau mai mare, sau OS/2 v 1.0 sau mai mare;
- monitor monocrom sau color;
- imprimant compatibila cu sistemul de operare amintit.
FoxPro poate utiliza memorie suplimentar AST RAM Page, Intel Above Board sau
orice Board care satisface cerinele LIM (LOTUS-INTEL-MICROSOFT). (Sau altfel spus

orice calculator care se gsete la ora actual pe pia). n reea se pot utiliza staii
de lucru cu memorie minima de 640 Ko i orice configuraie de uniti de disk sau
fr, Dos versiunea 3.1 sau mai mare sau OS/2 versiunea 1.0 sau mai mare, i reea
Novell Advanced NetVare sau IBM PC Network, Token Ring Network, IBM PC Local
Area Network program, 3Com 3Plus Network cu sistem de operare 3Com 3Plus sau
orice configuraie network compatibil 100% NETBIOS cu sistem de operare DOS
versiunea 3.1 sau mai mare.
FoxPro utilizeaz toate tipurile de memorie de calculator. Printr-o configurare
corect, pertormanele pot fi considerabil mbuntite. Dac dispune de memorie
convenional i extins, FoxPro o utilizeaz mbunindu-i performanele.
n CONFIG.SYS trebuie precizate dou linii i anume:
BUFFERS 30 (Se recomand, minim).
FILES = 40(se recomand, minim).
Acest numr este necesar deoarece n FoxPro sunt deschise simultan mai multe
fiiere i aceast cifr limiteaz numrul fiierelor deschise simultan.
Fiierul CONFIG.FP (n general se gsete n directorul n care a fost creat FoxPro-ul),
este un fiier de configurare citit de FoxPro la lansare. n fiierul CONFIG.FP se pot
include i comenzi proprii de configurare sub forma <element = valoare> ca de
exemplu:
TALK = OFF
sau se poate indica un program care s fie lansat automat la ncrcare:
COMMAND DO nume program.
- n AUTOEXEC.BAT se include comanda:
SET FOXPROCFG = cale(numefiier) pentru a gsi fiierul CONFIGFP (de configurare
a FoxPro-ului).
PATH C:FOXPRO26 se include n linia PATH aceasta pentru ca lansarea FoxPro-ului s
se poat face din orice director.
FOXPRO poate fi folosit sub DOS sau WINDOWS. n DOS el lucreaz n mod text, n
WINDOWS se folosete modul grafic (fonturi, imagini, desene, transfer ntre
aplicaii). Aceasta este posibil deoarece FoxPro2.6 se gsete n ambele versiuni,
att sub DOS ct i sub WINDOWS. Mai nou a aprut i varianta VisualFoxPro. Toate
indicaiile prezente n aceast carte pot fi folosite i n aceast variant.
Cele studiate n continuare se refer la FoxPro versiunea 2.6. Programele scrise i
care funcioneaz n celelalte versiuni (Dbase III, III+, IV sau FoxPro 2.0)
funcioneaz perfect n Fox2.6 eventual prin conversia unor programe (conversia se
realizeaz automat). Invers ns lucrurile nu sunt neaparat adevrate i aceasta
deoarece FoxPro 2.6 introduce o serie de funcii noi precum i noi comenzi sau o
nou form de scriere a unor comenzi i de aceea un program scris cu suportul
FoxPro 2.6 este foarte probabil s nu funcioneze ntr-o versiune mai veche.
Lansare n DOS: - FOX (enter)
n WINDOWS - 2K (dublu click) pe icoana corespunztoare
Pentru ieire din FOX se tasteaz QUIT i ENTER.
Dup lansare apare fereastra COMMAND unde se pot introduce comenzi i se poate
utiliza practic acest SGBD sau se lanseaz un catalog n care a fost creat baza de
date sau se cere selectarea sau adaugarea unui catalog (dac se dorete gruparea
bazelor de date ntr-un catalog pentru o eviden mai simpl a lucrrilor referitoare
la problema ce se dorete a fi rezolvat).
o 8 septembrie 2008
o 0 comentarii
o nici o evaluare
Capitolul 1.
1. INTRAREA I IEIREA N/DIN FOXPROW
1.1 Elemente de interfa
Odat pornit FoxProW (se pornete windows-ul i se apas dublu clik pe icoana

corespunztoare sau se folosete lansarea cu comanda DOS FOX <ENTER>) pe


ecran apare fereastra Microsoft FoxPro care are n partea superioar un meniu
sistem al FoxProW-ului prin care se poate selecta modul de lucru cu meniul. Aici se
pot selecta comenzile pentru lucrul cu platforma grafic specific Windows-ului sau
cele specifice variantei sub DOS a FoxPro-ului. La instalare utilizatorul este ntrebat
asupra setului de taste i combinaii de taste folosite pentru comunicarea cu FoxProul care permite individualizarea utilizrii FoxPro-ului.
Un alt element al FoxproW-ulul este fereastra de cornenzi care permite s se lucreze
n celelalte dou moduri i anume n mod comand, ceea ce presupune
introducerea de la tastatur a une comenzi n fereastra de comand (urmat de
ENTER) care realizeaz executarea imediat a comenzii (dac ea este valld) sau
posibilitatea introducerii unei comenzi prin care se deschide o alt fereastr n care
exist posibilitatea introducerii i testrii unui program care va fi executat ulterior.
Fereastra COMMAND are urmtoarele elemente:
- bara de titlu;
- buton de nchidere (stnga sus) ;
- buton de maximizare/revenire la dimensiunile iniiale (dreapta sus);
- buton de redimensionare - punctul din dreapta jos (se aplic metoda DD drag and
drow);
- butoane i bare de derulare orizontal/vertical;
- coninutul ferestrei care se deruleaz.
Aceast fereastr poate fi manipulat ca orice alt fereastr Windows.
Cu FOXPRO se poate lucra n trei moduri i anume:
- Modul IMEDIAT prin tastarea de comenzi urmate de <ENTER>;
- Modul ASISTAT care const n folosirea meniurior FOXPRO;
- Modul PROGRAMAT care const n introducerea i pstrarea comenzilor n nite
fiiere (program, fiiere de comenzi) i lansarea lor dup necesiti.
Ecranul FoxProW este de fapt zona utilizator a ferestrei Microsoft FoxPro i ea
reprezint zona de afiare a rezultatelor de ctre FoxPro. Spre deosebire de varianta
sub DOS, care folosea tot ecranul fizic al calculatorului, FoxProW folosete doar
interiorul ferestrei Microsoft EoxPro ca ecran de lucru. Iniial pe ecran este afiat
sigla FoxProW-ului (vulpea).
Pentru a putea vedea ntregul coninut al ecranului, se poate ascunde fereastra
command, se poate transforma ntr-o icoan sau se poate nchide aceast fereastr.
Reafiarea sa se realizeaz prin alegerea opiunii command din submeniul Window
al FoxProW.
n afar de aceste elemente ale interfeei FoxProW-ului, comunicarea dintre
utilizatori i sistem mai implic i alte elemente, cum ar fi ferestrele sistem i
obiectele de control.
Ferestrele sistem sunt deschise de FoxProW ca urmare a unor comenzi ale
utilizatorului, n vederea realizrii comunicrii dintre cei doi, utilizator i SGBD.
Ferestrele de sistem pot conine mesaje, obiecte de control i chiar meniuri
asociate.
Comunicarea propriuzis se realizeaz prin intermediul obiectelor de control, care
pot fi folosite la:
- introducerea de diverse texte, cu semnificaii diferite (nume de fiiere, coninutul
unor cmpuri, valori numerice etc);
- selectarea unor opiuni din mai multe variante posibile;
- activarea / dezactivarea unor comutatoare, opiuni.
Obiectele de control sunt de urmtoarele tipuri:
- cmpuri, zone de editare, nsotite eventual de butoane de incrementare i
decrementare (pentru cmpurile numerice);
- liste;
- comutatoare;
- declansatoare;
- butoane radio.

Se lucreaz n general n toate 3 modurile - n modul imediat pentru verificarea i


vizualizarea comenzilor, a efectului lor, n mod asistat pentru anumite modificri
asupra bazelor de date, crearea de rapoarte i screenuri i n general pentru unele
rnodificri asupra bazelor de date care trebuie fcute rapid i nu se poate atepta
pn la scrierea i verificarea unui program i n majoritatea cazurilor n modul
programat.
Modul programat este modalitatea principal n care lucreaz programatorii pentru
a crea aplicaii pentru ali utilizatori, nespecialiti n programare, care sunt n aa
mod concepute nct ele s asigure rezolvarea tuturor problemelor puse, ntr-un
mod simplu i rapid, cu o serie de mijloace (proceduri) pentru asigurarea siguranei
datelor i a uurinei i simplitii n utilizare.
n mod asistat meniul se apeleaza cu tasta ALT sau F10 sau cu mouse-ul (M) clik (K)
pe opiune. Renunare cu ESC sau K n afara meniului.
Pentru exemplificarea modului de lucru cu obiectele de control ale interfeei, vorn
folosi dou ferestre sistem: OPEN i NEW aflate pe ecran ca urmare a alegerii
opiunilor open i respectiv new din submeniul File.
Fereastra Open este folosit pentru specificarea numelui unul fiier ce urmeaz a fi
deschis. Ea coine urmtoarele obiecte de control:

- un cmp de editare, File name, n care poate fi introdus caracter cu caracter de la


tastatur numele fiierului de deschis;
- dou liste, una sub cmpul de editare iar cealalt n partea dreapt a ferestrei
(numit Directory), care permit selectarea unui fiier i respectiv a unui director
dintr-o mulime finit aflat (parial) pe ecran;
- dou liste ascunse, numite List files of type prin intermediul creia se permite
selectarea tipului de fiier, respectiv a unitii de disc. Diferenta dintre listele simple
i cele ascunse este c n acestea din urm se afieaz doar elementul selectat,
restul listei putnd fi vizualizat doar dac se selecteaz aceast list (butonul din
dreapta).
- patru comutatoare, numite Al files, Read Only, Environment i Exclusive, fiecare
indicnd prezena sau absena unei proprieti simbolizat de comutatorul
respectiv; Prezena proprietii este indicat printr-un X n interiorul ptrelului
asociat comutatorului.
- trei declanatoare: New, Open i Cancel, n partea dreapt a ferestrei, a cror
acionare determin declanarea anumitor operaii, sugerat prin numele fiecrui
declanator.
Fereastra New, este folosit pentru crearea unui anumit fiier i conine urmtoarele
obiecte de control:
- un grup de butoane radio, numit File Type, a cror principal caracteristic este
aceea c permite selectarea unei anumite variante din mai multe posibile; activarea
unui buton determin dezactivarea celui activat anterior.
- dou declanatoare, numite New i Cancel.
Modul de lucru va fi prezentat n continuare:

Se poate folosi tastatura sau mouse-ul.


Modul de lucru cu tastatura:
n cadrul ferestrei trecerea de la un cmp la altul se realizeaz prin tastarea tastei
TAB (nainte) respectiv SHIFT +TAB (napoi). Pentru a completa un cmp cu o
anumit valoare, se selecteaz cmpul (folosind TAB ) dup care se completeaz
cmpul utiliznd tastatura.
Cmpurile de editare numerice pot fi nsoite de butoane de
incrementare/decrementare care apar n dreapta cmpurilor respective find
reprezentate prin sagei (). Acionarea tastei realizeaz incrementarea (respectiv
decrementarea cu o unitate.
Lista ascuns trebuie de asemenea, selectat nainte de a putea alege elementul
curent al acesteia. Dup selectare se apas tasta SPACE pentru aflarea elementelor
listei i, cu ajutorul tastelor direcionale se selecteaz elementul corespunzator
(ENTER) care devine element curent, iar lista este ascuns.
Comutatoarele dup selectare se activeaz (sau dezactiveaz) folosind tasta SPACE
sau ENTER, trecnd comutatorul selectat n starea complementar.
Pentru activarea unui buton radio dintr-un grup se seleteaz mai nti grupul, (tasta
Tab sau SHIFT TAB ) apoi se selecteaz butonul radio (cu ajutorul tastelor
direcionale i n final se apas tasta ENTER.
Folosind mouse-ul:
Cmpurile de editare se completeaz (folosind tastatura) dupa ce sunt selectate
mai inti printr-un click n cmpul respectiv pentru pozitionarea cursorului.
Butoanele de incrementare/decrementare se pot utiliza apasnd click pe butonul
respectiv. Selectarea unui element dintr-o list ascuns se realizeaza un click pe
elementul curent iar apoi (se deschide lista respectiv) pe elementul din list, care
devine element curent,
Dintr-o list elementul dorit se selecteaz cu click pe element, iar activarea
comutatoarelor respectiv a butoanelor radio i a declanatoarelor, prin click pe
elementul respectiv.
Parasirea FoxProW-ului se poate realiza prin:
- alegerea opiunii Close de pe meniul asociat sistemului, sau prin dublu click pe
butonul de nchidere al ferestrei Microsoft FoxPro
- alegerea opiunii Exit din submeniul File
- prin acionarea tastelor combinate Alt+F4.
De asemenea FoxProW-ul poate fi suspendat i prin ascunderea ferestrei asociate
acestui sistem (transformarea ei ntr-o icoan) i reluarea lucrului n FoxProW prin
dublu click pe icoana asociat.
1.2 Help-ul
Help (n englez = ajutor), reprezint o facilitate important n sensul c indic
utilizatorilor modul de aciune al comenzilor fox, al funciilor sistem.
Exist dou tipuri de help:
- ajutorul independent de context care poate fi cerut prin apsarea tastei F1, sau cu
ajutorul comenzii help tastat n fereastra de comand. El ofer informaii (n limba
englez) referitoare la elementele sistemului FoxPro care pot fi studiate pe rnd sau
se pot cere informaii referitoare la anumite elemente ale acestui sistem (exemplu
help browse tastat n fereastra de comand, d informaii referitoare la comanda
browse).
- ajutorul dependent de context, cnd la un apel al utilizatorului, sisternul
selecteaz comanda sau operaia n lucru din contextul n care ea se efectuez i
ofer informaiile dorite. De exemplu dac se lucreaz cu o fereastr sau un meniu,
o comand sau o funcie, FoxPro-ul la tastarea F1 ofer informaii referitoare la acea
comand sau funcie.
De asemenea FoxProW ofer dou tipuri de ajutor: un tip, utilizat de ctre cei care
lucreaz mult n mediul windows i sunt familiarizai cu help-ul windows, este un tip

de help apropiat de modul windows de afiare i utilizare.


Un al doilea mod (tip baza de date) utilizat n special de utilizatorii mai vechi,
obinuii cu modul de afiare utilizat n versiunile anterioare Windows (dos) ale
FoxPro-ului.
Selectarea uneia sau alteia din metode se face prin comenzi specifice i anume:
SET HELP TO FOXHELP.HLP selecteaz modul windows de afiare i utilizare.
SEF HELP TO FOXHELP.DBF selecteaz modul de afiare tip baz de date.
1.3 Editorul de texte
FoxProW este dotat cu un editor do texte relativ performant deoarece este deseori
necesar crearea sau modificarea unor fiiere (cel mai frecvent programatorii
utilizeaz editorul de texte pentru a- introduce i/sau modifica programele proprii
sau preluate din alte surse).
Editorul de texte se apeleaz utiliznd comanda MODIFY FILE fiier.prg unde
fiier.prg reprezint un fiier tip text cu extensia sa. La tastarea acestei comenzi n
fereatra de comand va apare o nou fereastr de editare unde se va introduce
textul dorit. Textul se introduce carater cu caracter de la tastatur. La sfritul liniei
se tasteaz ENTER.
Pentru deplasarea cursorului n cadrul ferestrei se pot folosi urmtoarele taste:
Combinaia de taste____Semnificaia
--------------------------------------------------- --------------Sgeat dreapta_______Un caracter dreapta
Sgeat stnga_______Un caracter stnga
Sgeat n sus________O linie n sus
Sgeat n jos________O linie n jos
PgUp________________O pagin n sus
PgDn________________O pagin n jos
Home________________La nceputul liniei
End__________________La sfritul liniei
CTRL+Sgeat dreapta__Un cuvnt la dreapta
CTRL+Sgeat snga___Un cuvnt la stnga
CTRL+HOME__________nceputul textului
CTRL+End____________Sfritul textului
==================================
Dac nu se precizeaz extensia, ea va fi .prg (extensie implicit)
Poziionarea cursorului pe o anumit linie se poate realiza i prin intermediul
opiunii Goto line la alegerea creia este deschis o fereastr:

n aceast fereastr se va poziiona cursorul n cmpul de editare line number, se


va modifica valoarea (se va introduce valoarea liniei) prin introducere de a tastatur
sau cu ajutorul butoanelor de incrementare (mouse), se va selecta apoi butonul
Goto pentru pozitonarea pe linia dorit.
O facilitate deosebit de important este posibilitatea oferit de a lucra cu blocuri de
text, adic tratnd un bloc de text ca un tot unitar.
Selectarea blocului de text se poate face cu mouse-ul sau cu tastatura. Cu tastatura
se ine tasta SHIFT apsat i se deplaseaz cursorul conform tabelulul de mai sus
(care indic deplasarea cursorului) i textul pe care se deplaseaz cursorul este
selectat (se coloreaza diferit, n rou).

Cu mouse-ul se selecteaz textul prin deplasarea acestuia peste text cu butonul


stng acionat. Deselectarea se face deplasnd cursorul n orice direcie far a
aciona tasta SHIFT, iar cu mouse-ul deplasnd cursorul fr acionarea butonului.
Tasta Backspace terge caracterul din stnga cursorului, Delete terge caracterul n
faa cruia se afl cursorul. Prin selectarea unui text urmat de apsarea tastei
Backspace se terge textul selectat. Acelai lucru se realizeaz i prin selectarea
unui text i selectarea optiunii Clear din meniul Edit.
Exist posibilitatea copierii sau mutrii unui text prin alegerea opiunilor Cut, Copy
sau Paste din meniul Edit:
Astfel opiunea Cut ncarc textul selectat n clipboard, eliminndu-l din textul
surs.
Opiunea Copy ncarc textul n clipboard fr eliminarea lui.
Opiunea Paste ncarc textul din clipboard n textul editat, la poziia cursorului.
FoxPro-ul poate realiza cutarea unui text (cuvnt, fraz) n textul editat i
poziionarea cursorului la respectivul text. Aceasta se realizeaz folosind opiunile
Find, sau Find again (caut din nou), iar apoi Replace sau Replace and find again,
sau Replace all din meniul Edit (nlocuiete, nlocuiete i caut din nou i
nlocuiete totul).
Pentru folosirea editorului n ferestra de comand se fac urmtoarele observaii:
1. Deplasarea cursorului pe o linie n care a fost scris o comand i apsarea tastei
ENTER duce la executarea comenzii respective indiferent unde se afl cursorul n
cadrul liniei;
2. Cnd linia se termin cu caracterul ; aceasta fiind o linie de continuare, se ia n
considerare i linia urmtoare. Aceast regul este folosit i la editarea
programelor.
O comand FOX se poate ntinde pe maxim 2048 caractere. Se poate prescurta
orice comand la primele patru caractere. De exemplu comanda CLEAR se poate
prescurta CLEA, comanda REPLICATE se prescurteaz REPL amd. Terminarea
forata a unei comenzi se realizeaz prin apsarea tastei ESC. O comand fox
conine cuvntul rezervat care constituie un ordin pentru calculator care este urmat
de alte cuvinte reprezentnd argumente, opiuni, vaniabile etc.
Pentru relansarea unei comenzi ne poziionm pe comand (cu sgeiile sau cu
mouse-ul - M) i apoi se tasteaza ENTER.
Comanda ? (afieaz) afieaz datele pe linia urmtoare, Comanda ?? afieaz
rspunsul ncepnd cu poziia curent.
Execuia repetat a aceleii succesiuni de operaii prin intermediul meniurilor este
ineficient (fiecare operaie trebuind s fie executat de fiecare dat). n locuI
acestei metode se folosete o alta care ne permite automatizarea acestor operaii
precum i utilizarea calculatorului de ctre persoane mai puin familiarizate cu
FoxPro-ul, care tiu s utilizeze calculatorul, s introduc date, dar nu au cunotine
de programare (operatori calculator). Astfel mai nti sunt concepute anumite
operaii care trebuie executate, mintal sau pe hrtie, se stabilesc instruciunile ce
trebuie executate i se introduc ntr-un fiier text (care se numete program) i care
poate fi ulterior lansat n execuie de oricte ori este necesar.
Un program se creaz prin urmtorii pai:
1. mai nti se concepe mintal (sau pe hrtie, eventual utiliznd schemele logice)
algoritmul de rezolvare a problemei propuse;
2. se transform acest algoritm ntr-un ir de instuciuni, care constituie chiar
programul de rezolvare al problemei respective;
3. urmeaz introducerea programului n calculator, adic editarea acestuia,
memorarea fcndu-se n general pe un suport extern (harddisk);
4. ultima etap este cea de execuie sau de rulare, care const n executarea
instruciunilor programului, pentru care este folosit varianta compilat, adic o
variant a programului care este executabil i rezult n urma compilrii
(interpretrii i traducerii n instruciuni executabile de ctre compilator a
comenzilor i instruciunilor programului).

De exemplu urmtorul program:


clear
@14,30 say FoxPro sub Windows
Acest program care este foarte simplu se editeaz n felul urmtor:
n fereastra de comand se introduce urmtoarea comand:
modify command mesaj
Aceast comand are ca urmare deschiderea unei ferestre numite mesaj.prg de
editare a acestui program pe care l-am numit mesaj.
El se introduce linie cu lilnie n acest fereastr. Cnd se termin acest operaie se
nchide fereastra de editare mesaj.prg prin apsarea tastei ESC, sau cu mouse-ul
apsnd pe butonul de nchidere al ferestrei dup ce s-a salvat programul editat
prin apsarea tastelor CTRL/W sau alegnd opiunea save a submeniului file.
Apoi urmeaz compilarea programului (care se face automat) ce poate fi executat
prin comanda compile mesaj acest comand avnd ca rezultat o varianta
executabil: fiierul mesaj.fxp care poate fi lansat n execuie ori de cte ori dorim
folosind comanda do mesaj care determin tergerea ecranului i afiarea mesajului
FoxPro sub Windows.
Dac n locul numelui mesaj vom edita un program numit altfel (este valid orice
nume format din opt caractere maxim n care caracterele sunt o liter sau
caracterul _ sau cifrele de Ia 0 la 9), vom obine programul respectiv. nlocuind
cele dou comenzi din programul mesaj cu comenzile pe care le dorim n programul
respectiv.
1.4 Baze de date
1.4.1 Definiie. Crearea bazelor de date
Bazele de date reprezint acumulri de date, organizate ntr-un anumit mod i
referitoare la un anumit subject (fenomen).
Pentru construirea unei baze de date este necesar existena datelor, existena unui
suport de memorare a lor, ct i existena unui mecanism de manipulare a acestor
date. Datele sunt memorate la ora actual pe discuri magnetice i optice,
rnecanismul de accesare l reprezint unitile de disc magnetic (mpreun cu
interfeele aferente), iar partea logic de momorare i manipulare este asigurat de
mecanismele software specializate SGBD-urile. La nivel fizic bazele de date sunt
constituite din fiiere a cror organizare i manipulare este asigurat de SGBD.
n FoxProW se folosete urmtorul mecanism privind manipularea bazelor de date:
1 Baza de date trebuie creat nainte de utilizare. Aceast operaie este necesar
nainte de prima utilizare.
2. Prima operaie asupra unei baze de date dup crearea sa este deschiderea bazei
de date prin care sistemul asociaz bazei de date o zon de memorie pentru
manipularea datelor.
3. Se pot face acum diverse operaii asupra bazelor de date cum ar fi vizualizarea
datelor, accesarea lor adugarea de date, reordonarea etc.
4. n final se nchide baza de date dup terminarea lucrului prin care se elibereaz
zonele de memorie utilizate.
Privind operaiile ce se pot executa asupra bazelor de date, acestea sunt:
- adugarea de noi date n baza de date;
- modificarea datelor;
- tergerea unor date introduse anterior;
- reorganizarea datelor din baza de date, din punctul de vedere al structurii sale, al
ordinii datelor, etc.
Operaiile amintite se pot executa prin intermediul meniului FoxPro sau prin
intermediul cornenzilor Fox, variant ce presupune cunoaterea mediului de
programare i FoxProW, variant utilizat de ctre programatori. Capitolul prezent

i propune prezentarea modului de lucru cu meniurile Fox.


Pentru crearea unei baze de date s considerm o baz de date de eviden a
stocurilor de produse dintr-un depozit. Fiecare nregistrare din baza de date va
conine un produs caracterizat prin:
- codul produsului;
- denumirea produsului;

- cantitatea n stoc;
- unitatea de masur;
- necesit/nu necesit condiii speciale de depozitare;
- informaii suplimentare.
Pentru a crea acest baz de date se alege opiunea New a submeniului File, acesta
determinnd deschiderea ferestrei cu acelai nume:
Din grupul de butoane radio din stnga ferestrei se selecteaz butonul Table/DBF,
indicnd c fiierul ce se creaz este o baz de date (se mai pot crea:
programe, fiiere ASCII, fiiere index, rapoarte, etichete, ecrane, meniuri, filtre,
proiecte folosind restul de butoane radio). Urmeaz acionarea declanatorului New,
operaie ce va determina deschiderea unei noi ferestre, numit Table/Structure, n
care se va descrie structura bazei de date. nainte de deschiderea acestei ferestre
este necesar s stabilim structura exact a bazei de date care este dat n
urmtorul label:
Denumire camp___Tip cmp____Lung____Zecim
--------------------------------------------------- ----------------------Cod_____________caracter_____8
Denumire________caracter_____30
Cant____________Numeric_____10________2
Unit_mas________caracter______3
Cond_spec_______Logical______1
Inform___________Memo_______10
=====================================
Acest structur se va indica n fereastra Table/Structure
Fereastra conine o list format din ase coloane, fiecare linie descriind o linie
(nregistrare) din baza de date, fiecare coloan descriind o caracteristic a
cmpului.
Coloanele listei au urrntoarele semnificaii:

1. Prima coloan care nu poart nici un nume, este utilizat la schimbarea ordinii de
apariie a cmpurilor, pentru mutarea unui cmp se acionez butonul din acest
coloan i, cu butonul stng al mouse-ului apsat se mut cmpul o dat cu
cursorul n noua poziie, dup care se elibereaz butonul mouse-ului; utiliznd
tastatura. Operaia se realizeaz cu ajutorul combmnaiilor tastelor CTRL+ i
CTRL+

2. A doua coloan, numit Tag, se utilizeaz la stabilirea criteriilor de ordonare i


indexare dup cum se va discuta n capitolele urmtoare.
3. Urmtoarea coloan, numit Name, este folosit pentru indicarea numlui
cmpului (cod, denumire etc);
4. A patra coloan, Type, specific tipul fiecrui cmp de date; ea conine o list
ascuns cu urmtoarele elemente:
- Character - ir de caractere (maxim 255)
- Numeric - numeric (1-18 caractere numerice)
- Float - numeric idem
- Date - data calendaristic (8 caractere)
- Logical - logic (boolean) (1 caracter)
- Memo - cmp memo (10 caractere)
- General - cmp general (10 caractere)
- Picture - imagine
5. Coloana a cincea, Width, servete la indicarea numrului total de caractere al
cmpului. Pentru cmpurile tip date, logical, memo i general nu este necesar
completarea acestui cmp deoarece el este cunoscut dinainte i se completeaza
automat.
6. Coloana a asea. Dec, se folosete pentru cmpurile numerice i float pentru
indicarea numarulul de cifre zecirnale. (numrul de zecimale +1 se adaug la
numrul de ntregi i se afl numrul total de caractere ce se indic n coloana 5
(+1 pentru c i puntul zecimal ocup o poziie).
Fereastra Table Structure mai conine dou declanatoare, n seciunea Field prin
care se poate insera un cmp nou deasupra cmpului curent (declanatorul insert)
s se poate terge cmpul curent (declanatorul Delete). Dup terminarea lucrului
se acioneaz declanatorul OK pentru validarea, sau Cancel pentru renunarea la
crearea bazei de date.
Acionarea declanatorului OK determin deschiderea unei noi ferestre, Save As,
folosit la specificarea numelui bazei de date ct i a locului n care se va gsi (a
cii de acces, discul i directorul).
Nurnele fiierului va fi introdus n cmpul de editare Save Table As sau se va alege
din lista de sub acesta (PROD.DBF). Fiierul va fi depus pe discul selectat din lista
ascuns Drive, n directorul selectat din lista Directory. Sistemul mai afieaz o
fereastr de dialog la selectarea declanatorului OK prin care suntem ntrebai dac
dorim sau nu s introducem date n baza nou creat (Input data record now? ). Un
rspuns afirmativ (Yes) va deschide o alt fereastr de adugare de date, iar unul
negativ (No) va preda controlul ferestrei de comenzi.

Pentru exerciiu, v sugerm s introducei (creai) baza de date cu structura


indicat mai sus care s-o numii PROD.DBF.
1.4.2 Deschiderea/nchiderea bazelor de date. Zone de lucru
Pentru a utiliza o baz de date, aceasta trebuie deschis. Pentru manipularea
bazelor de date FoxProW-ul utilizeaz zone speciale de memorie, numite zone de
lucru, n care sunt memorate unele informaii referitoare la asocierea sa cu o zon
de lucru. ntr-o zon de lucru se poate lucra (deschide) cu o singur baz de date la
un moment dat. Pentru a folosi mai multe baze de date sunt utilizate mai multe
zone de lucru. n FoxProW v2.6 sunt disponibile 225 zone de lucru.
Pentru anumite probleme simple care nu utilizeaz dect o singur baz de date (o
singur zon de lucru) operaia de deschidere se realizeaz astfel:
se alege opiunea Open a submeniului File pentru deschiderea ferestrei cu aceai
nume, n care se specific numele bazei de date care se va deschide;
numele bazei de date se introduce manual n cmpul de editare File Name, sau se
poate selecta din lista aflat sub acest cmp; prin lista Directory, de pe discul
specificat n lista ascuns Drive:, de tipul dat de elementul selectat din lista ascuns
List Files of Type;
se declaneaz apoi butonul Open pentru deschiderea bazei de date respective;
acionarea butonului New determin pornirea operaiei de creare a unei baze de
date cu numele specificat.
Controlul zonelor de lucru i al bazelor de date deschise se realizeaz n FoxProW
prin fereastra View n modul de lucru View, fereastra deschis la alegerea opiunii
View a submeniului Window:
Selectarea modului de lucru View din fereastra View se realizeaz prin acionarea
primului buton (din stnga sus) din grupul de cinci butoane. Celelalte moduri de
lucru sunt On/Of, Files i Misc corespunznd diferitelor grupuri de opiuni ale
meniului FoxProW.

Lista Work Areas (zone de lucru) conine ca elemente 225 zone de lucru dintre care
fiind accesibil una dintre ele la un moment dat, selectat ca zon curent n care
poate fi deschis o baz de date.
Pentru a deschide o baz de date n zona curent se acioneaz declaatorul Open
care determin deschiderea ferestrei cu acelai nume. n aceast fereastr se alege
baza de date care urmeaz a fi deschis. Urmtoarele baze de date care se doresc a
fi deschise trebuie s foloseasc alt zone de lucru, deci trebuie selectat alt zon
de lucru (din lista Work Areas) i deschis o baz de date n aceasta.
O dat cu deschiderea unei baze de date ntr-o zon de lucru, acesteia i se atribuie
un nume simbolic (alias) folosit la referirea bazei de date respective care este
afiat n lista Work Areas. De obicei aliasul este chiar numele bazei de date
respective.
Observaie: La crearea unei baze de date aceasta este automat deschis n zona de
lucru curent. Dac nu exist o zona curent deschis explicit, acesta este implicit
zona de lucru 1.
Dup terminarea lucrului cu o baz de date ea trebuie nchis. Acest lucru poate fi
fcut implicit sau explicit, din fereastra View, se selecteaz zona de lucru i se
acionez declanatorul Close. Prin nchiderea bazei de date se elibereaz zona de

lucru respectiv.
nchiderea impicit se poate face prin deschiderea unei ale baze de date ntr-o zon
de lucru (cnd este nchis automat baza de date deschis anterior) sau prin ieirea
din mediul Fox cnd sunt nchise toate bazele de date.
1.4.3 Adugarea de noi date n baza de date
ncrcarea unei baze de date este prima operaie ce trebuie avut n vedere pentru
utilizarea unei baze de date. Adugarea de nregistrri ntr-o baz de date este o
operaie curent, ea realizndu-se de fiecare data cnd apar date noi referitoare Ia
fenornenul studiat prin baza de date respectiv. Mai nti se deschide baza de date
Ia care se adaug noi nregistrri procedndu-se astfel:
- se alege opiunea Append a submeniulul Record, pe ecran fiind deschis o
fereastr de adugare;
- cmpurile (cele din structura bazei de date) sunt aezate unul sub altul i sunt
separate printr-o linie punctat;
- se completeaz fiecare cmp n parte, nregistrare dup nregistrare;
- completarea cmpurilor memo se face n ferestre separate deschise prin
acionarea combinatiei CTRL+PgDn i nchise cu ajutorul combinaiei CTRL+ENTER;
- cmpurile logice se completeaz cu F sau T (pentru false respectiv true, adic
adevrat sau fals);
- dup completarea uItimului cmp al ultimei nregistrri de adugat se acioneaz
combinaia CTRL+END care nchide fereastra de adugare i salveaz noile
nregistrari adugate sau se nchide fereastra ca orice fereastra Windows.
Not: Pentru adaugarea de date n acest mod trebuie inut cont de corelaille pe
care trebuie s Ie respecte valorile introduse sau s se dispun de o Iista a tuturor
valorilor reale. Acest mod de introducere a datelor nu ne scutete de anumite erori
posibile la introducere i de aceea este necesar o atenie deosebit.
1.4.4 Modificarea/vizualizarea coninutului unei baze de date.
Pentru verificarea datelor introduse FoxProW ofer o posibilitate de vizualizare i
verificare ca i de modificare a datelor eventual eronate. Pentru aceasta se alege
opunea Browse a submeniulul Database, deschizndu-se o fereastr n care se va
afla spre modificare coninutul bazei de date, sub form de tabel, cmpurile find
coloane iar nregistrrile fiind rnduri.
Deplasarea din cmp n cmp se face cu ajutorul tastelor TAB i SHIFT+TAB iar din
nregistrare n nregistrare, folosind tastele direcionale ().
Odat deschis fereastra Browse, Ia meniul sistem al FoxProW este adugat un nou
submeniu (numit tot Browse) prin care se pot efectua diferite operaii n acest
fereastr cum ar fi:
- schimbarea modului de afiare a cmpuriior (unul lang altul sau unul sub altul);
- afiarea sau inhibarea afirii liniilor despritoare dintre cmpuri i nregistrri;
- schimbarea dimensiunilor de afiare a cmpurilor, a ordinii de afiare a acestora;
- schimbarea fontului de afiare a textului.
Modul de afiare este numit Browse cnd cmpurile sunt afiate unele Inga altele,
iar modul de afiare cu cmpurile unele sub altele este numit Change. Trecerea de a
un mod Ia altul se reabizeaz prin alegerea opiunii Change i respectiv Browse, al
meniului sistem.
Afiarea sau inhibarea liniilor despritoare dintre cmpuri se realizeaz prin
selectarea optiunii Grid din submeniul Browse.
Modul de afiare a textelor se stabiIete n fereastra Font care se deschide Ia
alegerea opiunii Font a submeniului Browse.
nchiderea ferestrei Browse se realizeaz fie prin combinaia tastelor CTRL+END,
CTRL+W sau Close (submeniul File).

Pentru modificarea automat a coninutului unor cmpuri din baza de date se poate
alege oplunea Replace a submeniului Record cnd se deschide fereastra Replace
care este reprodus n pagina curent.
n partea stng se afl o Iist din care se alege cmpul care se modific, din baza
de date specificat n lista ascuns From Table. Comutatoarele Scope, For i While
permit stabilirea nregistrrilor afectate de aceast comand. Valorile care vor fi
introduse n cmpul selectat vor fi precizate prin intermediul decIanatoruIui With
sau prin cmpul de editare din dreapta acestuia.
Prin decIanatorul Scope trebuie indicat domeniul de aciune al comenzii Replace:
All adic asupra tuturor nregistrarilor, urmatoarele n nregistrari (unde n este
ntreg), cnd se selecteaz butonul radio Next i se introduce n n cmpul de editare
din dreapta butonului, nregistrarea cu numrul n, cnd se selecteaz butonul radio
Record iar n se introduce n cmpul alturat acestui buton, sau restul de nregistrri
inclusiv cea curent i pn la ultima nregistrare, cnd se selecteaz butonul radio
Rest.
Dintre nregistrri sunt selectate doar cele care respect condiiile puse prin
clauzele For i While. Deci clauzele Scope, For i While acioneaz cumulativ, fiecare
impunndu-i propriile restricii Ia selectarea nregistrrilor.
Condiiile clauzelor For i While vor fi specificate cu ajutorul constructorului de
expresii (care va fi prezentat ceva mai jos). Vor fi selectate acele nregistrri pentru
care expresia clauzei este evaluat la valoare adevrat (.T.), iar pentru clauza While
se vor selecta nregistrrile numai att timp ct valoarea clauzei este ndeplinit
(ct timp valoarea expresiei este adevrat sau este .T.). Clauza For se traduce prin
pentru iar clauza While prin att timp ct.
Pentru alctuirea expresiilor (de orice tip dar n cazul nostru pentru construirea
expresiilor asociate clauzelor For i While) se deschide fereastra Expresion Builder,
prin activarea comutatoarelor For (sau While) i se va introduce o expresie n
regiunea de editare (Expresion sau For Clause, sau While Clause dup caz), fie
manual de ctre utilizator, fie asistat de ctre sistemul FoxProW prin intermediul
celorlalte obiecte de control din fereastr.

Listele ascunse String, Math, Logical i Date conin funcii FoxProW de tip ir de
caractere, numeric, logic i respectiv data calendaristic.
Exemplu condiia: SUBSTR(Prod.cod,1,1)==A se introduce n folul urmtor: Se
activeaz comutatorul For al forestrel Replace deschizdu-se fereastra Expresion
Builder. Din lista ascuns String se alege SUBSTR(,,);
Apoi din lista Fields se alege cmpul cod (Prod.cod - baza de date prod.dbf a fost
deschis anterior i a fost selectat din lista ascuns From Table);
Se completeaz cu 1 celelalte pozii ale funciei Substr() dup care se mut cursorul
Ia sfritul liniei:
Se aIege operatorul din lista ascuns Logical i se alege elementul text din lista
ascuns String i ntre ghilimele se introduce caracterul A rezultnd expresia:
SUBSTR(PROD.cod1 ,1)==A
Se acioneaz declanatorul Verify pentru verificare i Ok pentru acceptarea
expresiei, dup care este executat comanda Replace de ctre sistem.
Exemplu: Se dorete modificarea cantitii tuturor nregistrrilor care au primele 4
caractere din denumire bere cu dublul cantitii existente n baza de date.
Rezolvarea este:
Scope: All
For: SUBSTR(PROD.denumire,1 ,4)==bere
While Cmpul de modificat din fereastra Replace este CANTITATE
Cu ajutorul constructorului de expresii n spaiul din dreapta comutatorului With se
introduce sau se construiete expresia:
Prod.cantitate*2 dup care se acioneaz declanatorul Replace.
Acelai lucru se va realiza i n cazul n care se introduce n fereastra de comand
urmtoarea comand:
Replace cantitate with cantitate * 2 for substr(denumire,1,4) == bere - dup cum
vom vedea Ia studiul programrii n FoxProW.
1.4.5 tergerea datelor din bazele de date. Accesul Ia datele coinute n
bazele de date
n FoxPro exist dou tipuri de tergere:
1. O tergere logic prin care nregistrrile nu sunt terse efectiv (fizic) din bazele
de date, ci sunt marcate i sistemul le recunoate ca fiind terse.
2. O tegere efectiv (fizic) prin care nregistrrile nu mai exista n bazele de date,
(dup tegere).

Datorit faptului c tergerea logic marcheaz un indicator al nregistrrii i nu


terge efectiv nregistrarea din baza de date, exist posibilitatea revenirii la o
nregistrare nainte de tergerea efectiv.
De asemenea se poate realiza o tergere (logic) Ia nivel de cmpuri n sensul c se
poate stabili o list de cmpuri care pot fi accesate prin comenziile i functiile
FoxProW, restul de cmpuri fiind invizibile pentru utilizator.
Pe lng aceste moduri de tergere FoxProW mai permite selectarea unor
nregistrri n funcie de respectarea unor condiii dinainte stabilite (procedeu numit
filtrare) putnd fi eventual terse (logic) aceste nregistrri.
tergerea logic a nregistrrilor se realizeaz prin intermediul ferestrei Delete a
submeniulul Record. n aceast fereastr se specific nregistrrile care vor fi terse
prin clauzele Scope, For i While dup care se acioneaz declanatorul Delete.
Operaia este executat asupra bazei curente (baza de date deschis, n zona
activ).
tergerea efectiv poate fi fcut dup aceast operaie (care este o tergere
logic) dup care se recomand tergerea fizic, prin alegerea opiunii Pack din
submeniul Database. O dat terse fizic, nregistrrile nu mai pot fi refcute. (Totui,
dac sunt terse fizic nregistrri utile, poate fi refcut baza de date dinaintea
tegerii prin comenzi DOS deoarece se creaz o nou baz de date dar se pstreaz
un fiier cu aceeai denumire dar cu extensia .BAK). La comanda Pack sunt terse
fizic toate nnregistrrile marcate pentru tergere (terse logic) indiferent n cte
etape i cnd a fost fcut tergerea logic.
Rechemarea nregistrrilor terse logic anterior poate fi obinut astfel:
- se alege opiunea Recall din submeniul Record pentru deschiderea ferestrei
Recall;
- se specific apoi condiille de selecie a nregistrrilor ce urmeaz s fie
rechemate, cu ajutorul clauzelor Scope, For i While;
- se acioneaz declanatorul Recall.
Condiiile de accesare a cmpurilor bazei de date active se stabilete n felul
umtor:
1. Se deschide fereatra Setup prin alegerea acestei opiuni din submeniul
Database;
2. Se acioneaz declanatorul Fields deschizndu-se. n acest fel fereastra Field
Picker.
3. Din lista All Fields se selecteaz cmpurile active care vor fi transferate n lista
Selected Fields prin acionarea declanatorului Move.
4. Eliminarea din lista Selected Fields i trecerea cmpurilor napoi n lista All Fields
nseamn eliminarea cmpurilor respective din lista de cmpuri active (Selected
Fields) i se realizeaz prin actionarea declanatorului Remove.
5. Declanatoarele All i respectiv Remove All realizeaz mutarea tuturor cmpurilor
n lista activ (Selected Fields) respectiv eliminarea lor din aceasta (Remove All).
6. ncheierea operaiei i revenirea n fereastra Setup se realizeaz prin acionarea
declanatorului Ok care se nchide de asemenea prin acionarea declanatorului
OK.
Cel de al treilea tip de tergere / accesare a datelor, filtrarea nregistrrilor se
realizeaz asemntor doar c n fereastra Setup se acioneza declanatorul Filter
Data. Va fi pornit constructorul de expresii n vederea specificrii expresiei de
filtrare dup care se acionaz declanatorul Ok.
Deplasarea n nregistrrile bazei de date (n afar de deplasarea manual explicat
n fereastra Browse) se poate realiza prin schimbarea indicatorului de nregistrri al
bazei de date, prin schimbarea indicatorului nregistrarea devine egal cu cea a
numrului indicatorului.
Pentru deplasare este necesar s selectm opiunea Goto din submeniul Record n
acest fel deschizndu-se fereastra Goto n care:
- selectarea butonului radio Top determin pozitionarea indicatorului de nregistrare
pe prima nregistrare a bazei de date iar butonul radio Bottom deplaseaz

indicatorul de nregistrare pe ultima nregistrare a bazei de date.


- butonul radio Record este folosit pentru deplasarea pe o anumit nregistrare (n
unde n reprezint un ntreg care se introduce n cmpul de editare din dreapta
butonului Record, realiznd deplasarea pe prima n=1, a zecea n=10 sau a
cincizeci i aptea - n=57).
n aceeai fereastr se afl i butonul radio Skip care se utilizeaz pentru (deplasari
relative (deplasari lund n considerare poziia n care se afl indicatorul de
nregistrare n acel moment). Dac se selecteaz acest buton i se introduce 5 n
cmpul de editare alturat indicatorul de nregistrare avanseaz cu cinci
nregistrri). n acest caz o valoare pozitiv introdus n cmpul de editare indic
deplasarea spre sfritul fiierului a indicatorului de nregistrare iar o valoare
negativ indic o deplasare spre nceputul fiieruIui. Exemplu:
1. Deplasarea pe prima nregistrare Goto Top sau Goto 1
2. Deplasarea pe nregistrarea 111 - Goto 111
3. Deplasarea pe nnregistrarea 88 - Goto 88 sau Goto 8*11
4. Deplasarea pe ultima nregistrare - Goto Bottom
5. Deplasarea pe nregistrarea anterioar - Skip -1
6. Deplasarea cu trei nregistrri - Skip 3.
ntr-o baz de date se poate cere sistemului s caute o anumit nregistrare. n
acest caz indicatorul de nregistrare se poziioneaz pe nregistrarea respectiv. Prin
alegerea opiunii Locate din submeniul Record se deschide fereastra cu acelai
nume pentru folosirea acestei cutri. Condiiile de selectie a nregistrrilor (de
cutare) se precizeaza prin clauzele Scope, For i While, iar Ia selectarea
declanatorului Ok, indicatorul de nregistrare va fi poziionat pe prima nregistrare
care respect condiiile din aceste clauze. Dac se dorete cutarea n continuare
(n cazul n care exist mai multe nregistrari care respect aceste condiii) se va
folosi opiunea Continue a submeniului Record i indicatorul de nregistrare se va
poziiona pe urmtoarea nregistrare care respect condiiile impuse.
Exemplu: Sa se caute primele 4 nregistrri care au preul produsului mai mare
dect 2500 lei:
Locate
- Scope All
- For PROD.pret > 2500
- While
Continue
Continue
Continue
1.4.6 Organizarea i reorganizarea bazelor de date
Opernd cu cantiti mari de date, SGBD-urile moderne sunt prevzute cu faciliti
de ordonare dup criterii diverse folosind tehnici dintre cele mai moderne. n
FoxProW accesul fcndu-se Ia nivel de nregistrare, ordonarea bazelor de date va
nsemna stabilirea unei anumite ordini n care vor fi accesate nregistrarile din baze
de date. O baz de date poate fi ordonat dup un anumit criteriu dac fiecare
nregistrare a acesteia respect criteriul dat n raport cu nregistrrile anterioare i
posterioare. Acest criteriu poart numele de cheie de ordonare valoarea ei, n
mod normal, fiind diferita la fiecare nregistrare. n general ea conine cmpuri ale
bazei de date sau fragmente de cmpuri.
Bazele de date pot fi sortate sau indexate. Prin sortarea unei baze de date se
construiete o alt baz de date (cu un alt nume i extensia .dbf) dar n care
nregistrrile se afl n ordinea cerut de cheie. Ordonarea poate fi fcut cresctor
sau descresctor.
Prin indexarea unei baze de date se construiete un fiier asociat bazei de date care
stabilete ordinea nregistrarilor (aa cum cere cheia - numit fiier index) iar baza de
date rmne neschimbata.

Pentru sortarea bazelor de date se selecteaz opiunea Sort a submeniului


Database cnd este deschis o fereastr de dialog i din Iista ascuns From Table se
alege baza de date ce urmeaz a fi sortat.

Partea superioar a ferestrei este folosit Ia specificarea cheii de ordonare care n


acest caz se numete cheie de sortare. n stnga se gsete lista All Fields din care
se pot aloge cmpurile ce vor constitui cheia de sortare, jar n dreapta se afl lista
Sort Order, n care se vor introduce cmpurile selectate n cheie.
Cheia de sortare se stabilete astfel: se stabilete primul criteriu de sortare (deci se
stabilete ordinea cresctor sau descresctor i cmpul de sortare), deci se
alege unul din butoanele radio (ascending au descending) i se selecteaz primul
cmp de sortare din lista All fields i prin acionarea declanatorului Move se
adaug acest cmp n Sort Order.
n cazul n care cmpul selectat este de tip caracter se poate activa comutatorul
Ignore case pentru a face compararea cmpului independent de caracterele
majuscule sau minuscule.
Se stabilesc (n acelai mod) i celelalte cmpuri din cheia de sortare dup care se
trece la specificarea condiiilor de selectie a nregistrrilor prin intermediul opiunii
input a ferestrei prin comutatoarele Scope, For i While.
Numele noii baze de date (sortat) se poate indica n sectiunea Output. n acest
baz de date se pot selecta numai o parte a cmpurilor, ele se precizeaz n
fereastra deschis prin activarea comutatorulul Fields, apoi se poate aciona
decIanatorul Save As, pentru construirea bazei de date sortat cu salvarea
acestela, cu numele precizat.
Indexarea bazelor de date reprezint o metod performant de acces la negisrtrri,
ntr-o anumit ordine (dup o cheie de indexare). La sortare, baza de date este
copiat ntr-o alt baz de date deci se face o risip de spaiu de memorare, pe
cnd la indexare, deoarece se contruiete un alt fiier care conine numai cheia de
indexare i numrul nregistrrii, se poate accesa rapid orice nregistrare n ordinea
i se face n acelai timp economie de spaiu de memorare.

ntr-un fiier indexat indexul acioneaz ca un filtru asupra bazei de date,


nregistrrile neordonate fizic fiiind vzute logic n ordinea dorit.
Cheia de indexare se construiete fie alegnd cmpuri din baza de date din lista
Fields, fie cu ajutorul constructorului de expresii pornit Ia acionarea decIanatoruIui
Index Key. Tipul de indexare (cresctor sau descresctor) se indic prin intermediul
butoanelor radio AscendIng respectiv Descending.
Este posibil s existe mai multe nregistrri care s aib aceeai valoare pentru
cheia de indexare. Dac se acioneaz comutatorul Unique se va permite accesul
numai la prima nregistrare din acestea, restul valorilor fiind inaccesibile. Cnd acest
comutator este inactiv, se permite accesul la toate nregistrrile.
Se poate stabili un filtru pentru accesul la nregistrarile bazei de date. Filtrul const
dintr-o expresie logic ce permite accesul Ia nregistrare doar dac evaluat, ia
valoarea .T. n caz contrar nregistrrile fiind inaccesibile.
Expresia index se introduce n zona de editare din dreapta decIanatoruIui Index
Filter, sau se acioneaz acest decIanator cnd se pornete constructorul de
expresii.
Numele fiierului index se specific n seciunea Output File din fereastr. Tipul
fiierului pate fi:
- Fiier index simplu (se acioneaz butonul radio Single Index File);
- Fiier index compus (cnd se selecteaz butonul Compound Index File
CDX);
Cnd este creat un fiier index compus, tipul acestui fiier, structural sau
nestructural este dat de starea comutatorului Structural index Structure (cnd
acesta este activat se creeaz un fiier index compus structural). Dac se activeaz
comutatorul Compact Index Structure se va crea un fiier compact (aceast opiune
are sens numai n cazul fiierelor index simple - fiierele index compuse sunt
ntotdeauna compacte).
Numele fierului index i directorul n care va fi acesta depus se introduc fie prin
intermediuI ferestrei Save As, fie manual prin introducerea cii i numelui fiierului
n regiunea de editare din dreapta decIanatorului.
Pentru crearea unui fiier index se parcurg urmtoarele etape:
- se stabilete tipul fiierului idex (simplu sau compus i structural sau nestructural,
compact sau necompact)
- se stabiIete numele fierului index i locul unde acesta va fi depozitat pe disk;
- se stabilete cheia de indexare;
- n cazul fiierelor index compuse se introduce n cmpul de editare Tag Name,
denumirea etichetei index ce se va crea;
- se specific tipul indexrii (cresctoare sau descresctoare, unic sau multipl) ct

i filtrul index;
- n final se acioneaz declanatorul Ok.
Crearea unui fiier index pentru o baz de date nu presupune automat c acest
fiier va fi deschis cnd baza de date este deschis n afar de fiierele compuse
structuraIe care sunt deschise automat la dechiderea bazelor de date. n toate
celelalte cazuri la deschiderea bazei de date este necesar s se deschid fiierele
index (prin selectatea opiunii Open a submoniului File i alegnd din fereastra Open
ce se deschide, din lista ascuns List Files of Type tipul fiierului care este Index. Cu
ajutorul listelor ascunse Drive i Directory se stabilete directorul de unde se preia
fiierul index.
Din lista aflat n partea stng sus a ferestrei se alege fiierul index care se va
deschide i apoi se acionez declanatorul Open.
Se repet operaiile pentru toate fiierele index asociate bazei de date.
Din mai multe fiiere index deschise doar unul d ordinea de accesare a
nregistrrilor, iar dac acesta este compus, o singur etichet a fiierului index
compus d ordinea de sortare.
Pentru a stabili fiieruI index activ sau eticheta fiierului index compus activ se
folosete opiunea Setup a submeniului Database. n lista Indexes sunt afiate toate
fiirele index simple i etichetele fiierelor index compuse deschise simultan. Pentru
a aduce un nou element se acioneaza declanatorul Add i se alege fiieruI
respectiv n fereastra deschis. DecIanatorul Modify se folosete pentru a modifica
cheia de indexare a unui fiier index. nchiderea unui fiier index se face prin
acionarea decIanatoruIui Remove dup selectarea acestuia din lista Indexes a
fiierului index deschis.
Acionarea declanatorului No Order face ca accesarea nregistrrilor bazei de date
s se fac n ordinea fizic a bazei de date (fr index).
Stabilirea fiieruIui care va da ordinea de accesare se face prin selectarea
declanatorului Set Order. Fereastra se prsete implicit prin acionarea
declanatorului Ok.
O dat cu nchiderea bazei de date se nchid automat i toi indexii asociai
acesteia.
Atunci cnd se actualizeaz (modific, adaug sau se terg nregistrri) ntr-o baz
de date sunt actualizai i toi indexii deschii n acel moment. Dar este posibil ca s
mai rmn indexi ai bazei de date care nu au fost deschii (din greeal sau se
ntmpl astfel de lucruri n cazul unor incidente - de exemplu o pan de curent) i
aceti indexi nu sunt actualizai ei pastrnd ordinea veche (neactualizat) a bazei
de date. Pentru rezolvarea acestei probleme se poate folosi opiunea Reindex a
submeniului Databases care reface indexul punnd n acord indexul cu coninutul
actual al bazei de date.
O facilitate important a folosirii indexrii bazelor de date este accesul deosebit de
rapid (practic instantaneu). Cutrile n bazele de date indexate se fac pe baza cheii
de indexare prin intermediul opiunii Seek din submeniul Record. La alegerea
acestei opiuni se deschide fereastra constructorului de expresii cu ajutorul cruia
se caut o anumit nregistrare. Valoarea cutata se introduce n cmpul de editare
(Value to seek). nainte de aceasta se alege un cmp din lista Fields care este
cmpul de indexare al bazei de date respective i valoarea careia se va introduce n
cmpul de cutare (valoarea codului). Alegnd butonul radio Skip din submeniul
Record, opiunea Goto se parcurg urmtoarele nregistrri cu aceei valoare a cheii
de indexare.
Exemplu: pentru baza de date Prod s se listeze produsele n ordinea cresctoare a
codurilor produselor i n ordinea cresctoare a cantitilor. Se va proceda astel
- se deschide baza de date Prod;
- se indexeaz aceast baz de date (opiunea New submeniul File i se alege
butonul Index din fereastra deschis);
- se acioneaz decIanatorul implicit New pe ecran fiind deschis fereastra de
creare a fiierelor index;

- se va crea un fiier index compus, structural, selectnd butonul radio Compound


Index File (CDX) i acionnd comutatorul Structural index Structure (dac ele nu
sunt deja activate);
- se specific cheia de indexare, care n acest caz va fi format doar din cmpuI
COD, ce se selecteaz din lista Fields;
- se introduce n cmpul Tag Name numele primei etichete index: COD;
- se specific tipul indexrii - cresctoare - acionndu-se butonul radio Ascending i
multipl (comutatorul Unique dezactivat) prima eticheta index fiind creat;
- se va aciona declanatorul Add to Index List pentru a aduga indexul nou la lista
Index Key;
- vom crea cea de a doua etichet pe care o vom numi cantitate, numele etichetei l
introducem n cmpul Tag Name;
- vom preciza cea de a doua cheie de indexare alegnd cmpul CANTITATE din lista
Fields, cea de a doua etichet, fiind creat;
- acionm declanatorul Add to index List pentru a adauga cel de al doilea index
listei Index Key;
- acum se acionez declanatorul Ok pentru nchiderea ferestrei i crearea fiierului
index cu cele dou etichete specificate;
- pentru listarea bazei de date se va specifica eticheta index activ (COD)
deschizndu-se fereastra Setup prin alegerea acestei opiuni din submeniul
Database;
- n fereastr se alege indexul PROD.COD din lista Indexes i se acionez
declanatorul Set Order;
- se nchide fereastra i se deschide fereastra Browse pentru baza de date activ;
- pentru o listare simpl se poate introduce n fereastra de comenzi instruciunea list
iar dac se dorete o listare mai complex se poate folosi generatorul de filtre;
- la fel se procedeaz pentru listarea bazei de date n ordinea cresctoare a
cantitii materialelor.
Cu bazele de date se mai pot executa o serie de operaii care vor fi pe larg expuse
n partea de programare FoxProW. Pn atunci v spunem c se pot efectua calcuIe
statistice asupra datelor din bazele de date (medii aritmetice, nsumarea
cmpurilor, aflarea minimului i a maximului, numrarea nregistrrilor, etc), se pot
exporta bazele de date pentru a fi prelucrate n alte sisteme de prelucrare (EXCEL,
fiiere DIF n care coloanele devin cmpuri iar rndurile nregistrari, SYLK - Symbolik
Link - n care liniile devin nregistrri iar coloanele devin cmpuri, SDF, fiiere text n
care nregistrrile au a lungime fixa i se termin prin sfrit de linie (CR+LF) i o
mulime de alte formate.
De asemenea ntre bazele de date se pot construi relaii n sensul c fenomenele
complexe din viat nu se pot cuprinde ntr-o singur baz de date i atunci sunt
necesare mai multe baze de date, dar care sunt dependente unele de altele. Astfel
dac hotrm s cream o baz de date cuprinznd copiii dintr-o gradini ar fi
posibil ca Ia un moment dat s ne intereseze i prinii lor. Astfel pentru fiecare
copil vom crea ntr-o alt baz de date cte dou nregistrri pentru fiecare din cei
doi prini. Va trebui s cream o metod de accesare rapid a nregistrrilor
prinilor pentru fiecare nregistrare din baza de date a copiilor din grdin.
O reaie ntre dou baze de date presupune construirea a cel puin dou baze de
date din care una s constitue n baz de date printe iar cealalt n baza de date
copil, n cazul nostru baza de date parinte este baza de date privitoare la copiii
din grdin (pentru c ea este baza de date principal privind studiul nostru care
se refer la copii) iar baza de data copil este baza de date privitoare Ia prini
(pentru c ei ne intereseaz n secundar, i pentru c de Ia copii plecm pentru a
afla date despre prinii lor). De asemenea bazele de date trebuie s aibe un cmp
comun un cmp pe baza cruia se va construi reIaia i acest cmp comun poate sa
fie de exemplu numele de familie (care va fi acelai pentru copil i prini) i n plus
baza de date copil trebuie s fie indexat dup campul comun. n acest fel relaia
este constituit i n momentul n care se acceseaz o nregistrare din baza de date

printe avem acces la nregistrrile corespunztoare din baza de date copil i


putem citi i vizualiza toate datele cospunztoare.
Se pot construi relaii de mai multe tipuri:
1. - reiaii 1 1 sunt relaii n care fiecrei nregistrari printe i corespunde o
singur nregistrare copil. Exemplu: o relaie ntre o baz de date a profesorilor
dintr-o coal i o baz de date a domiciliului lor este n general biunivoc i deci
poate avea
acest tip;
2. - relaii tip unu - mai multe - este o relaie n care fiecare nregistrare din baza de
date printe este pus n reIaie cu mai mute nregistrri din baza de date copil.
Exemplu: Se construiete o baz de date pentru facturile emise i o alta baza de
date pentru incasarea acestor facturi. Dar ncasrile pot fi i pariale deci pot exista
mai multe incasri Ia o factur emis.
3. - relaii tip mai multe - mai multe - este o relaie amintit n exemplul nostru
(copil-prini) cnd pot fi mai muli copii n gradinia (frai) care s aib aceeai
prini care pot fi Ia rnduI lor doi sau unul singur.
Relaiile se pot construi cu ajutorul ferestrei View din submeniul Window n felul
urmtor:
- se deschid bazele de date fiecare n alt zon de lucru;
- se selecteaz baza de date printe (deplasarea cursorului n lista Work Areas pe
zona de lucru n care este deschis tabelul ales ca printe i se acioneaz tasta
spaiu;
- se acioneaz declanatorul Relations n lista din partea dreapt aparnd tabelul
printe de Ia care pleac o sageat spre viitorul tabel copil;
- se selecteaz tabelul copil n lista Work Areas;
- se deschide constructorul de expresii pentru specificarea cheii relaiei dup
introducerea creia se acioneaz declanatorul Ok;
- se creaz n mod analog restul relaiilor (dac este cazul).
Pentru a crea o relaie de tipul una la mai multe se creaz aa cum s-a artat mai
sus relaia (una Ia una) i ea se transform ntr-una tip una Ia mai multe acionnd
decIanatorul 1-To-Many dup selectarea tabelului printe din lista Work Areas cnd
este deschis fereastra 1-To-Many ce conine urmatorele elemente:
Child Aliases list continnd bazele de date cu care se afl n relaie baza de date
printe selectat;
Selected Aliases list ce conne bazele de date selectate care identific relaiile ce
vor fi transformate n una la mai multe; se va aplica aceast transformare pentru
toate eelaiile dintre tabelul printe curent i tabelele copil selectate;
Move - trece baza de date din Child Aliases n Selected Aliases;
All - acelai efect dar pentru toate bazele de date din lista Child Aliases;
Remove - aciune opus lui Move;
Remove All - aciune opus lui All;
Ok - termin lucrul realiznd transformarea;
Cancel - renun Ia transformare.
o 6 septembrie 2008
o 0 comentarii
o nici o evaluare
Capitolul 2.
2. TIPURI DE DATE
Un tip de date reprezint o caracteristic a datelor prin care se stabilete ce operaii
se pot executa asupra lor, modul de codificare n memoria calculatorului,
semnificaia acestor date. n FoxProW exist urmtoarele tipuri de date:
1. Tipul logic;
2. Tipul numeric;
3. Tipul ir de caractere;
4. Tipul data calendaristic;

5. AIte tipuri ce nu vor fi trate aici.


Cu privire la tipurile de date se va preciza n continuare modul de specificare a
datelor de tipul respectiv, operatorii ce se aplic asupra acestora i comenzile i
funciiIe referitoare la datele tipului respectiv.
Ele se pot gsi sub forma constantelor, a variabilelor i a cmpurilor din bazele de
date.
Constantele sunt elemente ce nu-i modific forma sau dimensiuniIe n timpul unui
program. Ele rmn n tot timpul programului egale cu ele nsele aa cum Ie arat i
numele. De exemplu: 2, 2.5, 114, 'FOX, fox, {02103198} ,.t. etc.
1. iruri de caractere - se specific ntre apostroafe ghilimele sau paranteze drepte.
Maxim 254 caractere. Exemplu Foxpro
2. Tipul numeric. Maxim 18 poziii numerice cu zecimale sau ntregi.
Exemplu: Intregi 2, -5 etc, fracii 1/4, 2.5, etc,numere iraionale etc.
3. Tipul logic .T. sau .t. pentru TRUE
.F. sau .f. pentru FALSE
4. Tipul dat calendaristic {LL/ZZ/AA}. Se pot face operaii cu acest tip de dat dar
trebuie avut n vedere c nu este un tip numeric ci un tip special.
Exemplu {02/05/98}
2.1 Tipul logic
Este un tip de dat caracteristic ce nu poate lua dect dou valori: adevrat (n
englez True) sau fals (neadevrat, n englez False).
Pentru a specifica cele dou valori logice; adevarat i fals se folosesc (construciile
urmtoare: .T. sau .t. pentru adevarat i .F. sau .f. pentru fals). O expresie de tip
logic reprezint o combinaie de operanzi i operatori construit dup anumite
reguli sintactice a carei evaluare va avea ca rezultat un rezultat logic (adevrat sau
fals). Operanzii ce intr n componena expresiilor Iogice sunt de dou tipuri:
cmpuri de tip logic ale unei baze de date sau variabile de tip logic, funcii care
returneaz valori logice sau alte expresii logice.
Operatorii logici, n ordinea prioritii de evaluare, sunt sintetizai n urmtorul
tabel:
Operator________Semnificaie
--------------------------------------------------- ---------------------(,)_____________grupeaz expresiile
NOT___________negatie logic
AND___________i logic
OR____________sau logic
====================================
Aceti operatori i operaiile logice sunt explicate i studiate pe larg n matematica
boolean. Exemple de operaii logice:
? 1<4.and.5<3 afieaz .F. (1 <4 dar 5 nu este mai mic dect 3 deci relaia datorit
operatorului i logic este evaluat ca fals);
? 6<3.OR.4*2<9 afieaz .T. (6 nu este mai mic dect 3 dar 4*2=8<9 deci relaia
datorit oparatorului sau este evaluat ca adevrat).
2.2 Tipul numeric
O mare parte a datelor de prelucrat o reprezint de fapt numerele.
Dei FoxProW-ul este destinat prelucrrii bazelor de date i nu numerelor totui tipul
numeric este implementat astfel nct n Fox se pot face majontatea operaiilor
matematice ntlnite n practic. De asemenea FoxProW-ul este prevzut cu o serie
de funcii matematice prin care se pot calcula funcii matematice elementare cum
ar fi exponeniala, logaritmul, funciile trigonometrice etc.
Operanzii numerici ce intervin n expresii pot fi cmpuri numerice ale bazelor de
date, constante i variabile numerice i funcii care returneaz valori numerice.
Operatorii ce se aplic unor operanzi numerici avnd ca rezultat valori numerice

sunt prezentate n tabelul de mai jos:


Operator__________Semnificaie
--------------------------------------------------- -----------------(,)_______________Grupeaz expresiile
** , ^_____________ridicare la putere
*, / , %___________nmulire, imprtire, modulo (rest mprtire)
+, -______________adunare, scdere
===================================
ntre dou expresii numerice se pot aplica operatori relaionali, operaiile respective
avnd ca rezultat expresii logice:
Funciile matematice sunt funcii implementate n FoxProW care au ca rezultat valori
matematice.
ABS (nr) - returneaz valoarea absolut a lui nr.
Exemplu a=abs(nr) - daca nr este -5.2 a = 5.2 sau
?abs(-5.2) afieaz 5.2
SQRT (nr) - returneaz radical din nr.
Exemplu a=sqrt(nr) - dac nr este 9, a=3 sau ?sqrt(9) afieaz 3
INT (nr) - returneaz partea ntreag a lui nr.
Exemplu - dac se tasteaz ?int(3.14) atunci calculatorul va afia 3, sau dac se
tasteaz ?int(1,2), se afieaz 1.
ROUND (nr,nrz) - retumeaz nr rotunjit la nrz zecimale
Exemplu - ?round(5.243567,2) afieaz 5.24
Operator_______Semnificaie
--------------------------------------------------- ----------------->_____________mai mare dect
<_____________mai mic dect
=_____________egal cu
<>, #, !=_______diferit de (oricare din semne)
<=____________mai mic sau egal cu
>=:___________mai mare sau egai cu
==================================
MOD (nr1,nr2) - returneaz restul mpririi ntregi a lui nr1 i nr2.
Exemplu - MOD(5,3) afieaz 2 (afarea se face cu calcul rotunjit).
RAND () - genereaz numere aleatoare ntre 0 i 1
SIGN(expn) retumeaz:
+1 dac expn este pozitiva, -1 daca expn este negativa 0 dac expn este 0.
Exemplu; ? sign(-40) afieaz -1
CEILING (expn) - returneaz cel mai apropiat ntreg mai mare sau egal cu expn.
Exemplu: ? ceiling(8.32) afieaz 9
FLOOR(expn) - returneaz cel mai apropiat ntreg mai mic sau egal cu expn.
Exemplu: ? floor{-8,32) afieaz -9
Clauza SET DECIMALS stabilete numrul de zecimale cu care vor fi afiate cifrele (i
nu numrul de zecimale n calcule, care rmne acelai).
Exemplu; SET DECIMAL TO 5
?2/3 afieaz 1,66667
EXP (expn) - returneaz valoarea eexpn
LOG (expn) - retuneaeaz logaritmul natural din expn
LOG10(expn) - idem logaritmul zecimal
Exemplu:?log10(1000) returneaz 3.
n FoxProW s-au introdus i funciile trigonometrice astfel:
Pl() este o constant a matematicii (egal cu 3,141592). Ea folosete la conversia
unor unghiuri din radiani n grade hexagesimale sau invers.
Xrad = 2*pi/360 hexagesimale
DTOR(expn) - realizeaz conversia din grade n radiani iar conversia invers se

realizeaz prin funcia RTOD. Ele au ca argumente grade hexagesimale (dtor) i


radiani (rtod).
Exemplu: ? dtor (pi()*45) returneaz 0.50
?rtod(pi()/4) - returneaz 45.00
SIN(expn) - returneaz sinusul (functie trigonometric)
COS(expn) - returneaz cosinusul
TAN(expn) - retumeaz tangenta
Exemplu: ? SIN(pi()/2) afieaz 1.00
ASIN(expn) - funcia arcsinus
ACOS(expn) funcia arccosinus
ATAN(expn) functia arctangent - n care expresia expn trebuie s se gseasc n
intervalul -pi()/2 i pi()/2 (-1.57079 i 1.57079).
Exemplu: ?asin(1) afiaz1,57
Functia ATN2(expn1,expn2) este o funcie a crei argumente sunt abscisa i
repectiv ordonata unui unghi care este returnat de funcie, ca n figura alturat

Functii referitoare la calcule financiare i statistice:


PAYMENT(expn1,expn2,expn3) returneaz valoarea fiecrei pli ce trebuie
efectuat n fiecare perioad ntr-un mprumut cu dobnd fix. Expn1 reprezint
valoarea mprumutului, expn2 - este rata dobnzii (la nivelul unei perioade) iar
expn3 reprezint numrul de pli de returnat pentru mprumutul respectiv. Funcia
returneaz valoarea pltii n aceeai moned cu mprumutul.
Exemplu: ? payment(1000000,. 10,12) afieaz 146763.32. Acesta nseamn c
valoarea de returnat lunar pentru un mprumut fcut pentru 1000000 cu o dobnd
10% pe timp de un an este de 146763,32
PV (expn1,expn2,expn3) returneaz valoarea prezent a unei investiii. Aceasta se
calculeaz ca o serie de pli periodice egale la o rat a dobnzii constant. Expn1
este valoarea unei pli periodice, expn2 este rata dobnzii iar expn3 reprezint
numrul de plti.
Exemplu: ? pv( 100000,.12,6) afieaz 411140,73 ceea ce nseamn c valoarea
investiiei este de 411140.73 pentru o investiie fcut timp de 6 luni (de exemplu
plata fiind fcut o dat pe lun) la o dobnd de 12%,
? FV (expn1,expn2,expn3) returneaz valoarea viitoare a unei investiii, calculat ca
o sum de pli periodice constante cu o dobnd fix. Expn1 reprezint valoarea
unei pli, expn2 este rata dobnzii iar expn3 reprezint numrul de pli periodice.
Exemplu: ? fv(100000,.12,6) afieaz 811518.90 ceea ce nseamn c valoarea
investiiei viitoare (fcut peste 6 luni) echivalent cu o investiie fcut cu cte
100000 ncepnd de acum n fiecare lun cu o dobnd de 12% anual este de
811518.90.
2.3 Tipul ir de caractere
Un ir de caractere reprezint o mulime ordonat de caractere care se trateaz ca
un tot unitar. Ordinea fiind esenial n irurile de caractere, fiecrui caracter i se
poate asocia un numr (primul 1, al doilea 2 amd). Numrul caracterelor reprezint
lungimea irului. Un subir al unui ir este dat de o poriune din ir, ncepnd cu o

poziie i de o lungime dat. Sunt admise ca delimitatori ai unui ir apostroafele,


ghilimelele sau parantezele ptrate, dar ntotdeauna delimitatorii trebuie s fie
identici. Dac se dorete includerea unui apostrof ntr-un ir se vor folosi ca
delimitatori ai irului ghilimelele sau parantezele ptrate.
O expresie ir de caractere reprezint o combinaie de operanzi i operatori,
realizat dup anumite reguli, care are ca evaluare un rezultat ir de caractere.
Operanzii ce intr n componena acestor tipuri de expresii sunt:
cmpuri de tip ir de caractere din bazele de date;
variabile i constante tip ir de caractere;
funcii ce retumeaz iruri de caractere.
Asupra irurilor de caractere se poate aciona cu operatori de concatenare i de
comparare sau relaionali.
Operatorii de concatenare sunt + i -. Primul realizeaz alipirea celui de al
doilea operand la primul.
Exemplu: Fox + ProW are ca rezultat irul FoxProW. Cel de al doilea (-) este
asemntor cu primul cu diferena c spaiile de la sfritul primului ir sunt trecute
la sfritul celui de al doilea ir. Operatorii relaionali sunt prezentai n tabelui de
mai jos:
operator_________Relaie
--------------------------------------------------- -------$_________________inclus n
<_________________mai mic dect
>_________________mai mare dect
<>, #, !=___________diferit de
<=________________mai mic sau egal
>=:________________mai mare sau egal
==_________________identic
=============================
Operatorul $ returneaz .T. dac primul ir este inclus n cel de al doilea, altfel
returneaz fals.
Exemplu var= 'calcul' $ 'calculator' - var ia valoarea adevrat.
Compararea a dou iruri de caractere se face astfel: Se compar primul caracter al
celor dou iruri. Dac ele sunt identice se continu compararea cu cel de al doilea
caracter. Dac nu atunci sunt comparate codurile ascii i cel mai mare d caracterul
irului (aparine irului mai mare),
Exemplu: 'Fox' < 'Pro' pentru c 'F' are codul ascii < 'P'
Compararea a dou iruri este influenat de setarea SET EXACT. Dac SET EXACT
este ON dou iruri sunt egale dac ele corespund caracter cu caracter caracterele
spatiu de la sfrit fiind ignorate. Dac SET EXACT este OFF (opiune implicit) dou
iruri identice pe lungimea celui mai scurt sunt considerate egale.
Pentru comutarea ntre cele dou variante se folosete comanda:
SET EXACT ON|OFF
Funcii referitoare la irurile de caractere:
LEN (ir) - returneaz lungimea irului n numr caractere
Exemplu - ?len('FOXPRO') afieaz 6.
SUBSTR (ir,pozinc,lung) - retumeaz un alt ir de lungime = lung, ncepnd cu
pozinc din ir.
Exemplu - ?substr('foxpro',2,3) afieaz sirul 'oxp'
UPPER (ir) - convertete un ir n majuscule
Exemplu - ?upper('foxpro') afieaz irul 'FOXPRO'
LOWER (ir) - idem minuscule
Exemplu - ?lower('FoXpro') afieaz irul 'foxpro'
PROPER (ir) - idem n care primul caracter este majuscul iar urmtoarele sunt
minuscule
Exemplu - ?proper('ionescu') afieaz irul 'lonescu'

REPLICATE (ir,nr) - repet un ir de nr de ori


Exemplu - ?repl('!',10) afieaz iru! '!!!!!!!!!!'
LEFT (ir,nr) - extrage primele nr caractere stnga din ir
Exemplu - ?left('foxpro2,3) afieaz irul 'fox' ,
RIGHT (ir,nr) - idem ultimele nr caractere
Exemplu - ?right('foxpro2',3) afieaz irul 'ro2'
CHR (expn) - returneaz caracterul ascii corespunztor codului numeric expn (expn
trebuie s fie cuprins ntre 0 i 255).
Exemplu:?chr(65) afieaz A
ASC (expc) - retumeaz condul ascii al primului caracter al irului expc. Exemplu; ?
ASC('A') afieaz 65
CHR i ASC() sunt funcii inverse.
ALLTRIM(expc) - elimin spaiile de la nceputul i sfritu! irului
LTRIM(expc) - elimin spaiile din stnga irului
RTRIM(expc) - elimin spaiile de la sfritui irului (dreapta).
Exemplu: ? altrim ' casa ' afieaz irul 'casa'
PADC(expr,expnr,expc) - adaug un numr expn de caractere expc la dreapta i la
stnga irului expr (centrat).
PADL(expr,expn[,expc) - adaug un numr expn de caractere expc la stnga irului
expr.
PADR(expr,expn[,expc]) - adaug un numr expn de caractere expc la dreapta
irului expr.
Exemplu: ? PADL('Pagina 1',40/-') afieaz:
Pagina 1
Funciile AT(), ATC(), RAT() caut un subir ntr-un ir dat. Funciile au sintaxa de
forma:
AT(expc1 ,expc2 ,expn)
ATC(expc1,expc2 [,expn])
RAT(expc1,expc2 [,expn])
Dac cutarea se ncheie cu succes, funciile returneaz poziia subirului n cadrul
irului, altfel returneaz 0. Expresia expn este opional i dac ea se specific,
indic a cta apariie a subirului de cutat ncheie actiunea de cutare. Cu alte
cuvinte se caut a expn-a apariie a lui expnc1 n expnc2.
La funciile AT() i ATC() cutarea ncepe cu primul caracter i continu cu
urmtoarele. La RAT() cutarea ncepe cu ultimul caracter continund spre nceputul
irului.
AT() este sensibil la tipul caracterelor, iar ATC() nu face distincie ntre caracterele
mici i majuscule.
Exemplu: ? AT('nr,', 'Strada George Cobuc,nr.63-65') afieaz 22
Funciile ATLINE(), ATCLINE(), RATLINE() caut subirul expc1 n irul expc2
returnnd n caz de reuit numrul liniei n care a fost gsit, iar n caz de nereuit
0 (pentru iruri continuate pe mai multe linii). Sintaxa acestor funcii este:
ATLINE(expc1,expc2)
ATCLINE(expc1,expc2)
RATLlNE(expc1,expc2)
Funcia OCCURS() caut de asemenea un subir ntr-un ir dar ea retumeaz
numrul de apariii al subirului n ir. Ea are sintaxa:
OCCURS(expn1,expn2)
Exemplu: ? OCUURS ('a',' acasa la mine') afieaz 3
ISALPHA(expc) returneaz adevrat dac irul ncepe cu un caracter alfabetic altfel
ea va returna .F.
ISDIGIT(expc) returneaz .T. dac irul ncepe cu o cifr.
ISLOWER(expc) retumeaz .T. dac irul ncepe cu o liter mic.
ISUPPER(expc) retumeaz .T. dac irul ncepe cu o liter mare.
Funciile au sintaxa:

ISALPHA(expc)
ISDIGIT(expc)
ISLOWER(expc)
ISUPPER(expc) unde expc este irul de caractere testat.
CHTRAN(expd,expc2,expc3) nlocuiete n expc1 caracterele care sunt prezente n
expc2 cu caracterele prezente n expc3. Transformarea se realizeaz astfel:
se ia primul caracter din expd i dac exist n expc2 se nlocuiete cu caracterul de
pe aceei poziie n expc3. Dac nu, atunci el (primul caracter expd) se introduce n
irul final, Apoi se continu cu al doilea caracter amd.
Exemplu: ? CHTRAN ('compuse','mpse','nfz') afieaz confuz
STRTRAN(expc1,expc2 [,expc3] [,expn1] [,expn2] realizeaz nlocuirea unui grup de
caractere (expc2) cu un alt grup de caractere n care:
expd - irul de baz, n care se fac nlocuirile
expc2 - irul ce va fi nlocuit cu expc3
expc3 - irul cu care se fac nlocuirile. Dac lipsete se consider irul nul (se terg
caracterele expc2)
expn1 - dac exist, specific de la a cta apariie a lui expc2 n expd s se nceap
nlocuirile. Dac lipsete se consider 1.
expn2 - specific numrul de nlocuiri ce se efectueaz. Dac lipsete se vor nlocui
toate subirurile gsite.
Exemplu: ? STRTRAN('calculator personal' , 'ers' , 'rofesi' ,1,1) afieaz calculator
profesional
STUFF(expc1,expn1,expn2,expc2) Este o funcie asemntoare care nlocuiete ntrun ir (expc1) ncepnd cu o anumit poziie indicat de expn1 un numr de
caractere (expn2) un ir de caractere (expc2).
Dac expn2 este 0, are loc inserarea lui expc2 ncepnd de la poziia expn1. Dac
expc2 este vid, se obine tergerea subirului specificat din irul de baz.
Exemplu: ? STUFF ('pala',3,0,'rale') afiaz paralela
SYS(15,expc1,expc2) transform un ir de caractere (expc2) dup o tabel de
transformare(expc1).
Transformarea se realizeaz astfel: se calculeaz codul ascii al primului caracter de
transformat (din expc2) dup care se preia din expc1 caracterul de pe poziia egal
cu acest cod ascii i se realizeaz nlocuirea. Dac pe poziia calculat n expc1 nu
se gsete nici un caracter (irul fiind mai scurt) nu are loc nici o transformare.
Exemplu: ? SYS(15,replicate('-',96+'e'),'masa') afieaz mese
LlKE(expc1 ,expc2) compar cele dou expresii caracter astfel: expc1 este modelul
n care trebuie s se ncadreze expc2 returnnd .T. n caz de potrivire. n model
(expc1) este permis folosirea caracterelor "*" i "?" cu semnificaia "orice grup de
caractere pentru * i "orice caracter" pentru ?. Folosirea lor este asemnatoare cu
cea din DOS.
Cutarea este influenat de clauza SET COMPATIBLE cu sintaxa: SET COMPATIBLE
ON|OFF
Dac set compatible este ON, nainte de cutare se nltur toate spaiile din cele
dou iruri (dac nu atunci ele nu sunt nlturate).
Exemplu: ? LIKE ('*TER','COMPUTER') afiaz :T.
2.4 Tipul dat calendaristic
Expresiile de tip dat caledaristic pot s conin:
- cmpuri dat ale unor baze de date
- variabile i constante tip dat calendaristic
- funcii cu rezultat dat calendaristic
O constant tip dat calendaristic precizeaz ziua, luna i anul (cnd a avult loc un
eveniment de exemplu). Cele trei elemente ate datei cuprind cte dou caractere i
sunt delimitate prin delimitatori care pot fi".","/", sau"-".

FoxProW trateaz datele invalide (exemplu {30-02-98} ca date vide adic { - - } sau
{ }). Constantele de acest tip sunt reprezentate n calculator ca numere
reprezentnd zile deci la o constant sau variabil tip dat se pot aduna cifre sau se
pot scdea cifre dac ele au semnificaia adunrii sau scderii unui numr de zile
calendaristice.
Formatul de afiare al datelor calendaristice poate fi modificat. El este controlat prin
comanda SET DATE cu sintaxa:
SET DATE [TO] AMERICAN | ANSI | BRITISH | FRENCH |
GERMAN | ITALIAN | JAPAN | USA | MDY l DMY | YMD
Tabelul care urmeaz sintetizeaz aciunea comenzii SET DATE (implicit data este
afiat cu formatul AMERICAN).
Tipul datei__________Formatul
-----------------------------------------------American,MDY_______ll/zz/aa
ANSI_______________yy.ll.aa
British,French,DMY___zz/ll/aa
German_____________zz.ll.aa
Italian_______________zz-ll-aa
Japan.YMD__________aa/ll/zz
USA________________ll-zz-aa
=======================
n specificarea anului se pot folosi dou cifre, cnd se presupune c se face referire
la sec. XX (primele cifre sunt 19) sau se specific toate cele patru cifre ale anului.
Acest lucru se realizeaz cu comanda:
SET CENTURY ONIOFF (ON = 2 cifre pentru an) Delimitatorul se poate specifica prin
comanda SET MARK TO '.'
DOW(expd) returneaz ziua din cadrul sptmnii n care se gsete data expd ca
un numr (1=luni, 2=marti etc).
CDOW(expd) returneaz ziua din cadrul sptmnii dar ca ir de caractere (Sunday,
Monday,... etc)
DATE() returneaz data calendaristric curent
DAY(expd) returneaz numrul egal cu ziua calendaristic a datei (din cadrul lunii i
indiferent de an).
Exemplu: ? DAY(DATE()) returneaz 17 n data de 17.12.98
MONTH(expd) returneaz luna reprezentat prin expd (numeric) .
CMONTH(expd) returneaz o expresie caracter a lunii respective.
Exemplu: ? month(date()) afieaz 12 n data de 17.12.1998
? cmonth(date()) afieaz december
GOMONTH(expd,expn) returneaz o dat calendaristic plecnd de la expd la care
se adun algebric expn reprezentnd un mumr de luni.
YEAR(expd) izolez anul ca valoare numeric.
Exemplu: ?year(date+365) afieaz 1999 n data de 17.12.1998
n FoxProW exist o serie de funcii pentru controlul timpului.
TIME([expn) returneaz timpul curent ca o expresie caracter sub forma:
HH:MM:SS.ZZ
Cnd expn este prezent se returneaz i ZZ (sutimile de secund)
(ora,minute,secunde). Rezolutia maxim este de 1/18 secunde.
SECONDS() returneaz un numr reprezentnd milisecundele trecute de la ora 0.
Exemplu: ? seconds() afiez de exemplu 29683.345
SYS(2) msoar timpul n secunde trecut de la ora 0 (rezultat n secunde ntregi).
Se poate folosi comanda SET CLOCK pentru a menine pe ecran afiarea timpului.
Comanda are dou forme:
SET CLOCK ON OFF
SET CLOCK TO[rnd,col]
Cu SET CLOCK ON se face ca ceasul s rmn pe ecran.

Cu set clock to rind,col se face ca el s apar n pozitia rnd,col a ecranului, iar cu


set clock to se revine la afiarea implicit (n poziia 0,60 adic n poziia stnga
sus).
Formatul de afiare al orei este HH:MM:SS xx unde HH reprezint ora, MM reprezinf
minutele, SS reprezint secundele, xx reprezint am (antemeridian - diminea sau
pm postmeridian adic dup amiaza).
Cu SET HOURS TO 12|24 se poate modifica forma de afiare de la 12 ore la 24 (fr
am i pm) sau invers.
2.5 Alte tipuri de date
n FoxProW exist i alte tipuri de date. Asupra acestora se va reveni deoarece
deocamdat nu exist cunotinele necesare pentru tratarea lor.
Tipul memo i tipul general sunt dou tipuri asemntoare irurilor de caractere. Ele
ofer posibilitatea controlului la nivel inferior al driverelor de imprimant, caractere,
de ecran, al textelor cu lungime variabil al imaginilor etc, Fox-ul tratndu-le ca pe
irurile de caracter.
Funciile pentru conversia tipurilor de dat ntre ele sunt numeroase i ele sunt
necesare pentru c unei variabile nu i se poate schimba tipul atribuit,
DTOC(expd [,1]) transform data calendaristic ntr-un ir de caractere.
Dac este prezent argumentul 1 (opional), atunci irul rezultat are forma AALLZZ
(an,lun,zi) form utilizat n indexri.
CTOD(expc) transform un ir n dat calendaristic (dac are form de dat
calendaristic).
DTOS(expd) este echivalent cu DTOC(expd,1)
MDY(expd) transform o expresie dat calendaristic ntr-un ir de caractere
exprimat sub forma MM.DD.YY (lun zi an).
DMY(expd) idem sub forma DD.MM.YY
STR(expn1[,expn2[,expn3]] transform o expresie numeric ntr-un ir de
caractere.
expn1- reprezint expresia numeric de transformat
expn2- specific lungimea total a irului de caractere, incluznd punctul zecimal i
partea fracionar
expn3 - indic numrul de zecimale al numrului.
Dac lungimea indicat este prea mic se va returna un ir de lungimea indicat
coninnd numai asteriscuri. Invers pozitiile n plus se ocup cu spaii.
Exemplu:?str(1432.435,12,4) afieaz '1432,435' ca ir.
VAL(expc) transform o expresie ir de caractere ntr-un numr (dac expresia
ncepe cu cifre). Dac nu funcia returneaz 0. Transformarea se face pn cnd
primul caracter nu este cifr sau punct zecimal.
Exemplu: ? VAL(' 1432.435 ') afieaz 1432.435
n FoxProW exist o serie de funcii referitoare la tipurile de date. n continuare v
prezentm aceste funcii deoarece ele i au importana lor.
TYPE(expr) unde expr este irul de caractere reprezentnd expresia de testat.
Funcia returneaz un caracter reprezentnd tipul variabilei conform tabelului
urmtor:
Caracterul
returnat_____Tipul expresiei
--------------------------------------C__________ir de caractere
N__________numeric
D__________dat calendaristic
L__________logic (boolean)
M__________memo

G__________general
U__________nedefinit
====================
Exemplu: ? TYPE('FoxProW') afieaz C
EVALUATE(expc) unde expc este o expresie ir de caractere sau dat calendaristic.
Funcia evalueaz expresia ca expresie numeric sau ir de caractere i returneaz
rezultatul evalurii.
Exemplu; ? EVALUATE('6+3/3+3*3') afieaz 16
? EVALUATE('DATE()+1') afieaz 18/12/98 dac comanda este lansat n 17.12.98
EMPTY(expr) returneaz .T. dac valoarea este vid. Termenul "vid" este diferit
dup tipul expresiei folosite i se poate vedea n tabelul urmtor:
Tipul datei_________Semnificaia termenului vid/
--------------------------------------------------- -----------------ir de caractere____Conine numai spaii (blank, chr(32), nuluri,
_________________ tab-uri, chr(9), sfrit de linie, chr(13), chr(10).
Numeric__________Este 0
Dat calendaristic_data vid { / / } sau { }
Logic____________.F. (false)
Memo____________Fr coninut
General___________Fr coninut
===================================
MIN (expr1,expr2[,expr3]...) i
MAX(expr1,expr2[,expr3]...) compar cele dou expresii (de acelai tip) i
retumeaz valoarea minim (respectiv maxim) dintre toate cele prezente n list.
BETWEEN(expr1,expr2,expr3) testeaz dac expr1 este cuprins ntre expr2 i
expr3 (inclusiv limitele) i retumeaz .T. dac este cuprins ntre aceste limite i .F.
n caz contrar.
Exemplu: ? BETWEEN(100,120,300) afieaz .F.
? BETWEEN(100,50,200) afieaz .T.
INLIST(expr1,expr2[,expr3]...) testeaz dac expresia expr1 este cuprins n lista
restului de expresii (expr2, expr3 amd). Ea retumeaz .T. n caz afirmativ. Expresiile
pot fi de orice natur cu condiia ca toate s aib acelai tip.
Exemplu:? INLIST(joi,luni,mari,miercuri,joi,vineri,smb- t) afieaz .T.
o 6 septembrie 2008
o 0 comentarii
o nici o evaluare
Capitolul 4-1.
4. BAZE DE DATE
4.1 Generaliti. Comenzi SET
Principalul domeniu al utilizrii calculatorului este cel al prelucrrii de date.
Necesitatea de informaie este tot mai crescut o dat cu creterea i dezvoltarea
societii. Memorarea datelor i prelucrarea lor cu o mare vitez este rezolvat de
ctre FoxProW.
Datorit capacitilor relativ mici ale memoriei calculatoarelor, stocarea volume!or
mari de date (informaii) se face pe dispozitive de memorare externe, unitile de
disc de exemplu. Pe disc datele sunt depozitate n fiiere ca baze de date. Baza de
date este un astfel de fiier ce permite accesul rapid i complet la datele stocate.
Bazele de date sunt fiiere cu extensia .dbf create de ctre FOXPROW.
Sunt o colecie organizat de date grupate mpreun. Se pot imagina ca un tabel cu
linii i coloane n care linii!e se numesc nregistrri, iar coloanele cmpuri.

Comenzi SET
Comenzile SET permit "setarea" (poziionarea) unor caracteristici ale sistemului
FOX:
SET CONFIRM ONIOFF cere confirmarea la introducere.
Cu set confirm on la fiecare introducere de date (ntr-un cmp get) se emite un
semnal sonor i se cere prin tastarea retur de car, confirmarea introducerii.
Cu comanda set confirm off, la intrucerea de date ntr-un cmp get i umplerea sa
se trece automat la cmpul urmtor fr a se cere vreo confirmare.
SET PRINTER ON | OFF imprimanta (on) se consider ataat. Cu: set printer off,
imprimanta este detaat i ieirile vor fi dirijate spre monitor.
SET TALK ON | OFF - OFF nu afieaz variabilele automat, iar set talk on oblig
sistemul s afieze toate atribuirile de variabile.
Exemplu: set talk on
a=25;
afieaz pe ecran 25, n pozia n care se afl cursorul.
SET SAFETY ONIOFF - OFF nu cere confirmarea la tergeri de fiiere, iar cu set safety
on aceast confirmare la tergere este cerut. Exemplu:
Set safety on
use baza
Zap
Calculatorul va afia: zap calenume.dbf ? Yes/No
i se va executa comanda doar dac se confirm (cu yes).
Exist o serie de comenzi SET (de setare a modului de afiare a datei calendaristice,
de setare a numrului de zecimale cu care se fac calculele etc. Acestea pot fi
studiate din HELP-ul sistemului.
Zone de lucru
Pentru a putea lucra cu mai multe baze de date concomitent, sistemul permite
deschiderea unui numr de 225 zone de lucru (maxim). Aceasta deoarece ntr-o
zon de lucru se poate deschide o singur baz de date. Comanda cu care se
deschide o zon de lucru este:
SELECT expn | expc
expn - desemneaz numrul zonei de lucru (ntre 1 i 225) sau 0 pentru deschiderea
primei zone (cea mai mic ca humr) liber sau literele A-J care se pot folosi n locul
cifrelor de la 1 -10.
expc - desemneaz numele sau aliasul unei baze de date ce se asociaz zonei
respective.
Exemplu: SELE 0
SELE A - reprezint comenzi echivalente
SELE debite
SELE 'debite' - reprezint de asemenea comenzi echivalente.
Pentru a afla care este zona de lucru curent (n care ne gsim n momentul de fa)
se utilizeaz funcia SELECT (). Sintaxa acestei funcii este:
SELECT(0|1)
Forma SELE (0) se folosete pentru indicarea zonei curente iar cea cu parametrul 1
indic numrul ultimei zone de lucru nefolosite. Exemplu:SELECT(1) afieaz 225.

4.2 Crearea bazelor de date


Cnd se definete o baz de date trebuie indicat structura i dimensiunea
cmpurilor iar acest lucru se realizeaz prin comanda CREATE numebaz. Numele
bazei de date poate s fie de maxim 8 caractere i are extensia .dbf
Tipul cmpurilor poate fi:
C ir de caractere maxim 254 caractere orice caractere fox;
N numeric (N sau F) maxim 20 poziii incusiv punctul zecimal i semnul.
tipul F se folosete pentru calcule cu cifre foarte mari sau foarte mici (virgul
flotant, este un tip numeric la fel ca N);
D - dat calendaristic lungime implicit 8;
L - tipul logic lungime 1 valoare .T. sau .F.;
M - tipul memo lungime 10 - pentru precizri legate de cmpurile C mai mari de 254
caractere;
P - picture pentru date de tip picture (fotografii - acest tip este valid doar pentru
FOX sub WINDOWS).
Pentru a putea face operaii asupra unei baze de date trebuie mai nti deschis,
lucru care se realizeaz cu comanda USE nume baz.
Crearea bazelor de date se face cu comanda:
Format:
CREATE numeb | ?
Dac se folosete forma CREATE ? atunci sistemul listeaz (ntr-o fereastr) toate
bazele de date existente (create) pn n acel moment.
numeb - este numele bazei de date. El va fi format din opt caractere i va avea
extensia dbf. Aceast extensie va fi creat automat de ctre sistem.
Dup tastarea acestei comenzi se deschide o fereastr de creare a unei baze de
date n mod interactiv care cere introducerea cmpurilor bazei de date(name), tipul
lor (type), iungimea lor (width - n caractere), i dac este cazul pentru cmpurile
numerice cte din aceste caractere sunt zecimale (dec - se va ine cont de faptul c
i punctul zecimal ocup un caracter).
ntr-un antet este indicat numele bazei de date care urmeaz a fi creat, n subsolul
ferestrei se indic anumite date referitoare la cmpurile create (cmpul, liungimea !
ui i spaiul rmas n memorie) iar n dreapta exist posibilitatea de a aciona dou
butoane (insert i delete) pentru a aduga cmpuri noi, sau a terge cmpurile
create. n mod normai dup completarea unui cmp poziia cursorului nainteaz
automat la cmpul urmtor.
n momentul n care apare pe ecran fereastra structure, cursorul se gsete n prima
poziie NAME a structurii cernd introducerea numelui unui cmp. Se va introduce
numele cmpului (maxim 10 caractere, cifre sau linia de subliniere, primul caracter
fiind o liter sau linia de subliniere.
Pentru a schimba ordinea elementelor dintr-o list, tastai TAB pentru poziionare pe
numele de cmp dorit, apoi CTRL/PGUP sau CTRL/PGDN pentru a muta elementul n
sus sau n jos n list.
- Type - specific tipul datei (caracter, numeric, float, date, logical sau memo);
- Width - specific lungimea cmpului prevzut n tabelul de mai jos;
<insert> - permite inserarea unui cmp naintea celui selectat;
<delete> - permite tergerea cmpului selectat din structur.
Adugarea/tergerea de semnale index (Structural Compound Index Tags)
paziionai cursorul n zona umbrit care precede numele cmpului; folosii bara de
spaiu pentru a comuta ntre index tag ascending, descending sau ters. Indexii sunt
fiiere asociate care stabilesc ordinea de parcurgere a nregistrrilor din baza de
date. Despre acetia se va vorbi ntr-un alt capitol. Se va arta cum se poate face
indexari dac baza de date a fost creat fr index aa cum v recomandm noi.
Meniul Popup Structure este destinat n special utilizatorilor tastaturii. Acesta are
nevoie de opiunile corespunztoare ale acestui meniu sau de combinaii de taste
de control pentru inserarea sau tegerea unui cmp din structur. Opiunile acestui

meniu sunt:
Tipul datei _______Lungimea n numr de caractere
--------------------------------------------------- ---------------------------------------Caracter_________1 - 254
Numeric_________1 - 20 incluznd semnul (+,-) i marfa zecimal (opionale)
Date____________8
Logical__________1
Memo___________10
Float____________1 - 20 incluznd semnul (+,-) i marfa zecimal (opionale)
=============================================
Insert field (CTRL/I)
Delete field (CTRL/D)
Pentru structura definit selectai OK ca s-o salvai (sau CTRL/W).
Se poate selecta unul din butoane folosind tastele direcionale (sgeti) sau pot
selecta cu mouse-ul pentru a aduga sau terge cmpuri, Se mai poate selelecta
butonul OK pentru a salva baza de date creat, sau se tasteaz CTRL/W - sau se
poate selecta butonul CANCEL sau se tasteaz tasta ESC pentru abandonarea
crerii bazei de date.
n partea de jos a ecranului pe o linie, se dau tot timpul indicaii referitoare
introducerile ce trebuie efectuate i referitoare la eventualele introduceri eronate.
De aceea, introducerea cmpurilor fiind asistat ea poate fi fcut simplu i far
dificulti serioase.
La saivarea bazei de date apare un mesaj interactiv i anume:
Input data record now? (Introducei inregistrri acum? ). Dac se tasteaz enter sau
se selecteaz Yes atunci se deschide o nou fereastr ce permite introducerea
nregistrrilor. Dac nu, atunci se salveaz numai structura bazei de date creat,
urmnd ca adugarea nregistrriior s se fac mai trziu prin alte metode. Din
experien autorul recomand ca adugarea nregistrrilor s se fac mai trziu
(prin programe de adugare date) pentru a putea avea un control asupra datelor
introduse deoarece n acest moment nu avem toate elementele necesare
introducerii, ci doar putem face o introducere de test, astfel ca s corespund
valoarea introdus n cmpuri cu tipul cmpurilor.
O alt modalitate de creare a unei baze de date este cea folosind comanda:
CREATE TABLE | DBF numeb [(nume1 tip ([prec [,scala]) [,nume2...] ])
| FROM ARRAY masiv
unde:
numeb - reprezint numele bazei de date
nume1 - reprezint numete cmpurilor structurii bazei de date
tip - reprezint tipul cmpului (o liter N=numr, C=caracter...)
prec- reprezint lungimea cmpului
scal - reprezint numrul de zecimale
FROM ARRAY masiv - reprezint specificarea unui nume de masiv din care se creaz
baza de date respectiv.
TIP______PRECIZIE______SCALA________Descriere
--------------------------------------------------- --------------------------------------------------- -----C________n______________-____________ir de caractere de lungime n
D________-_______________-____________dat calendartistic
F________n______________d____________real.de lungime n, cu d zecimale
L________-_______________-____________logic
M________-_______________-___________memo
N________n______________d____________numeric, de lungime n cu d zecimaie
G________-______________-____________general
P________-______________-____________imagine

Exemplu:
CREATE TABLE mfixe (cod C(10), demumire C(30),;
Valoare N(10)...)
Este creat baza de date MFIXE cu structura:
COD C 10
DENUMIRE C 30
VALOARE N 10
Deschiderea i nchiderea bazelor de date
Comanda cu care se face deschiderea unei baze de date este USE. Formatul general
al comenzii este:
USE [baza | ?] [IN zon de lucru] [AGAIN]
[INDEX list fiiere index | ?]
[ORDER [expn] | fiier index .idx| [TAG] nume etichet
[OF fiier index.cdx] [ASCENDING|DESCENDING]]]]
[ALIAS alias] [EXCLUSIVE] [SHAREj [NOUPDATE]
unde:
baza - reprezint baza de date ce se deschide, creia, dac nu i se specific nici o
extensie i se va atribui extensia implicit .DBF. Dac nu se specific nici fiier i
nici ? atunci se nchide baza de date din zona respectiv (curent). Dac se
specific ? vor fi afiate ntr-o fereastr bazele de date existente i va putea fi
selectat una pentru a fi deschis.
IN zon de lucru - specific zona de lucru n care se face deschiderea bazei de date
(implicit zona curent)
AGAIN - indic faptul c se deschide o baz de dat care este deschis n alt zon
de lucru din nou (altfel eroare)
INDEX list fiiere.idx - se precizeaz fiierele index cu care se dorete deschiderea
bazei de date
? - afieaz o fereastr de dialog pentru selectarea fiierelor index cu care se
dorete deschiderea
ORDER - se refer !a schimbarea ordinii de importan a indexilor (avnd n vedere
c numai un index poate fi activ la un moment dat) - expn - precizeaz al ctelea
index din lista de indexi este activ, sau este denumit n clar acest fiier
TAG - se refer la alt tip de indexi (fiiere CDX) unde se precizeaz eticheta sau
numele fiierului cdx
ASCENDING I DESCENDING - arat modul de sortare
ALIAS alias - precizeaz numele (alias-ul) fiierului baz de date
EXCLUSIVE - indic faptul c nu este permis accesul mai multor utilizaori la baza de
date respectiv
SHARE - indic faptul c este permis accesul mai multor utilizatori (cnd se lucreaz
n reea)
NOUPDATE - protejeaz baza de date la scriere. Nu permite modificarea continutului
i nici a structurii, ci doar vizualizarea coninutului.

Exemplu:
USE mfixe in 2 NOUPDATE index nrc
Deschide baza de date MFIXE nepermind modificarea ei, cu indexul NRC, n zona
2.
nchiderea bazelor de date se face cu comenzile:
USE - fr alte argumente nchide baza de date din zona curent
CLOSE DATABASES - nchide toate bazele de date deschise (din toate zonele) i
selecteaz zona 1 - zon implicit
CLOSE ALL - nchide toate bazele de date i ferestrele deschise.
Funcia USED () informeaz dac zona de lucru respectiv este liber sau este
ocupat. Sintaxa funciei este:
USED [(expn [ expc)]
unde expn i respectiv expc specific zona de lucru despre care se doresc informaii
prin numrul sau aliasul corespunztor. Funcia returneaz .T. dac zona este
ocupat de o baz de date respectiv .F. dac nu. Dac nu se specific zona de lucru
funcia se refer la zona curent.
Funcia DBF() indic ce baz de date este deschis. Sinaxa ei:
DBF [(expn | expc)]
Funcia returneaz un ir de caractere ce contine numele (aliasul) bazei de date
deschise n zona de lucru indicat, iar dac nu exist atuci returneaz irul vid. Expn
i expc au aceeai semnificaie ca n funcia USED(), iar dac aliasul respectiv
precizat nu exist, se va afia irul 'Alias not found' (Alias negsit).
Aliasul bazei de date este un nume ce identific baza de date la deschiderea ei.
Acest nume poate fi chiar numele bazei de date ca n expresia:
USE MISCARI inde indmisc - cnd aliasul este miscari, sau poate fi ales un alt ir de
caractere care identific baza de date de la deschiderea ei i pn la nchidere ca n
exemplul urmtor:
USE c:mijlfixmfix inde indm alias mf
n acest exemplu datorit faptului c se deschide o baz de date situat n alt
director dect cel curent denumirea bazei de date este lung i greoaie i de acea
este ales un alias scurt (MF) care identific baza de date la eventualele apelri
ulterioare naintea nchiderii sale.
La urmtoarele apelri se va putea utiliza formula: select mf n loc de
SELECT c:mijlfixmfix
FoxProW atribuie automat aliasul bazei de date n felul urmtor:
- primele zece zone de lucru au atribuit ca alias nume de la A la J
- urmtoarele zone au atribuite ca alias 'W11' pn la 'W225'
De asemenea n cazul unui conflict de atribuire a aliasului FoxProW realizeaz
rezolvarea conflictului atribuind un nume de alias, cum ar fi n cazu! deschiderii
aceleiai baze de date n dou zone diferite fr a specifica vre-un nume de alias:
select a
use misc && baza de date are aliasul misc
use misc in 2 again && baza da date va avea aliasul b
sele misc
list to print
sele b
.........
4.3 Manipularea structurii unei baze de date
Deseori apare necesitatea introducerii unui cmp nou n baza de date (a unor
informaii noi) de exemplu pentru a putea face o list dup caracteristici inexistente
n baza de date. De exempiu, dac se dorete listarea unei baze de date numite
MFIXE dup tipul utilajelor existente (cldiri, utilaje de productie, mijloace auto etc)
acest lucru se poate face foarte greu dac nu exist un cmp (de 1-2 caractere cel
puin) care s precizeze tipul utilajelor.

n aceste cazuri este necesar modificarea structurii bazei de date i introducerea


acestui cmp. Acest lucru se realizeaz prin deschiderea bazei de date i utilizarea
ulterioar a comenzii
MODIFY STRUCTURE
n momentul utilizrii acestei comenzi se deschide o fereastr n care apare
structura bazei de date i se pot realiza modificrile dorite adic:
- introducerea de cmpuri noi n baza de date (CTRL/N)
- tergerea unor cmpuri (CTRL/D)
- modificarea denumirii unor cmpuri (prin tastarea unei alte denumiri peste cea
veche)
La selectarea declanatorului OK (sau CTRL/W) se ncheie operaia de modificare, se
copiaz baza de date ntr-una nou, cu structura modificat (operaie transparent
pentru utilizator). n baza nou de date cmpurile nou introduse trebuie completate
(ele sunt vide).
Vizualizarea structurii poate fi fcut cu comenzile:
DISPLAY STRUCTURE [in expn | expc]
[TO PRINTER [PROMPT] , TO FILE fiier]
[NOCONSOLE]
sau
LIST STRUCTURE [IN EXPN | EXPC ]
[TO PRINTER [PROMPT] | TO FILE fiier]
(NOCONSOLE]
Singura deosebire ntre cele dou comenzi este c n cazul umplerii ecranului prima
suspend listarea (pn la apsarea unei taste) iar a doua nu.
IN expn - precizeaz zona de lucru n care se afl baza de date a crei structur se
dorete a fi listat. Expc precizeaz aceeai zon dar specificnd aliasul
TO PRINTER - cere ca listarea s se fac la imprimant, iar PROMPTER precizeaz (n
cazul folosirii sub windows a FoxPro-ului) prin deschiderea unei ferestre (print)
opiunile de imprimare.
TO FILE fiier - cere ca listarea s se execute ntr-un fiier
NOCONSOLE - sisteaz afiarea pe ecran.
Exemplu: listarea structurii MIFIX.DBF
Structure for database: C:FOX26WMIFIX.DBF
Number of data records; 0
Date of last up date: 20.01.99
Name of block size: 64
Field FieldName Type Width Dec
Index
1 COD Character 10
2 DENUMIRE Character 10
3 VALOARE Numeric 10 0
.....................
** TOTAL ** 81
Un ait mod de creare a unei baze de date este aceea de copiere a.structurii unei
baze de date ntr-o baz de date nou prin comanda:
COPY STRUCTURE TO dbase
[FIELDS Iistcmpuri]
[ [WITH ] CDX | [WITH ] PRODUCTION] ]
Unde:
dbase - este numele bazei de date care va fi creat
FIELDS list cmpuri - are ca efect copierea doar a acelor cmpuri precizate n lista
de cmpuri

Ultima linie se refer la fiierele index care va fi analizat ulterior.


Exemplu:
USE MIFIX
COPY STRUCTURE TO MIF!X_N;
FIELDS cod, denumire
Va fi creat baza de date mifix_n care va avea dou cmpuri.
Comanda urmtoare:
COPY STRUCTURE EXTENDED TO dbase [FIELDS LIST CMPURI]
copiaz structura bazei de date mpreun cu nregistrrile acesteia n baza de date
al crui nume se precizeaz prin "dbase". Se presupune deschis baza de date ce
va fi copiat.
Structura unei baze de date se poate crea i cu comanda:
CREATE [dbase1] FROM [dbase2]
Dac dbase1 i/sau dbase2 lipsete, sistemul va deschide ferestre de dialog pentru
a chestiona utilizatorul asupra fiierelor ce trebuie folosite.
Prin acest comand se va crea structura basei de date dbase1 folosind ca model
structura dbase2. Baza de date dbase2 nu trebuie s fie deschis.
Funcia AFIELDS()
realizeaz copierea structurii bazei de date prin intermediul unui masiv:
AFILDS (masiv)
Realizeaz copierea bazei de date ntr-un masiv i returneaz o valoare numeric
preciznd numrul de cmpuri ale structurii. Masivul este bidimensional i dac el
nu exist, este creat. Prima dimensiune a masivului este egal cu numrul
cmpurilor, iar cea de a doua este egal cu 4 corespunznd celor patru tipuri de
informatii necesare pentru codificarea unui cmp (name, type, len, dec). Baza de
date se presupune deschis.
Trecerea invers (dintr-un tablou ntr-o baz de date) se face prin comanda CREATE
FROM ARRAY cu sintaxa:
CREATE TABLE | DBF dbase FROM ARRAY masiv
unde:
dbase - reprezint numele bazei de date ce se creaz
masiv - reprezint numele masivului bidimensional.
4.4 Manipularea cmpurilor unei baze de date
Modul n care se face accesul la cmpurile unei baze de date poate fi modificat prin
comanda SET FIELDS n sensul c se permite sau nu accesul. Comanda are sintaxa:
SET FIELDS ON | OFF i
SET FIELDS TO ([cmp1 |;cmp2...] | ALL]
Dac SET FIELDS este ON, pot fi accesate doar cmpurile prezente n lista de
cmpuri din comanda SET FIELDS TO. Dac SET FIELDS este OFF (implicit) atunci
este permis accesul la toate cmpurile bazei de date.
SET FIELDS TO ALL face ca accesul s fie permis la toate cmpurile chiar dac SET
FIELDS este ON, iar SET FIELDS TO, face accesul imposibil deoarece lista de cmpuri
este vid.
Numrul de cmpuri dintr-o baz de date este dat de funcia:
FCOUNT([expn | expc])
expn - desemneaz zona de lucru n care este deschis baza de date la care se
refer funcia, iar expc este aliasu! acestei baze (ce!e dou se exclud reciproc).
Dac nu se precizeaz zona de lucru se presupune zona de lucru curent. Dac n
aceast zon nu se afl deschis nici o baz de date, este retumat vaioarea 0.
Exemplu:
use mfixe
? 'Baza de date MFIXE are' ,fcount().' campuri'
Afieaz:

Baza de date MFIXE are 6 campuri


?fcount()=fcount(1)
.T.
? fcount(se!ect())=fcount()
.T.
?fcourt(1}=fcount('mfixe')
.T.
?fcount(11)
0
Funcia FIELD() returneaz numele unui cmp dintr-o baz de date, cmp identificat
prin numrul su n cadrul structurii bazei de date. Sintaxa ei este:
FIELD(expn1[,expn2 (,expc])
expn1 - specific numrul de ordine al cmpului (primul cmp are numrul 1), iar
expn2 sau expc identific baza de date la care se refer funcia, prin zona de lucru
sau aliasul su respectiv.
Functia are ca rezultat un ir de caractere, numele cmpului
Exemplu:
USE MISC
USE MFIXE IN 2
?FIELD(1,2)
COD
O funcie asemntoare este FSIZE() care retumeaz mrimea unui cmp al bazei
de date, specificat prin numele su. Sinaxa ei este:
FSIZE(expc1[,expn | expc2])
expc1 - reprezint numele cmpului bazei de date
expn sau expc - reprezint zona de lucru, ca numr sau alias.
n FoxProW exist o serie de comenzi care se refer nu numai la o nregistrare ci la
un "domeniu" de nregistrri adic la mai multe nregistrri care au o caracteristic
comun. Domeniul nregistrrilor (care va fi precizet n sintaxa comenzilor ca
"domeniu" ) poate fi:
- ALL - adic toate nregistrrile bazei de date
- NEXT expn - adic urmtoarele expn nregistrri unde expn este o expresie
numeric evaluat ca o expresie ntreag
- RECORD expn - adic nregistrarea numrul expn, expresie numeric valuat ca o
expresie ntreag
- REST - adic toate nregistrrile ncepnd cu cea curent i pn la sfritul
fiierului.
Acestea sunt clauze care precizeaz domeniul i vor nlocui "domeniu" cnd acesta
va fi precizat n sintaxa unor comenzi. De asemenea n cadrul comenzilor vor
aprea frecvent clauzele FOR i WHILE care vor fi explicate n continuare.
FOR expl - are semnificaia desemnrii tuturor nregistrrilor pentru care expl
(expresie logic) are valoarea .T. adic este adevrat i se traduce prin
"pentru ...".
De exemplu:
... for recno() =15 se traduce prin: pentru nregistrarea cu numrul de ordine 15,
deci va fi selectat o nregistrare.
... for nume='masina' se traduce prin pentru nume='masina' deci vor fi selectate
toate nregistrrile care au pe primele caractere din cmpul nume caracterele
'masina' (indiferent ce este pe celelalte poziii dac pe primele ase pozitii au
aceste caractere. Atenie! pentru irurile de caractere se face distincie ntre
caracterele mici i majuscule).
Clauza WHILE expl este o clauz asemntoare i se traduce "ct timp". Ea este
urmat de o expresie logic la fel ca n cazul clauzei FOR.
Exemplu:
... WHILE nume='main' selecteaz de asemenea nregistrrile care au

nume='masina' pe primele ase caractere.


Clauzele FOR i WHILE pot fi folosite concomitent, dar cu atenie pentru avea o
aciune logic corect i trebuie verificat aciunea lor. De asemenea n cadrul
acestor comenzi pot fi folosite expresii logice complexe ca:
... WHILE (nume='masina' .and. cod>123456).or. valoare > 5000
4.5 Vizualizarea coninutului bazelor de date
Dup ce o baz de date a fost creat i au fost introduse date n ea, apare
necesitatea vizualizrii coninutului su, pentru a putea fi verificat sau pentru a
putea furniza datele existente prin diverse liste utilizatorilor datelor respective.
Vizualizarea poate fi fcut pe ecran, la imprimant sau ntr-un fiier pe disc. Sunt
utilizate n acest sens comenzile DISPLAY i LIST cu urmtoarea sintax:
DISPLAY [[FIELDS] list cmpuri] [domeniu]
[FOR expl1 | [WHILE expl2] [OFF]
[TO PRINTER] I [TO FILE file] [NOCONSOLE]
[NOOPTIMIZE]
LIST [ [FIELDS] list cmpuri] [DOMENIU]
[FOR expl1 ] | [WHILE expl 2] [OFF]
[TO PRINTER] | [TO FILE FILE] [NOCONSOLE] ;
[NOOPTIMIZE]
Afiarea se face sub forma:
- prima linie conine denumirea cmpurilor (structura)
- urmtoarele linii conin cte o nregistrare din baza de date
Clauza FIELDS se folosete pentru a fi afiate doar anumite cmpuri (cele prezente
n lista de cmpuri). Cmpurile memo vor fi afiate doar dac sunt specificate
explicit n lista de cmpuri, tiprirea lor fiind controlat de comanda SET
MEMOWIDH.
CLAUZA OFF determin dispariia din formatul de afiare a coloanei 0 (numrul de
nregistrare).
NOCONSOLE dezafecteaz tiprirea i pe ecran
TO PRINTER dirijeaz tiprirea la imprimant
TO FILE file - face ca tiprirea s se fac ntr-un fiier
La comanda display domeniul implicit este NEXT 1, pe cnd la comanda LIST el este
ALL.
Pentru ca s nu apar denumirea cmpurilor bazei de date (pe prima linie) se poate
folosi comanda SET HEADING OFF.
Comanda SET HEADING ON determin afiarea antetuliui.
Exemplu:
USE MIFIX
LIST se && listeaz baza de date cu antet
De asemenea vizualizarea datelor (pe ecran) poate fi fcut prin comanda BROWSE
care poate fi folosit ca atare dar forma ei este complex i va fi studiat la
capitolul privind.modificarea datelor.
Exemplu:
USE MIFIX
BROWSE
Ca urmare a folosirii acestei comenzi este deschis o fereastr de vizualizare n care
se afieaz nregistrrile (cte una pe rnd) i folosind tastele direcionale, PgUp i
PgDn, TAB, SHIFT i TAB se poate avansa n sus i n jos, la dreapta i !a stnga prin
baza de date.
4.6 Adugarea de nregistrri

Pentru a putea extrage date dintr-o baz de date, trebuie ca mai nti s fie
introduse datele n baza de date. Introducerea de date nfr-o baz de date se poate
face prin comanda APPEND cu sintaxa:
APPEND [BLANK]
n cazul folosirii acestei forme comanda deschide o fereastr de dialog prin care se
pot introduce date, cmp cu cmp, la sfritul bazei de date. Cnd vrem s
introducem un cmp memo, prin apsarea tastei CTRL i PgDn se deschide o
fereastr de editare. Pentru terminarea introducerii se tasteaz CTRL i W, n
varianta utilizrii opiunii BLANK, se realizeaz introducerea unei nregistrri cu
cmpuri vide la sfritul bazei de date.
O alt comand ce poate fi utilizat pentru introducerea ntr-o baz de date a unor
nregistrri din alt baz de date (cu cmpuri comune) este APPEND FROM, iar cnd
introducerea datelor se face dintr-un masiv, se utilizeaz comanda APPEND FROM
ARRAY cu sintaxa:
APPEND FROM dbase [FIELDS Iist cmpuri]
[FOR EXPL] [[TYPE] DELIMITED] [WITH TAB |
WITH DELIMITATOR | WITH BLANK]
[DIF | FW2 | MOD | PDOK | RPD | SDF | SYLK |
WK1 | WK3 | WKS | WR1| WRK | XLS]]
Unde:
dbase - reprezint numele fiierului din care se iau date (care nu trebuie s fie
deschis). n locul su se poate specifica ? cnd se deschide o fereastr ce afieaz
toate bazele de date pentru a alege pe cea necesar.
FIELDS list cmpuri - se precizeaz pentru preluarea doar a unei prti din cmpuri
n noua baz (care trebuie s fie deschis). Dac nu se specific acest clauz, este
adugat tot fiierul dbase la sfritul bazei de date deschis n zona de lucru
curent.
FOR expl - precizeaz condiia (expl) care n cazul c este .T. realizeaz adugarea
nregistrrilor n baze de date
TYPE - clauz care specific tipul fiierelor care vor fi adugate i va fi detaliat n
capitolul referitor la importul i exportul datelor.
O alt metod de adugare a datelor n bazele de date este cea folosind comanda
INSERT care are sintaxa:
INSERT [BEFORE] [BLANK]
Comanda deschide o fereastr de editare n care pot fi fcute adugarea unor
nregistrri, cmp cu cmp.
BEFORE - duce la adugarea unei nregistrri naintea nregistrrii curente, iar
BLANK duce la adugarea unei nregistrri vide, la sfritul fiierului. INSERT fr
argumente duce la inserarea unei nregistrri dup cea curent.
Exemplu:
USE misc
INSERT before
4.7 Modificarea coninutului bazelor de date
Deoarece datele care este necesar s fie depozitate n bazele de date sunt ntr-o
evoluie continu att n ceea ce privete calitatea ct i cantitatea, acestea trebuie
modificate pentru a fi puse n concordan cu realitile vieii. De asemenea este
necesar modificarea unor date introduse greit sau interpretate greit.
Modificarea datelor se poate face cu ajutorul comenzilor CHANGE, EDIT, BROWSE i
REPLACE care vor fi prezentate n continuare.
Comanda CHANGE (identic cu EDIT i realizeaz acelai lucru) are urmtoarea
sintax:
CHANGE | EDIT [FIELDS list cmpuri] [DOMENIU]
[FOR expl1] [WHILE expl2] [FONT expc1 [,expn1 ] ]

[STYLE expc2] [FREEZE cmp1] [KEY expr1 [,expr2]]


[LAST][LEDIT][REDIT][LPARTITION][NOAPPEND]
[NOCLEAR] [NODELETE] [NOEDIT] [NOMODIFY]
[NOLINK][NOMENU] [NOOPTIMIZE] [NORMAL]
[NOWAIT] [PARTITION expn2 ] [PREFERANCE expc3]
[REST] [SAVE] [TIMEOUT expn3] [TITLE expc4]
[VALID] [:F] expl3] [ERROR expc5] [WHEN expl4]
[WIDTH expn4] [ [WINDOW] nume fereastr1]
[IN [WINDOW nume fereastr2 | IN SCREEN] ]
[COLOR SCHEME expn5] | [COLOR list perechi culori]
leirea din fereastra CHANGE i salvarea modificrilor se face folosind combinaia de
taste CTRL/End.
Clauza FIELDS are ca efect afiarea pentru modificare doar a cmpurilor indicate n
lista de cmpuri, dac lipsete sunt editate toate cmpurile. Aceast list reprezint
o niruire de cmpuri separate prin virgul, cu urmtoarea sintax:
CMP [:R] [:V=expr1[:F] [:E=expc1]]
[: P=expc2] [:B=expr2,expr3[:F]] [:H=expc3]
[:W=expl1] [,cmp2] [:R]...]
n lista de cmpuri pot fi incluse i cmpuri ale bazelor de date deschise n alte zone
de lucru.
:R - cmpul se poate numai vizualiza (fr modificare)
:V expr1 - permite validarea cmpului. Se evalueaz valoarea modificat i se
verific expl-1. Dac valoarea expr1 (expresie logic) este .T. se face validarea
(modificarea este acceptat), altfel nu i se afieaz un mesaj de eroare.
:F - perrnite forarea validrii cnd se trece cu cursorui prin cmp fr modificarea
coninutului.
:E exc1 - se foiosete pentru modificarea mesajului, care va fi exc1
:B expr2,expr3 - specific intervalul n care trebuie s se afle valoarea din cmp
dup editare. expr2 reprezint limita inferioar iar expr3 cea superioar. n caz
contrar se afiaz un mesaj de eroare.
: P=expc2 - se poate specifica un cod PICTURE (prezentat la comanda GET).
:H= expc3 - precizeaz numele cmpului ce va fi afiat n partea superioar a
ferestrei de editare
:W=expl1 - este o clauz while i se permite editarea cmpului doar dac expresia
logic are valoarea .T.
Clauza FREEZE se folosete pentru a selecta spre modificare un singur cmp
(secificat) la restul cmpurilor nepermindu-se editarea.
Clauza KEY se folosete la baze de date indexate pentru limitarea mulimii
nregistrrilor afiate n fereastr i anume cele ce au cheia de indexare n intervalul
expr1, expr2.
NOAPPEND oprete utilizatorul de a aduga nregistrri noi.
NODELETE - nu permite tergerea nregistrrilor
NOEDIT i NOMODIFY - (clauzele se exclud) nu permit modificarea cmpurilor din
nregistrare
PREFERANCE - determin salvarea atributelor ferestrei de editare n fiierul de
resurse sub numele expc4.
PARTITION expn2 - mparte fereastra de editare. Expresia expn2 indic coloana n
care se va face desprtirea celor dou prti. j
LEDIT - indic modul BROWSE ce se aplic n fereastra stng REDIT - la fel n
fereastra dreapt (se pot folosi simultan) ;
NOLINK - face ca deplasarea n cele dou partiii s nu fie "legat" s se fac deci
independent
NOWAIT - continu execuia programului cu instructiunea imediat urmtoare (este
util doar la folosirea comenzii CHANGE n interiorul unui program, pentru a nu
suspenda programul pe timpul executrii acestei comenzi).

NOMENU - se utilizeaz pentru a face s nu apar pe ecran meniul BROWSE la


execuia acestei comenzi.
LAST - face ca fereastra de editare specific s pstreze aceleai caracteristici ce le
avea la ultima utilizare a acestei comenzi. (La ieire aceste caracteristici se
salveaz n fiierul de resurse apsnd CTRL/END, iar cu CTRL/Q nu se salveaz
aceast configuraie).
TIMEOUT expn3 - se specific numrul de secunde ct timp FoxProW va atepta
pentru introducerea modificrilor n fereastra de editare dup care fereastra se
nchide automat.
CIauza REST indic sistemului s nu afecteze indicatorul de nregistrare la
deplasarea in interiorul bazei de date. La iniierea comenzii acesta se afl pe prima
nregistrare.
SAVE - este utilizat pentru a pstra pe ecran fereastra de editare i dup ieirea
din comand. Aceast clauz este disponibil numai n interiorul programelor.
TITLE expc4 - este un titlu ce apare n primul rnd al ferestrei change cu coninutul
"expc4".
VALID :F expl3 ERROR expc5 - este echivalent cu optiunea :V din clauza FIELDS,
adic este o condiie de validare (exp!3), respectiv un mesaj ce apare n cazul n
care conditia nu se verific (expc5),
WIDTH expn3 - este utilizat pentru a limita numrul de caractere afiate pentru un
cmp. Nu este afectat mrimea cmpului din baza de date.
Clauzele: NORMAL, WINDOW, IN WINDOW, IN SCREEN, COLOR SCHEME i COLOR
vor fi tratate mai trziu.
n fereastra CHANGE, cmpurile sunt afiate unul sub altuL, iar n fereastra BROWSE
ele sunt afiate pe orizontal unul dup altul. Comanda BROWSE are o form
asemnatoare cu change:
BROWSE [FIELDS Iist cmpuri] [domeniu] [FORMAT]
[FOR expl1] [WHILE expl2] FONT expc1 [,expn1] ]
[STYLE expc2] [FREEZE cmp] [KEY expr1 [,expr2] ]
[LAST] [LEDIT] [REDIT] [LPARTITION] [NOAPPEND]
[LOCK expn]
[NOCLEAR] [NODELETE] [NOEDIT] [NOMODIFY]
[NOLGRID] [NORGRID] [WHEN expl4]
[NOLINK] [NOMENU] [NOOPTIMIZE] [NORMAL]
[NOWAIT] [PARTITION expn2] [PREFERANCE expc3]
[REST] [SAVE] [TIMEOUT expn3] [TITLE expc4]
[:VALID [:F] expl3] [ERROR expc5] [WHEN expl4]
[WIDTH expn4] [ [WINDOW] nume fereastr1]
[IN [WINDOW nume fereastr2 | IN SCREEN] ]
[COLOR SCHEME expn5] | [COLOR list perechi culori]
Majoritatea clauzelor sunt asemntoare cu cele din comanda CHANGE, diferenele
fiind urmtoarele:
LEDIT, REDIT - fac ca partiia stng respectiv dreapt s apar n formatul change.
LOCK expn - expresia numeric expn reprezint numrul de cmpuri ce vor fi
plasate n partiia stng a ferestrei.
NOLGRID, NORGRID - se utilizeaz pentru a elimina separarea prin linii verticale
ntre cmpuri n partitia stng i respectiv cea dreapt.
FORMAT - se refer la preluarea formatului de afiare dintr-un fiier de format.
REFRESH - duce la remprosptarea ferestrei de editare browse (retrasarea ei) i
este necesar la lucrul cu bazele de date n reea.
Restul clauzelor au fost discutate la comanda CHANGE,
Comanda REPLACE nlocuiete coninutul unui cmp sau al mai multor cmpuri cu
cel precizat n comand. Ea are urmtoarea sintax:
REPLACE cmp1 WITH expr1 [ADDITIVE]

[,cmp2 WITH expr2 [ADDITIVE] ...]


[domeniu] [FOR expl1 [WHILE expl2] [NOOPTIMIZE]
Valoarea din expr1 este evaluat i este modificat cmpul cmp1 cu valoarea
expresiei (care trebuie s fie de acelai tip cu cea din cmp1), cmp2 cu expr2,
amd. Dac este prezent opiunea ADDITIVE, atunci este adugat valoarea expr1
la coninutul din cmp1.
FOR, WHILE i domeniu, specific domeniu! nregistrrilor la care se refer comanda
REPLACE.
Exemplu:
USE MFIXE
REPL valoare with valoare*3,uzur with 0 for tip = 2 USE
Aceast comand realizeaz nlocuirea cmpului valoare cu o valoare de trei ori mai
mare i uzura cu 0, pentru toate mijlocele fixe de tipul 2.
4.8 tergerea nregistrrilor
tergerea nregistrrilor dintr-o baz de date este necesar deoarece datorit
dinamicii fenomenelor unele manifestri dispar nemaifiind necesare. tergerea se
poate face la nivel logic, cnd nregistrrile sunt prezente n baza de date dar sunt
invalidate printr-un octet cu care ea se marcheaz tiindu-se c este tears. Aceste
nregistrri pot fi vizualizate sau nu dup dorin.
tergerea la nivel fizic face ca nregistrrile s dispar fizic din baza de date.
Marcarea pentru tergere se face prin comanda DELETE:
DELETE
[domeniu] [FOR expl1 ] [WHILE expl2] [NOOPTIMIZE]
n care:
domeniu, FOR i WHILE identific nregistrrite care urmeaz s fie marcate pentru
tergere. Domeniul implicit este nregistrarea curent.
Accesul la nregistrrile marcate pentru tergere este controlat de comanda SET
DELETED cu sintaxa:
SET DELETED ON | OFF
Cnd este aleas opiunea ON nregistrrile marcate pentru tergere nu sunt
accesibile (accesibile cu OFF). Comenzile care acioneaz asupra unei singure
nregistrri sau au ca domeniu implicit nregistrarea curent nu sunt afectate de
aceast comand.
Funcia DELETED ([expc | expn]) returneaz .T. dac nregistrarea curent a fost
marcat pentru tergere.
expc - este aliasul bazei de date selectat, iar expn este numrul zonei de lucru al
acesteia
nregistrarea marcat pentru tergere nu este eliminat din baza de date i de
aceea se poate elimina acest marcaj prin comanda:
RECALL [domeniu] [FOR expl1] [WHILE expl2] (NOOPTIMIZEj
nregistrrile selectate n "domeniu" vor fi refcute pierzindu-i marcajul de
tergere.
tergerea fizic a nregistrrilor marcate pentru tergere se realizeaz prin:
PACK [MEMO] [DBF]
Comanda PACK poate fi oprit prin tastarea tastei ESC i baza de date este refcut.
Dup ce a fost executat aceast comand, nregistrrile terse nu mai pot fi
refcute.
Dac o baz de date conine cmpuri (unul sau mai multe) memo, acestea sunt
reinute ntr-un fiier cu aceeai denumire dar cu extensia .FPT. tergerea acestui
fiier memo asociat se realizeaz cu clauza MEMO a comenzii PACK (care nu
afecteaz baza de date propriuzis). Utilizarea opiunii DBF duce la stergerea
nregistrrilor marcate din baza de date fr a afecta fiierul memo. Comanda fr
clauze se refer att la fiierul memo ct i la baza de date.
Comanda care realizeaz stergerea tuturor nregistrrilor dintr-o baz de date

(vidarea bazei de date, ea rmnnd doar cu structura), este:


ZAP
Aceast comand este mult mai rapid dect secvena:
DELE ALL
PACK
Comanda SET SAFETY ON OFF dirijeaz modul de execuie al confirmrii tergerii:
dac SAFETY este ON se va afia un mesaj de confirmare a tergerii, iar dac este
OFF, nu.
4.9 Indicatorul de nregistrri
La crearea bazelor de date se asociaz fiecrei baze de date o locaie de memorie
n care este memorat numrul nregistrrii curente. Aceast zon este tears la
nchiderea bazei de date. La deschiderea unei baze de date indicatorul de
nregistrare are ntotdeauna valoarea 1.
Exist o serie de comenzi i funcii care se refer la acest indicator de nregistrare
sau comenzi care in cont de indicatorul de nregistrare i eventual l modific:
Exemplu:
DISPLAY NEXT 2
Aceast comand afieaz urmtoarele 2 nregisfrri ncepnd cu cea curent i
avanseaz (crete) ndicatorul de nregistrare cu 2.
Functia RECNO([expn | expc]) returnaz numrul nregistrrii curente, expn, expc
reprezentnd numrul zonei de lucru respectiv alias-ul bazei de date deschise.
Comanda SKIP [expn] [IN expn2 IN expc] indic modificarea indicatorului de
nregistrare cu expn nregistrri (expn putnd avea valori pozitive sau negative
ntregi). Dac valoarea lui expn este negativ, indicatorul de nregistrare scade cu
expn, iar dac este pozitiv crete cu acelai numr. Comanda fr argumente
nseamn creterea cu 1 a indicatorului de nregistrare adic avansarea pe
nregistrarea urmtoare. Expresiile IN expn2, IN expc indic zona de lucru n care
este deschis baza de date.
Comanda GO, sau GOTO este folosit de asemenea pentru modificarea indicatorului
de nregistrare (adic pentru deplasarea n interiorul bazei de date). Ea are
urmtoarele forme:
GO 1 - deplasare pe prima nregistrare
GO TOP - idem
GO BOTTOM - deplasare pe ultima nregistrare
GO RECORD expn - deplasare pe nregistrarea expn
Sintaxa acestei comenzi este:
GO | GOTO [RECORD] expn1 [IN expn2] | [IN expc] i
GO | GOTO TOP | BOTTOM [IN expn2] | [IN expc]
Clauza record este opional i nu schimb execuia comenzii. A fost introdus
pentru ca aceast comand s sune mai bine n limba englez. Funciile BOF() i
EOF() avnd sintaxele:
BOF ([expn] | [expc])
EOF ([expn] | [expc])
testeaz dac indictorul de nregistrare se afl la nceputul bazei de date selectat
n zona expn sau precizat prin alias (BOF) sau la sfritui acesteia (EOF), Numru!
de nregistrri dintr-o baz de date este returnat de functia:
RECCOUNT([expn] | [expc])
iar dimensiunea unei nregistrri se obine folosina funcia;
RECSIZE([expn] | [expc])
Dac nu se indic o alt baz de date aceste funcii se refer la baza de date activ
din zona curent.
4.10 Cutarea nregistrrilor. Accesul la nregistrri

n FoxProW exist posibilitatea de a bloca accesul l unele nregistrri, Aceast


blocare se face doar pentru durata de aciune a unei comenzi i nceteaz cnd
acest lucru nu mai este dorit (printr-o comand). Comanda care realizeaz accesul
doar la unele nregistrri nepermind accesul la altele este comanda SET FILTER cu
sintaxa:
SETFILTER TO [expl]
expl - este o expresie logic. Pentru toate nregistrrile pentru care expresia logic
este .T. este permis accesul, iar pentru cele pentru care expresia este .F. nu este
permis.
Exemplu;
USE MFIE
SET FILT TO valoare <1000000.and.valoare>100000
BROW
Prin acest ir de comenzi se permite accesu! (vizualizat n browse) doar pentru
mijloacele fixe cu valoare cuprins ntre 100000 i 10000000. Aceasta nu nseamn
c celelalte mijloace fixe dispar din baza de date dar acestea nu pot fi accesate (nu
ne intereseaz) n acest moment. Comanda;
SET FILTER TO
(fr condiie) face ca efectul comenzii s dispar (s fie anulat filtrarea) i s
poat fi accesate toate nregistrrile existente.
Pentru a afla condiia de accesare a nregistrrilor se poate folosi funcia:
FILTER ([expn] | [expc])
unde expn sau expc definete zona de lucru n care se testeaz modul de acces la
nregistrri.
Cutarea unei nregistrri apare ca o problem practic deseori n realitatea
economic. Dac ne intereseaz de exemplu care sunt mijloacele fixe ce au o
anumit valoare atunci putem folosi metoda filtrrii;
SET FILTER TO VALOARE = vvv iar apoi putem folosi o metod de vizualizare
(browse sau list) pentru a alege din mulimea nregistrrilor pe cea cutat.
Sau se d o condiie care nu este ndeplinit dect de o nregistrare i atunci
aceasta va fi cea vizualizat. (de exemplu numele mijlocului fix). Exist ns i o alt
posibilitate, dat de comanda:
LOCATE FOR expl1 [domeniu] [WHILE expl2]
[NOOPTIMIZE]
Acest comand caut prima nregistrare care ndeplinete condiia expl1 n baza
de date activ. Domeniul implicit al nregistrrilor este ALL i se poate indica o
condiie (expl2) pentru a limita domeniu! nregistrrilor.
Dac se gsete o nregistrare, FoxProW se poziioneaz pe ea (poziioneaz
indicatorul de nregistrare) iar funcia FOUND() ia valoarea .T. n cazul n care nu
este gsit o astfel de nregistrare, indicatorul de nregistrri se poziioneaz pe
sfritul fiierului, funcia FOUND() ia valoarea .F. iar funcia EOF () ia valoarea .T.
(pentru c indicatorul se gsete la sfritul fiierului).
n cazul n care s-a gsit o nregistrare i exist mai multe nregistrri ce satisfac
aceast condiie, urmtoarele pot fi gsite cu comanda:
CONTINUE
Aceast comand caut urmtoarea nregistrare care satisface condiia din ultima
comand LOCATE.
Funcia:
FOUND ([expn] | [expc])
este folosit pentru testarea rezultatulul unei cutri ntr-o baz de date. Ea
returneaz .T. dac nregistrarea a fost gsit i .F. n caz contrar, expn i expc
reprezint zona de lucru n care a fost deschis baza de date n care s-a fcut
cutarea.
O alt metod de cutare ntr-o baz de date este cea ce utilizeaz funcia
LOCKUP () cu urmtoarea sintax:

LOCKUP (cmp1, expr, cmp2 [,expC])


n care;
cmp1 - reprezint cmpul a crui valoare va fi retumat de funcie, n caz de
cutare terminat cu succes;
expr - specific expresia de cutat n baza de date;
cmp2 - se folosete pentru a realiza cutarea expresiei numai n acest cmp;
expc - este utilizat pentru bazele de date indexate i va fi discutat mai trziu.
Rezultatu! funciei este de tip ir de caractere, numeric, logic sau dat
calendaristic, n funcie de tipul cmpului returnat.
Exemplu:
S se afieze numele primului mijloc fix "AUTO" din baza de date MIFIX
USE MFIX
LOCKUP (denumire, 'AUTO'.tip)
? denumire
Autocamion M200
use
Cutarea n bazele de date se face deosebit de eficient folosind alte comenzi
specifice bazelor de date indexate i vor fi tratate ulterior.
4.11 Cmpurile memo i general
n memorarea datelor ntr-o baz de date exist situaii n care dimensiunea unor
cmpuri difer foarte mult de la o nregistrare la alta. n acest caz cmpul trebuie
declarat cu lungimea cea mai lung i se face risip de suport magnetic. De aceea
s-a introdus cmpul memo care permite memorarea datelor de acest fel mult mai
eficient.
O baz de date ce conine un cmp memo, are un fiier asociat n care sunt depuse
datele din cmpul memo. De asemenea n baza de date, n locul cmpului memo, se
memoreaz toate informaiile necesare (de exempiu poziia primului caracter al
cmpului respectiv).
Accesul !a datele respective se face astfel:
- se selecteaz nregistrarea dorit i se citesc datele din baza de date respectiv
din cmpul memo;
- cu ajutorul datelor nscrise n cmpul memo se gsesc datele corespunztoare din
fiierul asociat i se citesc i acestea ncrcarea datelor n cmpul memo se face
astfel:
- se gsete un spaiu liber n fiierul asociat (memo) i se ncarc aceste date n
spaiul respectiv;
- se completeaz baza de date cu nregistrarea dorit, n cmpul memo respectiv i
se actualizeaz acest fiier cu toate datele necesare localizrii n fiierul memo a
respectivelor date.
Aceste operaii sunt transparente pentru utilizator, FoxProW controlnd n ntregime
acest mecanism.
ncrcarea unor date ntr-un cmp memo se poate face fie de ctre utilizator
(introducere caracter cu caracter, ntr-o fereastr de editare) fie prin citirea acestora
dintr-un fiier sau din memoria calculatorului.
Prima metod se realizeaz dup cum urmeaz:
- se deschide o fereastr de editare pentru modificarea coninutului bazei de date
(CHANGE, EDIT, BROWSE sau APPEND);
- se poziioneaz cursorul pe cmpul memo dup care se apas CTRL/PgDn sau cu
mouse-ul se apas butonul stng al acestuia de dou ori (dublu c!ic) i apare
fereastra de editare a cmpului memo.
- n fereastr se introduce coninutul cmpului
- se apas CTRL/W pentru salvarea modificrilor n baza de date, sau prin apsarea

tastei ESC cnd nu sunt salvate modificrile dar se asigur ieirea din fereastra de
editare.
Se poate folosi i comanda:
MODIFY MEMO cmp memo1 [,cmp memo2...]
[NOEDIT] NOWAIT] [RANGE expn1,expn2]
[WINDOW nume fereastr]
[IN [WINDOW] | nume fereastr |screen]
[SAME] [SAVE]
unde:
cmp memo1 (cmp memo2, ...) reprezint cmpuriie memo pentru care se vor
deschide ferestre de editare, cte una pentru fiecare cmp. Se pot specifica
cmpuri i din alte baze de date dect cea activ, specificndu-se alias-ul
corespunztor.
NOEDIT - nu permite modificarea cmpului memo ci doar vizualizarea sa
NOWAIT - se folosete n interiorul unui program i are ca efect continuarea
execuiei programului pe timpul efecturii modificrilor
RANGE expn1, expn2 - are ca efect selectarea doar a unei portiuni din cmpul
memo i anume cea ncepnd cu caracterul expn1 i pn la caracterul expn2
exclusiv
Clauzele WINDOW, IN WINDOW, IN SCREEN se vor trata cnd se va trata n
continuare capitolul FERESTRE l MENIURI.
SAVE - se utilizeaz pentru a pstra fereastra pe ecran i dup ieirea din editare. i
acest opiune opereaz n cadrul unui program, neavnd efect altfel.
Inchiderea ferestrei se poate face folosind comanda:
CLOSE MEMO cmp memo1 [,cmp memo2...] [ [ALL]
O alt metod de a ncrca un cmp memo ntr-o baz de date este cea ce
utilizeaz comanda:
APPEND MEMO cmp memo FROM fiier [OVERWRITE]
Prin acest comand coninutul ntregului fiier cu numele "fiier" se adaug la
sfritul cmpului memo (numit "cmp memo&quot . Dac se include opiunea
OVERWRITE, atunci coninutul fiier va fi copiat peste coninutul cmpului "cmp
memo", pe care-l va nlocui.
Operaia invers (copierea coninutului unui cmp memo ntr-un fiier ASCII) se
realizeaz cu urmtoarea comand:
COPY MEMO cmp memo TO fiier [ADDITIVE]
n cazul c nu se specific nici o extensie pentru "fiier" acesta va avea extensia
TXT (implicit).
n mod normal coninutul cmpului memo va fi copiat peste coninutul "fiier",
vechiul coninut pierzndu-se. Dac se dorete adugarea la sfrit a acestui
coninut se folosete clauza ADDITIVE. Dac fiierul nu exist, el va fi creat.
Cu comanda REPLACE se poate nlocui un cmp memo cu altul dintr-o alt baze de
date.
Cmpurile memo sunt cmpuri de tip ir de caractere i asupra lor acioneaz toate
funciile pe iruri de caractere ca:
LEN(), ATLINE(), MLINE(), AT(), ATCLINE(), SUBSTR(),
ATC(), MEMLINES() etc.
Funcia:
MEMLINES (cmp memo) retumeaz o valoare numeric reprezentnd numrul de
linii ale cmpului memo
Funcia:
MLINE (cmp memo, expn1[,expn2])
unde:
cmp memo - este cmpul memo din care se extrage linia expn1 - este numrul
liniei care se extrage (dac nu exist, funcia returneaz irul vid)
expn2 - reprezint deplasamentul folosit la extragerea liniei adic se consider
cmpul memo ca ncepnd de la expn2+1-lea caracter.

Exemplu:
? MEMLINE (loc.fol)
3
?MLINE (loc_fol,2)
Strada Luceafrului Nr 164
?MLINE (loc_fol,2,3) '
ada Luceafrului Nr 164 |
Valorile retumate de funciile MEMLINE() i MLINE() sunt influenate de comanda SET
MEMOWIDTH cu sintaxa;
SET MEMOWIDTH TO expn j
Comanda limitez numrul caracterelor afiate din cmpurile memo la rnaximum
expn caractere (ca i cnd cmpul ar avea maxim expn caractere).
Acest cornand stabilete i lungimea maxim de afiare a cmpurilor memo n
comenzile:
LIST, DISPLAY, ?, ?? i influeneaz de asemenea funciile ATCLINE() i ATLINE().
Aceast comand acioneaz i asupra irurilor de caractere cu lungime de peste
254 octeti. Valoarea implicit pentru aceast comand este 50, iar vaioarea admis
trebuie s fie mai mare sau egal cu 8. Valoarea lui expn poate depi 256 dar
valoarea de afiare pe ecran va fi limitat la 256 caractere.
CMPURILE DE TIP GENERAL
Unul din mecanismele specifice Windows-ului i acestei versiuni FoxPro o reprezint
mecanismul OLE (Object Linking and Embedding - Legare i ncorporare de obiecte)
create cu alte aplicaii (Microsoft Excel, Microsoft Word etc) i utilizate n FoxProW.
Mecanismul OLE reprezint un set de protocoale de comunicare ntre aplicaii prin
intermediul crora o aplicaie poate folosi servicii oferite de alte aplicaii.
Introducerea unui obiect ntr-un cmp general poate fi fcut cu comanda cu
sintaxa:
APPEND GENERAL cmp_general FROM fiier
[LINK [CLASS identificator_server]
Acest comand duce la ncorporarea n cmpul de tip general al nregistrrii
curente o copie a fiierului (numit "fiier" ) realizat eventual cu o alt aplicaie.
CIauza LINK duce la "legarea" fiierului de baza de date, deci de introducerea unor
mijloace de identificare a fiierului respectiv (i nu la ncorporarea lui).
La specificarea numelui fiierului se va indica calea complet, iar numele se
introduce ntre ghilimele. Folosind clauza CLASS se va specifica n mod explicit
identificatorul clasei fiierului. De exemplu pentru fiierele EXCEL se va indica
extensia .XLS.
n tabelul urmtor se prezint identificatorii aplicaiilor utilizale frecvent:
TIP APLICAIE_________________________IDENTIFICATOR
--------------------------------------------------- -------------------------------------------Microsoft Excel CHART - grafic____________ExcelChart
Microsoft Excel Foaie de calcul____________Excel Worksheet
Microsoft Graph_________________________MSGraph
Microsoft Word 2.0______________________WordDocument
Microsoft Word 6.0______________________WordDocument.6
Microsoft Word Imagine__________________Word Picture
PaintBrush - Imagine____________________PBrush
imagine Bitmap_________________________Static Dib
Sunet_________________________________SoundRec
Fiier text______________________________Textfile
===============================================
Exemplu:
APPEND GENERAL cmpgen FROM c:exceItabel.xIs LINK

Aflarea coninutului unui fiier de tip bitmap sau al unui cmp de tip general se face
cu comanda:
@ Iin,col SAY fiier BITMAP | cmp_general
[STYLE expc1] [CENTER] [ISOMETRIC I STRECH]
[SIZE expn1, expn2]
Comanda afieaza pe ecranul FoxProW sau ntr-o fereastr utilizator imaginea
coninut n fiieruI de tip bitmap sau n cmpul camp_general.
- lin,col - reprezint coordonatele n care va fi plasat colul din stnga sus al
obiectului. Valorile lin,col sunt rnai mari dect 0 Ia afiarea pe ecran i mai mari
dect 1 Ia afiarea pe hrtie (la imprimant).
- STYLE expc1 - specific dac imaginea se dorete transparenta (expc1=T) sau
opac (expc1 =Q).
- CENTER - centrare n cadrul ecranului sau al ferestrei
- SIZE expn1, expn2 - specific dimensiunile imaginii (nalimea n linii respectiv
laimea)
- ISOMETRIC - dimensiunile imaginii vor fi modificate pstrnd proporiiIe astfel nct
aria ocupat s fie ct mai mare
- STRECH - aceIai lucru, astfel nct imaginea s ocupe o ct mai mare parte din
zona de afiare.
Exemplu:
@ 0,0 SAY d:foxprowsamplebook.bmp BITMAP CENTER
De obicei pornirea apIicaiei (server - care este aplicaia care a creat obiectul) se
face n scopul modificrii obiectului. n acest caz se poate folosi comanda:
@ lin,col SAY camp_gen VERB expn3 | expc2
Aceast comand va porni apIicaia (server) de modificare a obiectului din
cmp_gen. De exemplu n cazul cnd obiectul este creat cu Microsoft Word,
comanda va porni Word-ul pentru modificarea obiectului,
expn3 | expc2 reprezint codul comenzii care va fi trims aplicaiei. n cele mai
multe cazuri se folosete codul 0 sau EDIT care corespunde pornirii apIicaiei
pentru editarea obiectului.
Exemplu: @ 0,0 SAY camp_gen VERB 0
Cu acest comand este ncorporat documentul WORD numit camp_gen n
nregistrarea curent dup oprirea (ieirea din WORD) care este lansat Ia lansarea
acestei comenzi pentru editarea documentului (care a fost n prealabil creat).
Atenie! Un obiect legat de baza de date nu poate fi modificat prin aceast
comand.
Pentru a modifica, insera, sau terge un obiect de tip general se poate deschide o
fereastr asociat acestui camp folosind comanda:
MODIFY GENERAL camp_gen1 [,cmp_gen2 ...]
[NOMODIFY] [NOWAIT] [[WlNDOW fereastr1]
[IN WINDOW] fereastr2 | IN SCREEN]
Cu o singur comand se pot deschide mai multe ferestre asociate cmpurilor tip
general.
NOEDIT - obiectul nu poate fi modificat (doar vizualizat i copiat n clipboard)
NOWAIT - execuia unui program din care e lansat comanda nu se intrerupe
pe timpul existenei ferestrei
WINDOW - fereastra ia caracteristicile ferestrei care trebuie s fie definit,
IN WINDOW - fereastra este deschis n fereastra2 (fereastra printe) fr a prelua
caracteriticile acesteia.
ManipuIarea obiectelor coninute n cmpuri de tip general se poate face i prin
opiunea Insert object din submeniul Edit. Acesta este disponibil dac este activat
fereastra asociat unui camp general n care va fi introdus obiectul. Prin alegerea
opiunii Insert Object, pe ecran se va deschide o ferestr de dialog ce va solicita
caracteristicile obiectului.
Dac obiectul urmeaz s fie creat, se acioneaz declanatorul OK i este pornit
aplicaia selectat. La prsirea acesteia obiectul va fi inserat n camp. Dac a fost

creat anterior, i se specific denumirea i el va fi incorporat n cmp, prin


intermmediul declanatorului File.
Obiectele inserate prin intermediul opiunii Insert File sunt ncorporate n baza de
date i nu pot fi modificate dect prin intermediul FoxProW.
Modificarea obiectelor ncorporate sau legate Ia o baz de date, se face prin
intermediul optiunii Object, aflat sub opiunea Insert Object, n submeniul Edit.
Acest opiune este disponibil cnd fereastra asociata unui cmp de tip general
este activ. Prin alegerea acestei opiuni va fi pornit apIicaia respectiv.
Dac numele sau locul fiierului a fost modificat fa de acela al legrii la baza de
date, legatura trebuie refcut. Aceast operaie se realizeaz prin intermediul
opiunii Change Link din submeniul Edit.
Un obiect general poate fi transformat ntr-o imagine static folosind opiunea
Convert to Static din submeniul Edit. Opiunea este de asemenea disponibil dac
fereastra asociat este activ. Imaginea static poate fi vizualizat dar nu
modificat.
Dac este necesar pstrarea ntr-un cmp general a unei poriuni dintr-un
document, inserarea acestuia n cmp se poate face prin intermediul clipboard-ului.
Aceast operaie se realizeaz cu opiunea Paste Special din submeniul Edit.
Obiectul este introdus Ia acionarea declanatorului Paste Link prin legare Ia baza
de date.
4.12 Import / export de date
ImportuI de date reprezinta transferul de date ntre fisiere din afara sistemului
FoxPro (utilizate de alte sisteme) i bazele de date iar exportui reprezinta transferul
invers.
Sunt posibile doua tipuri de transfere;
1. Transfer ntre baze de date i alte fisiere, realizate cu comenzile: APPEND FROM,
COPY TO, IMPORT si EXPORT
2. Transfer intre baze de date i masive sau variabile de memorie realizate cu
comenzile APPEND FROM ARRAY, COPY TO ARRAY, SCATTER si GATHER.
Comanda:
APPEND FROM fisier | ? [FIELDS lista] [FOR expl]
[TYPE ] [DELIMITED | [WITH TAB | WITH delimit]
| WITH BLANK] [DIF | FWZ | MOD | PDOX | RPD | SDF |
SYLK | WK1 | WK3 | WKS | WR1 | WRS | XLS]
adauga la sfarsitui bazei de date active inregistrarile preluate din "fisier", sau din
fisierul selectat n fereastra deschisa cnd este mentionata clauza ?.
FIELDS - are ca efect preluarea doar a datelor prezente in cmpurile specifivate n
"lista"
FOR - selecteaza din nregistrari doar pe acelea care satisfac condiia "exp!"
TYPE - este inclus pentru specificarea tipului fisierului sursa cnd acesta nu este un
fisier FoxPro. Daca fisierul este ASCII se poate include clauza DELIMITED
unde:
WITH TAB - indic separarea cmpurilor prin tab-uri (chr(9))
WITH delimit - indic separatorul indicat prin "delimit"
WITH BLANK - cmpurile vor fi separate prin spaii.
Pentru toate aceste optiuni, sfritui de nregistrere este dat de sfritui de linie al
fisierului surs (chr(10)+chr(13)).
Tabelul de mai jos descrie fiecare clauz i tipul fiierului surs:
clauza______Programul generator_____extensia_____Explicatii
--------------------------------------------------- ----------------------------------------------DIF_________VisiCalc_______________DIF________colo- ane->campuri
FW2_______Framework II____________FW2

MOD_______M.Multiplan v4.01________MOD
PDOX______Paradox 3.5_____________DB
RPD_______Rapid File v 1.2__________RPD
SYLK______M.Multiplan______________-_________coloa- ne->campuri
WK1_______Lotus 1-2.3 _____________WK1
SDF______________________________TXT_______Fiier- ASCII nederminat de structura
bazei de date
WKS_______Lotus 1-2.3_____________WKS
WR1_______Lotus 1-2.3 _____________WR1
WRK_______Lotus 1-2.3 _____________WRK
XLS________Excel v 2.0______________XLS
=================================================
Transferul invers, de la baza de date la un alt fisier (exportui) se realizeaz cu
comanda:
COPY TO fiier [FIELDS lista] [FOR expl]
[domeniu] [ [WITH] CDX| [WITH] PRODUCTION ]
[NOOPTIMIZE] [WHILE exp2]
[TYPE] [FOXPLUS] [DIF | FWZ | MOD | PDOX | RPD | SDF |
SYLK | WK1 | WK3 | WKS | WR1 | WRS | XLS]
[DELIMITTED | [WITH TAB | WITH delimit] |WITH BLANK]
Clauzele au fost descrise n mare parte anterior.
WHILE - alaturi de FOR precizeaza condiiile ce se cer a fi ndeplinite de nregistrrile
ce se transfer (export).
Clauzele WITH CDX, WITH PRODUCTION, vor fi discutate mai jos (se refer la fiiere
indexate).
Clauzele WITH delimit se refera la delimitarea campurilor n fiierul ASCII rezultat n
urma comenzii. Exemplu:
Use Mfixe
copy to mfixe.txt all delimited with','
NOTE se creaza fiierul mfixe.txt cu nregistrarile bazei de date
APPEND from mfixe.txt all delimited with','
NOTE din fiierul creat anterior se adaug nregistrrile la sfaritui bazei de date
mfixe
USE
Comanda:
IMPORT FROM fiier
[TYPE] [FWZ | MOD | PDOX |RPD |
SYLK | WK1 | WK3 | WKS | WR1 | WRS | XLS]
copiaza fiierul surs "fisier" ntr-un fiier baz de date cu acelai nume (dar
extensia DBF) cu fiierul originar. Comanda:
EXPORT TO fiier [FIELDS list] [domeniu]
[FOR expl1] [WHILE expl2] [NOOPTIMIZE]
[TYPE] [FWZ | MOD | PDOX | RPD |
SYLK | WK1 | WK3 | WKS | WR1 | WRS | XLS]
copiaz nregistrrile selectate prin clauzele FOR i WHILE din baza de date activ n
"fiier", Clauzete au fost explicate.
Trebuie avut n vedere c sortarea (indexarea) unei baze de date dureaz cu att
mai mult cu ct ea este mai voluminoas. De aceea dac dorim s listm de
exemplu o parte din nregistrri este mai rapid s extragem o alt baz de date din
ea (cu comanda COPY de exemplu), s o sortm i apoi s o listm. Dac vom lucra
n memorie, (cu un masiv) vom avea o vitez i mai mare.
Comanda:
APPEND FROM ARRAY masiv [FOR expl] [FIELDS list]
adaug la baza de date activ nregistrri ce sunt preluate dintr-un masiv unde
"masiv"

6 septembrie 2008
0 comentarii
nici o evaluare
Capitolul 4-2.
4.13 Ordonarea (sortarea) unei baze de date
o
o
o

Ordonarea bazelor de date presupune luarea n consideraie a anumitor criterii i


aezarea nregistrrilor funcie de acestea. Aceasta se face n scopul unei gsiri mai
uoare i mai simple a nregistrrilor.
Acest lucru se realizeaz n FoxPro prin dou metode: sortare i indexare.
Sortarea presupune construirea unei alte baze de date cu nregistrrife ordonate
plecnd de !a baza de date ce se ordoneaz.
Indexarea presupune construirea unui fiier ataat bazei de date care conine.
informaiile privind ordinea nregistrrilor din baza de date.
Comanda SORT realizeaz sortarea bazelor de date:
SORT TO fiier ON cmpl [/A] [/D] [/C]
[,cmp2 [/A] [/D] [/C]...] [ASCENDING] [DESCENDING]
[domeniu] [FOR expl1] [WHILE expl2] [FIELDS LIST] [NOOPTIMIZE]
Comanda creeaz o nou baz de date sortat dup cmp1 eventual cmp2...
Clauza FIELDS precizeaz conditiile ce trebuie s le ndeplineasc nregistrrile
pentru a fi cuprinse n noa baz de date (ca i clauzele FOR i WHILE).
Clauzele /A i /D specific tipul de ordonare (crescror sau descresctor ca i
ASCENDING i DESCENDING).
Clauza /C se folosete pentru cmpurile iruri de caractere pentru a face sortarea
insensibil la caracterul literelor (majuscule sau minuscule). Se pot folosi;
construciile /AC sau /DC.
Exemplu:
use mfixe
SORT TO mfixe_s ON valoare /D data_pf/A for stare=.F.
use
Comanda index realizeaz construirea fiierului index care conine ordinea
nregistrrilor n baza de date care nu se modific,
INDEX ON expr TO fiier.idx TAG nume etichet
[OF fiier.cdx] [FOR expl] [COMPACT]
[ASCENDING] [DESCENDING] [UNIQUE] [ADITIVE]
Cheia de ordonare se numete n acest caz cheie de indexare i se specific n
expresia "expr", aceasta coninnd cmpuri din baza de date activ dar nu, cmpuri
memo.
Fiierul index va fi de tipul .idx n cazul fiierelor simple sau .cdx n cazul unui fiier
index compus care poate conine mai multe chei de indexare fiecare corespunznd
unui criteriu de ordonare. Fiecare criteriu este identificat prin eticheta asociat ce se
specific n comanda index prin dauza TAG fr introducerea unui nume de fiier cu
clauza OF.
Fiierele compuse pot fi:
- structurale - care sunt deschise i asociate automat bazei de date odat cu
deschiderea acesteia. Acestea au acelai nume cu cel a! bazei de date, extensia
fiind .cdx i sunt create folosind clauza TAG fr nume de fiier n clauza OF. '
- nestructurale - care poart alt nume dect cel al bazei de date, nu sunt deschise
automat, i trebuie precizat numele n clauza OF,
COMPACT - are ca efect crearea de fiiere compacte cu care pot fi accesate mai
rapid nregistrrile i fiierele au dimensiune mai mic.
Clauza UNIQUE indic modul de actiune n cazul cheilor multiple. n cazul n care
avem dou sau mai multe nregistrri i este precizat clauza UNIQUE, va putea fi
accesat numai una din nregtsirri.
Cele mai performante sunt fiierele index compuse structurale, compacte.
Modul de lucru cu o baz de date indexat este:

- se creaz fiierul index asociat bazei de date;


- se deschide baza de date cu indexul asociat (dac este un index structurat
compus - se deschide automat, altfel trebuie precizat indexul la deschidere n clauza
INDEX);
- se realizeaz operaiile dorite asupra bazei de date. Modificarea coninutului bazei
de date atrage implicit modificarea indexilor corespunztori (doar a celor deschii);
- se nchide baza de date (automat se nchid indexii).
Exemplu:
USE MFIXE
INDEX on cod TAG to tcod
INDEX on valoare TAG tvaloare
INDEX on amortizare TAG tamortizare
INDEX on stare TAG tstare
NOTE se indexeaz baza de date ntr-un index structural compus n care se introduc
patru etichete corespunztoare ordonrilor respective. Pentru deschidere sintaxa
comenzii USE este:
USE [fiier | ?]
...
[INDEX Iist |? [order [expn] |fiier..idx
[TAG] nume etichet [OF fiier cdx] |
[ASCENDING | DESCENDING] ] ] ]
La deschiderea bazei de date se vor deschide i fiierele precizate n list (nu se
include extensia dect dac ar fi altfel pericol de confuzie), separate prin virgul.
Dac nu se specific clauza ORDER atunci prirnui fiier din list va fi activ. Dac
este un fiier compus, nregistrrile vor fi accesate n ordinea fizic din baza de
date. Clauza ORDER determin fiierul index simplu (.idx) care va deveni activ.
Prin ORDER [ [tag nume etichet ] [OF fiier.cdx] ] se determin care fiier (care
etichet) va deveni activ.
Dac se dorete selectarea unei etichete dintr-un index compus nestructural i
exist aceeai etichet ntr-un index compus structural, se va folosi clauza OF n
care se va preciza fiierul index compus.
Dac se dorete deschiderea unor fiiere pentru baza de date activ dup ce
aceasta a fost deschis, se folosete comanda:
SET INDEX TO [list fiiere index |?]
[ORDER expn|fiier.idx|
TAG eticheta [of fiier.cdx]
[ASCENDING | DESCENDING] ] [ADDITIVE]
Avnd deschise mai multe fiiere index, pentru a schimba ordinea de accesare a
nregistrrilor (setarea indexului activ), se folosete comanda:
SET ORDER TO expn1|fiier.idx | [TAG] etichet
[OF] fiier.cdx] [IN expn2 | expc]
[ASCENDING | DESCENDING]
Clauza IN se utilizeaz atunci cnd comanda se refer la alt baz de date dect
cea activ, cu aliasul expc sau din alt zon de lucru (expn2).
La crearea unui fiier index sau a unei etichete pentru un index, fiecrei nregistrri
i va corespunde o valoare a cheii de indexare. Pot aprea situaii n care mai multe
nregistrri corespund la aceeai valoare a cheii de indexare aprnd astfel
problema accesului la nregistrrile cu aceeai valoare a cheii. n acest caz se poate
folosi comanda SET UNIQUE cu sintaxa:
SET UNIQUE ON | OFF
Cu opiunea ON nu se includ n fiierul index chei duble spre deosebire de OFF.
Inchiderea fiierelor index se poate realiza cu;
CLOSE INDEX
cnd sunt nchise toate fiierele index (fr a nchide bazele de date) din zona de
lucru curent.
Pentru reindexarea bazelor de date (operaie necesar dac se pierd indexii, din

cauza unor incidente cum ar fi ntreruperi de alimentare cu energie electric) se


deschid bazele de date i indexii corespunztori i este utilizat comanda;
[REINDEX COMPACT]
Funcii referitoare la indexarea bazelor de date:
NDX (expn1 [,expn2 , expc])
Aceast funcie returneaz numele fiierelor index simple (.idx) deschise ntr-o zon
de lucru preciznd aliasul fiierului asociat sau zona de lucru (expn2), fiien index
respectiv fiind identificat prin "expn 1".
CDX (expn1 [,expn2 |expc])
MDX (expn1 [,expn2 |expc])
Funciiie CDX() i MDX() sunt identice i se utilizeaz pentru fiiere compuse (.CDX).
Rezultatul acestor funcii este un ir de caractrere (irul nul, dac nu corespunde
nici unui fiier index expresiei expn1).
Exemplu:
USE MFIXE inde mfixe_n ,mfixe_d.cdx, mfixe.cdx
?NDX(1)
c:FOXmfixe_n.idx
?MDX(1)
c:FOXmfixe.cdx
?CDX(2)
c:FQXmfix_d.cdx
CLOSE ALL
Ordinea de accesare a unei baze de date indexate este stabilit fie de fiierul index
simplu activ, fie de eticheta index activ dintr-un fiier index compus. Toate fiierele
index simple i toate fiierele index ce sunt deschise la un moment dat pentru o
baz de date, sunt grupate ntr-o list numit lista indexilor bazei de date, care se
alctuiete la deschiderea indexilor. Modul de alctuire a listei este determinat de
comenziie USE ... INDEX i SET INDEX TO astfel:
- mai nti se pun n list fiiereie index simple n ordinea apariiei lor n comenzile
amintite;
- apoi sunt puse n list etichetele din fiieru! structural (compus) n ordinea definirii
acestora;
- ultimele apar etichetele din celelalte fiiere index compuse dup cum apar acestea
n comenzi, ordinea etichetelor fiind cea a definirii lor.
Funcia:
TAG ([fiier.cdx] expn1 [,expn2[expc] ])
se poate folosi pentru a afla numele unui fiier index simplu sau al unei etichete de
pe o anumit poziie din list sau pentru a afla numele unei etichete dintr-un fiier
index specificat.
expn2 sau expc se specific zona de lucru. Specificarea clauzei fiier.cdx are ca
efect returnarea numelui etichetei a expn1-a din fiierul index compus fiier.cdx.
Numrarea etichetelor ncepe cu 1 pentru prima etichet definit.
Pentru aflarea numelui fiierulu! index simplu sau al etichetei index active din
fiierul index compus, se folosete funcia:
ORDER ([expn1 | expc [,expn2] ])
Rezultatul funciei este un ir de caractere coninnd numele fiierului respectiv,
identificat prin expn1 (numrul zonei de lucru) sau aliasul ei (expc). Dac expn2
este prezent, funcia va returna numele fiierului index simplu sau numele
etichetei active, iar dac nu, va returna numele elementului activ din fiierul index.
Exemplu:
use mfixe index mfixe_n, mfixe_d, mfixe order tcod
?order()
TCOD
set order to tvaloare
?order(),' ',order(1,0)
c:FOXmfixe.cdx tvaloare

O funcie asemntoare cu TAG() este functia SYS(21) care are acelai efect.
Pentru a afla cheia de indexare a unui fiier index se utilizeaz funcia:
KEY ([fiier.cdx,] expn1 [,expn2 | expc ])
n care expn1 reprezint numrul de ordine al fiierului index simplu sau al etichetei
fiierului index compus n lista de indexi ai bazei de date, iar expn2 i expc
reprezint zona n care se afl baza de date.
Rezultatul funciei este un ir de caractere care precizeaz cheia index.
Exemplu:
USE NOM inde indnom
?KEY (1)
str(codmater,8)
USE
La comanda INDEX poate fi fotosit clauza FOR (ca o condiie de filtrare a
nregistrrilor).
Aflarea acestei condiii de filtrare se poate face prin intermediul funciei:
SYS (2021,expn1[ ,expn2 | expc])
Aceast funcie returneaz expresia logic folosit la filtrarea nregistrrilor la
crearea fiierului index specificat prin expn1 din zona de lucru indicat prin expn2
sau expc.
Trecerea de la un index simplu la o etichet de fiier index compus se realizeaaz cu
comanda:
COPY INDEXES list fiiere index | ALL
[TO fiier.cdx]
Fiierele asupra crora acioneaz comanda trebuie s fie deschise n zona de lucru
curent.
Aceast comand creaz (transform) fiierele index simple n etichete ale fiierului
structural sau ale fiierului index compus "fiier.cdx", n cazul c se introduce clauza
TO.
Operaia invers poate fi fcut cu comanda:
COPY TAG nume etichet [OF fiier.cdx]
[TO fiier.cdx]
Comanda copiaz eticheta "nume etichet" n fiierul index simplu fiier.idx.
Eticheta este cutat n fiierul index structural al bazei de date, apoi continu cu
celelalte fiiere index compuse deschise pentru baza de date activ.
Folosind aceast comand eticheta rmne n continuare n lista de indexi ai bazei
de date. Pentru tergerea ei din fiierul index compus se folosete comanda:
DELETE TAG nume etichet [OF fiier.cdx]
[, nume etichet2 [OF fiier2.cdx]...]
sau
DELETETE TAG ALL OF [fiier.cdx]
Comanda terge etichetele "nume etichet1, 2 ..." din fiierele index compuse
deschise n zona de lucru curent, Conflictul care apare cnd se gsesc dou
etichete cu acelai nume se rezolv prin includerea clauzei OF, cu fiierul compus n
care se va cuta eticheta corespunztoare.
Clauza ALL terge toate etichetele deci terge fiierul .cdx.
Cutarea unei nregistrri ntr-o baz de date indexat se realizeaz n mod
deosebit de rapid cu ajutorul comenzii SEEK sau a funciei SEEK():
SEEK expr
Aceast comand caut n baza de date activ, obligatoriu indexat i cu indexul
acesteia deschis i activ, nregistrarea pentru care cheia de indexare ia valoarea
expr. Dac este gsit o astfel de nregistrare, indicatorul de nregistrri se va
poziiona pe acea nregistrare iar funcia FOUND() va lua valoarea .T., funcia EOF()
va returna valoarea .F. n caz contrar funcia FOUND() va returna valoarea .F. i
indicatorul de nregistrri se va poziiona pe ultima nregistrare iar funcia EOF() va
retuma valoarea .T.
Comanda este influenat de comanda SET NEAR ON | OFF

Dac SET NEAR este ON, n caz de cutare euat, indicatorul de nregistrri se
poziioneaz pe nregistrarea imediat urmtoare celei cutate, iar funcia va returna
numrul acestei nregistrri (care este nregistrarea cu valoarea cheii cea mai
apropiat de valoarea cutat).
Comanda SEEK realizeaz acelai lucru ca i comanda LOCATE dar ea lucreaz
numai pentru baze de date indexate, este mult mai rapid datorit unor tehnici
speciale de cutare i este foarte utilizat din acest motiv.
Funcia SEEK () retumeaz .T. sau .F. funcie de rezuitatul cutrii. Ea are sintaxa:
SEEK (expr [,expn | expc])
"expr" reprezint expresia cutat (valoarea cutat pentru cheie) iar expn i expc
reprezint zona de lucru n care se gsete baza de date n care se caut aceast
valoare.
Exemplu:
USE NOM INDE INDCOD
Seek ' 3000005'
?FOUND()
.T.
disp
codmater denumire pret stoc
3000005 AMBALAJ 350.55 500
Use
4.14 Extragerea de informai statistice
n practic, de multe ori este necesar s obinem diverse informaii despre
totalitatea datelor din bazele de date sau informaii despre un grup de date. Aceste
date se pot obine printr-o serie de comenzi ce ofer date statistice privind bazele
de date ca:
1, Numrul datelor din baza de date:
COUNT [domeniu] [FOR expl1 ] [WHILE expl2]
[TO var] [NOOPTIMIZE]
Aceast comand numr nregistrrile din domeniul precizat (sau toate - implicit),
respectnd pentru nregistrrile numrate conditiile FOR i WHILE, i depunnd
rezultatul n variabila var care va fi creat dac nu exist
Exemplu:
USE MFIXE
COUNT for valoare >100000 to nrm
use
2. nsumeaz anumite valori din baza de date:
SUM [list expresii]
[domeniu] [FOR expl1] [WHILE expl2]
[TO list variabile | TO ARRAY masiv] [NOOPTlMIZE]
nsumeaz anumite expresii formate cu cmpurile bazei de date respectnd
condiiile impuse i depunnd rezultatul nsumrii n lista de variabile (cte una
pentru
fiecare expresie) sau n masivul "masiv".
Exemplu:
USE mfixe
SUM amortizare.valoare to valam.valtot
? 'S-a amortizat '.valam*100/valtot,'% valoare total ',valtot
S-a amortizat 42,33% valoare total 150954564
USE
3. Calculul mediei aritmetice a unor valori:
AVERAGE [list expresii] [domeniu] [FOR expl1] [WHlLE expl2]
[TO list variabile | TO ARRAY masiv] [NOOPTIMIZE]
Aceast comand este asemntoare cu comanda anterioar calculnd media

aritmetic a expresiilor formate cu cmpuri din baza de date. '


Exemplu;
AVERAGE valoare FOR categorie=2 to medval
Acelai lucru se poate obine cu comenziie SUM i COUNT i mprind suma
la numrul nregistrrilor.
4. O serie de calcule se pot realiza cu comanda:
CALCULATE [list expresii]
[domeniu [FOR expl1[WHILE expl2]
[TO list variabile TO ARRAY masiv] [NOOPTIMIZE]
Diferena fa de comenzile SUM i CALCULATE este c aceast comand poate
efectua mai multe tipuri de calcule i c n lista de expresii pot fi introduse
urmtoarele formulri:
- AVG expn - calculeaz media aritmetic
- CNT () - nsumeaz nregistrrile
- MAX expr - returneaz valoarea maxim
- MIN expr - returneaz valoarea minim '..
- NPV (expn1, expr2 [,expn3]) - calculeaz valoarea prezent net a unei serii de
pli diminuat la o rat a dobnzii constant. expn1 reprezint rata dobnzii iar
expn2 reprezint expresia care calculat pentru o nregistrare selectat, ne d o
plat din seria de pli considerate, expn3 reprezint valoarea iniial a investiiei.
Dac aceasta lipsete, investiia iniial va fi dat de prima nregistrare selectat.
- STD expn - calculeaz deviaia standard a valorii expn (prezent n nregistrri ca
un cmp).
- SUM expn - calculeaz suma valorilor lui expn
- VAR expn - calculeaz abaterea medie ptratic medie (deviaia standard la
ptrat)
Exemplu:
USE MFIXE
CALCULATE AVG(amortizare) to medamort USE
De asemenea exist comanda TOTAL care creaz o nou baz de date cu aceeai
structur ca i o baz de date dat, activ, cu nregistrri care conin totalul unor
nregistrri din baza de date activ. Aceast baz de date trebuie s fie sortat
dup criteriul de totalizare i va totaliza toate nregistrrile care au aceeai valoare
n aceast cheie. Sintaxa comenzii este:
TOTAL TO fiier ON expr [FIELDS list cmpuri]
[domeniu] [FOR expl1] [WHlLE expl2] [NOOPTIMIZE]
Comanda va crea o nou baz de date (fiier) cu aceeai structur ca a bazei active,
n care se vor ncrca nregistrri totalizatoare obinute din aceasta. Baza de date
activ trebuie s fie ordonat fizic sau prin indexare dup cheia expr.
Fiecare grup de nregistrri care au aceeai valoare a cheii de indexare (a expresiei
"expr" ) va genera o singur nregistrare n baza de date "fiier" n care nsumarea
cmpurilor va fi fcut pentru cele prezente n clauza FIELDS sau pentru toate
cmpurile numerice din baza de date dac a fost omis aceast clauz.
Exemplu:
Considerm baza de date cu stuctura:
pltitor primitor suma
Toni Sandu 2000
Toni Norina 3000
Andrei Sandu 3000
Andrei Maria 5000
Andrei Norina 4000
Aceast baz de date numit "plti" va genera o baz de date nou, centralizatoare
numit "totplti":
use plti
TOTAL TO totplti ON pltitor use
Va rezulta o baz de date numit totplati care va conine;

Pltitor primitor suma


Toni Sandu 5000
Andrei Sandu 12000
4.15 Relaii ntre bazele de date
S considerm o baz de date care cuprinde materialele intrate ntr-o magazie de
materiale dintr-o intreprindere. Deoarece acelai material poate s intre n zile
diferite, de mai multe ori, este ineficient ca n acest baz de date s avem
informaii ca denumirea materialului, preul etc. Aceste elemente le vom grupa ntro alt baz de date iar legtura nre ele o vom realiza dup un cmp comun numit
cod material. Atunci cnd ne intereseaz denumirea materialului pe baza codului
materialului ne vom deplasa n cealalt baz de date i la codul respectiv vom gsi
denumirea realiznd astfel o important economie de spaiu de memorare.
Aceast problem se rezolv n mod elegant prin crearea unor relaii ntre bazele de
date prin care cele dou (sau mai multe) baze de date sunt vzute ca una singur,
avnd toate elementele necesare.
Una din cele dou baze de date este numit baz "printe" deoarece n ea se fac
cutrile noastre iar cealalt se numete baz "copil" care este subordonat primei.
n momentul parcurgerii bazei de date printe, indicatoru! de nregistrare se va
deplasa automat n baza copil pe nregistrarea corespunztoare cu care este pus n
relaie.
n literatura de specialitate bazele de date ntre care s-au stabilit diverse relaii se
numesc baze de date complexe.
Modul de lucru cu astfel de baze de date este urmtorul:
- se deschid bazele de date, ntre care se vor stabili relaii, fiecare n cte o zon de
lucru;
- se stabilesc relaiile ntre aceste baze de date. Baza de date copil trebuie s fie
indexat corespunztor cu aceeai cheie de indexare cu cea a relaiei;
- se execut operaiile asupra acestor baze de date (adugare, modificare,
consultare etc);
- la sfrit se nltur relatiile stabiiite i se nchid bazele de date.
Stabifirea relaiilor se realizeaz n FoxPro cu ajutorul comenzii:
SET RELATION TO [expr1 INTO expn1 | expc1
[,expr2 INTO expn2 | expc2]...] [ADDITIVE]
Prin aceast comand se stabilete o relaie ntre o baz de date considerat
printe (baza de date activ) i una sau mai multe baze de date considerate copii
specificate prin numrul zonei n care sunt deschise sau aliasurile lor relaia fiind
indicat prin expresia "expr1", "expr2" etc. n general aceste expresii reprezint un
cmp comun bazei de date printe i copil i de asemenea cheia de indexare a
bazei de date copii.
Relaiile ntre bazele de date pot fi de mai multe tipuri:
- relaie unu la mai multe, cnd unei nregistrri n baza printe pot s-i corespund
mai multe nregistrri n baza de date copil. n acest caz indicatoru! de nregistrare
n baza de date copil se poziioneaz pe prima nregistrare din cele relaionate.
- relaie mai multe la mai multe, cnd n baza de date printe indicatoru! de
n.registrare fiind pe una din nregistrn, n baza copil acesi indicator se
poziioneaz pe prima nregistrare relaionat.
Cu comanda:
SET SKIP TO [alias1 [,alias2]...]
o relaie de tipul unu la unu se poate transforma n unu la mai multe. n acest caz
cutnd o nregistrare n baza de date printe, indicatorul de nregistrri se
pozitioneaz pe prima inregistrare n baza de date copil. La o comand SKIP
indicatorul de inregistrri nu se mut n nregistrarea printe ci n nregistrarea
copil, acest lucru ntmplndu-se pn cnd relaia stabilit rmne n vigoare
(cheia de relaie nu se modific).

Exemplu: Considerm baza de date NOM cu cmpurile cod, denumire i pret i baza
de date MISC cu cmpurile cod, magazie, cantitate i tip (tip micare poate fi 1 sau
E).
USE MISC IN A
USE NOM IN B
SELE NOM
inde on cod to indnom
sele misc
set rela to cod into nom
brow
sele nom
brow
close data
Se va vedea c cele dou browse-uri fiind pe ecran, n momentul n care ne plasm
n baza de date printe (MISC), ne vom deplasa pe nregistrarea corespunztoare
automat n baza de date NOM. (Cu CTRL/F1 ne putem deplasa ntre cele dou
ferestre browse pentru a studia modul de aciune al comenzii).
Pentru nlturarea unei relaii se utilizeaz comanda:
SET RELATION OFF INTO expn | expc
Acest comand terge doar relaiile indicate ntre baza de date activ i baza de
date copil indicat prin expn respectiv expc (alias) spre dosebire de:
SET RELATION TO
care terge toate relaiile existente.
Pentru aflarea cheii dintr-o relaie ntre dou tabele se folosete funcia:
RELATION (expn1 [,expn2 | expc])
Functia retumeaz un ir de caractere reprezentnd expresia cheie stabilit ntre
baza de date activ i cea specificat prin expn2 sau expc (numrul zonei n care
este deschis sau aliasul respectiv) pentru relaia a expn1-a.
Numerotarea relaiilor ncepe cu prima relaie ce se stabilete pentru o baz de date
i se continu cu a doua, a treia amd. Functia RELATION (2,B ) va retuma a 2-a
relaie a bazei de date active, cu baza de date deschis n zona B.
Fucia cu sintaxa:
TARGET (expn1 [,expn2 |expc])
returneaz un ir de caractere reprezentnd aliasul cu care baza de date activ se
afl n relaia a expn1-a, n ordinea definirii relaiilor, sau dac dorim s ne referim !
a o alt baz de date dect cea activ o vom preciza prin zona n care ea este
deschis sau prin aliasul su.
Deci pentru a afla aliasul bazei cu care baza de date din zona B se afl n relaia a 2a, vom folosi funcia:
TARGET (2,B )
4.16 Fiiere de comenzi
Un fiier de comenzi reprezint un fiier ce contine un ir de comenzi, care n
general urmeaz s fie executate una dup cealalt. Aceste fiiere, care respect un
algoritm cu care ele au fost create (adic au o logic - urmresc s realizeze diverse
lucruri) poart numele de programe. Ele sunt create n genera! de ctre utilizatori
folosind editorul de comenzi FoxPro.
Editorul de comenzi se lanseaz cu comanda:
MODIFY COMMAND fiier | ?
n urma lansrii acestei comenzi i face apariia pe ecran fereastra COMMAND care
are numele "fiier" i se poate introduce un text de la tastatur, sau n cea de a
doua form, apar vizualizate pentru selecie toate programele existente (? ). n
cazul n care programul nu exist ci urmeaz a fi introdus de la tastatur, fereastra
este vid, iar n cazul existentei sale n fereastr apar liniile programului care pot fi
modificate.

n cadrul ferestrei COMMAND ne putem deplasa prin textul care a fost editat cu
ajutorul tastelor sgei sau cu ajutorul mouse-ului. De asemenea exist posibilitatea
utilizrii submeniului edit pentru a copia zone de text, a le selecta, a le muta sau
copia etc,
n cadrul unui fiier de comenzi (pe care l vom numi n continuare program) sunt
introduse una dup alta o serie de comenzi, n ordinea n care dorim s fie
executate. Executarea lor nu se va face imediat (cum am fcut pn acum) ci se va
folosi comanda:
DO fiier [WITH [list parametri] IN fiier2]
n care fiier este numele programului de executat, iar list parametri reprezint
nite informaii care sunt transmise programului (din afara sa) pentru execuie. De
asemenea "fiier2" se folosete la execuia unor proceduri i va fi tratat mai jos.
n cazul unei comenzi DO se execut urmtoarele categorii de fiiere n ordinea
urmtoare (dac nu este precizat i extensia n comand):
FISIER.EXE dac el exist
Ff.SER.APP
FISIER.FXP
FISIER.PRG
n cazul lansrii comenzii modify command, fiierul care va fi creat (n cazul
absenei extensiei n comand) va fi cel cu extensia .PRG care este implicit.
Fiierele cu extensia .FXP se obin din fiierele .PRG n urma compilrii programelor,
iar celelalte fiiere (APP i EXE) se pot obtine n urma utilizrii comenzii BUILD care
va fi tratat ulterior.
Un program poate contine trimiteri la executia altor programe deci ele pot conine
comanda DO (imbricarea acestei comenzi), numrul maxim de nivele de imbricare
fiind 32.
Execuia programului se oprete n urmtoarele cazuri:
- la executia comenzii RETURN
- la execuia comenzii CANCEL
- la executia comenzii SUSPEND
- la execuia comenzii QUIT
Comanda RETURN oprete executia unui program i pred executia programului
apelant. n cazul n care nu exist un program apelant, comanda este predat
sistemului FoxPro.
Comanda CANCEL oprete execuia programului i pred execuia sistemului
FoxPro.
Comanda SUSPEND suspend executia programului. Acesta poate fi reluat din locul
din care a fost suspendat prin folosirea comenzii RESUME.
Comanda QUIT oprete execuia programului, determin ieirea din sistemul FoxPro
i pred comanda sistemului WINDOWS.
Numele unui program aflat n curs de executie poate fi aflat prin funcia:
PROGRAM (expn) sau prin functia:
SYS(16 [,exprn])
Funcia returneaz un ir de caractere reprezentnd numele programului n curs de
execuie sau numele ultimului program executat dac n acesta a aprut o eroare.
Dac este inclus "expn" aceasta va desemna nivelul programului curent executat
ce va fi returnat de funcie (un program apelat din alt program are nivelul 2).
4.16.1 STRUCTURI DE CONTROL
n cadrul unui program exist necesitatea ca n execuie s srim n anumite locuri
peste anumite comenzi sau s executm anumite comenzi numai n anumite cazuri.
Acest lucru l realizm cu ajutorul unor comenzi condiionale, De asemenea n
anumite cazuri este necesar s executm anumite comenzi de un numr de ori i de
aceea avem la dispoziie comenzile repetitive. n FoxPro toate comenzile sunt
realizate n concepia programrii structurate n care programul are o singur

intrare i o singur iere i n care structurile comenzilor condiionale iau pn la


urm o form apropiat de structurile imperative,
Programarea structurat, aprut prin anii 1970, s-a dezvoltat n scopul de a face
programeie mai inteligibile, mai uor de neles. n acest scop era necesar ca
structurile greoaie s fie nlturate. Structurile greoaie se datorau n special
comenzii IF i acestea nu puteau fi nlturate dar ele au fost transformate n sensui
ca cele dou ieiri s fie ulterior unite i n final programul s aib tot o structur
liniar. Bineneles rolul programatorului rmne unul important. Comanda IF
Format:
IF expl
Comenzi1
[ELSE]
Comenzi2
ENDIF
Aceast comand dirijeaz executia programului pe dou variante functie de o
expresie logic, reunind pe o singur ramur, n final execuia programului.
n cursul execuiei comenzii se evalueaz expresia logic expl. Dac expl este
adevrat, (.T.) toate comenzile care urmeaz pn la ELSE sau ENDIF (cnd else nu
exist) vor fi executate; dac aceast expresie este fals (.F.), se execut toate
comenzile ntre else (dac exist) i ENDIF. n continuare programul se continu cu
comenzile existente dup ENDIF.
Se pot folosi comenzi IF imbricate cu condiia ca fiecrui IF s-i corespund cte un
ENDIF.
Pe liniile ce conin comenzile IF, ELSE i ENDIF se pot introduce comentarii.
Exemplu:
IF marca .NOT. > 0
dele
? 'sunt marci mai mici dect 0'
ELSE
display
ENDIF
Aceast comand va afia mesajul 'sunt marci mai mici dect 0' pentru toate
mrcile care sunt mai mici dect 0 iar pentru nregistrrile care au mrci mai mari,
se vor tipri aceste nregistrri.
Schema logic a acestei comenzi se poate exemplifica astfel:

n acest exemplu dac a=b se vor executa comenzil (.T.), n caz contrar se vor
executa comenzi2 (.F.), n ambele cazuri execuia programului va continua cu prima
comand de dup ENDIF.
Funcia IIF
Este o funcie ce returneaz o valoare din dou posibile funcie de evaluarea unei
expresii. Este un if imediat.
Format:
IIF(expl,expr1,expr2)
Dac expl este .T. atunci funcia va returna expr1, dac ea este .F. funcia va returna

expr2.
Exemplu: IIF (a=0,' ';'*')
n exemplu dac a=0 atunci funcia va returna spaiul, dac nu atunci se va returna
asteriscul. (Funcia se utilizeaz de obicei n liste pentru a afia valori diferite pentru
un cmp funcie de o condiie ce trebuie evaluat imediat).
Comanda DO CASE
Format:
DO CASE
CASE expl1
comenzi 1
CASE expl2
comenzi 2
.................
[OTHERWISE
comenzi 3]
ENDCASE
Comanda execut un set de comenzi pe baza unor condiii logice, n cursul execuiei
comenzii cazurile sunt evaluate i primui rezultat .T. determin setul de comenzi ce
vor fi executate. La primul caz .T. comenzile ce urmeaz sunt executate. Execuia
continu pn !a urmtorul caz sau pn la ENDCASE. Dac nu se ntlnete nici un
caz .T. atunci se execut comenzile care urmeaz dup OTERWISE (dac exist).
n toate cazurile se execut apoi comenzile de dup ENDCASE. Se pot plasa
comentarii pe aceei linie cu DO CASE i ENDCASE. Schema bloc a acestei comenzi
este urmtoarea:

n schema logic se execut cazul care este .T. iar dac nici unul din cazuri nu
este .T. se execut comenzile otherwise. n continuare executia programului
continu pe aceeai ramur (cu comenzile ce urmeaz dup ENDCASE).
Comanda DO WHILE
Format:
DO WHILE expl comenzi
[LOOP]
[EXIT]
ENDDO
Aceast comand execut comenzite ce se afl ntre DO i ENDDO atta timp ct
expl este adevrat.
EXIT este un cuvnt cheie care transfer controlul execuiei din exteriorul buclei la
prima comand care urmeaz dup ENDDO.
LOOP ntoarce controlul execuiei napoi spre DO WHILE (la ntlnirea acestui cuvnt
cheie). (Se execut deci o parte din comanda DO WHILE... ENDDO).

Exemplu:
do while marca>=0
if marca=0
EXIT
endif
replace nume withnum, adres with adr
adaug=adaug+1
if adaug<=50
LOOP
endif
replace telefwithtel
enddo
n acest exemplu se execut n mod normal (pentru mrci mai mari dect zero)
nlocuirea numelui dintr-o baz de date cu numele dintr-o variabil de memorie, etc
i se adaug 1 la variabila adaug. Dac s-au adugat mai putin de 50 mrci atunci
execuia este reluat de la do while, iar dac ne aflm la peste 50 de parcurgeri ale
buclei, atunci se face i o nlocuire a zonei telef din baza de date cu variabila de
memorie tel.
n cazul n care marca este zero, execuia buclei se va termina i controlui buclei se
va preda la comanda urmtoare dup ENDDO.
Comanda ncepe prin evaluarea expresiei expl. Dac aceast expresie este
adevrat, atunci se execut comenzile precizate (atenie! n aceste comenzi pot fi
prezente i comenzife LOOP i EXIT, ca i anumite operaii care influenez expl).
Apoi execuia este predat liniei ce conine DO WHILE pentru evaluarea condiiei.
Dac conditia a rmas .T. se execut comenzile, dac nu, atunci comanda este
ncheiat i se continu cu prima comand de dup enddo.
Schema logic a acestei comenzi se exemplific astfel:

Comanda FOR ... ENDFOR


Format:
FOR memvar = expn1 TO expn2
[STEPexpn3]
comenzi
[EXIT]
[LOOP]
ENDFOR | NEXT
Comanda execut bucla de un numr de ori specificat. Se utilizeaz o variabil de
memorie memvar, drept contor pentru a determina numrul de executii a
comenzilor din interirul buclei. Variabila de memorie memvar nu trebuie s fie
definit naintea executrii comenzii. Variabila expn1 se numete valoarea iniial a
contorului iar expn2, valoarea sa final. Se execut toate comenzile pn la
ntlnirea cuvntului cheie ENDFOR sau NEXT. n acest moment se mrete valoarea

contorului expn3 (dac exist, dac nu cu 1.) Se compar apoi valoarea obinut cu
valoarea final (expn2).
Dac acest valoare este mai mic sau egal cu expn2, execuia continu, altfel
execuia este ncheiat.
Cuvntul cheie EXIT transfer controlul n afara buclei (ca i cnd s-ar fi atins
valoarea expn2).
LOOP determin returnarea controlului la FOR, mrind contorul ca i cnd s-ar fi
ajuns la ENDFOR.
Comenzile FOR ... ENDFOR pot fi imbricate. Comentarii se pot plasa n liniite ce
conin STEP expn3 i ENDFOR (dup acestea).
Expn1, expn2 i expn3 pot fi expresii numerice ntregi sau variabile de memorie
ntregi. Valorile lor sunt citite la nceput i nu exist control asupra lor e!e putnd fi
schimbate n cursul execuiei (atentie!). Valoarea expn3 poate fi negativ caz n
care valoarea contorului se micoreaz i valoarea iniial trebuie s fie mai mic
dect cea final.
Exemplu:
For x= 1 to 10 sfep 2
?x*x
endfor
Comanda va afia ptratele primelor numere impare mai mici dect 10.
Schema logic a acestei comenzi este ilustrat n continuare:

Comanda ncepe prin atribuirea valorii expn1 variabilei memvar. Apoi se evalueaz
dac memvar este mai mic dect expn2. Dac aceast conditie este ndeplint,
atunci se execut comenzile. Dup aceasta se adaug expn3 variabilei memvar iar
apoi se reia compararea cu expn2. Dac memvar este mai mic dect expn2 se reia
bucla, dac nu controlul se pred primei comenzi de dup endfor. n cadrul
comenzilor pot fi prezente i cuvintele cheie EXIT i LOOP cu aciunea lor
Comanda SCAN
Format:
SCAN [NOOPTIMIZE]
[SCOPE] [FOR expl1] [WHILE expl2]
comenzi
[LOOP]
[EXIT]
ENDSCAN
Aceast comand parcurge o baz de date de la primul pn la ultimul articol
realiznd pentru fiecare nregistrare comenziie prevzute n comand, eventual
funce de anumite condiii, pentru doar o parte din nregistrri, dac este dorit acest
lucru.
Opiunile au urmtoarele efecte:
NOOPTIMIZE - realizeaz dezactivarea rushmore pentru o aciune neoptimizat, deci
mai puin rapid. Deci nu recomandm acest opiune.
scope (ALL, NEXT nr, REST) - precizeaz grupul nregistrrilor pentru care va aciona

comanda - toate nregistrrile, urmtoarele nr nregistrri, restul nregistrrilor de la


nregistrarea curent pn la sfritul bazei de date.
FOR i WHILE precizeaz condiiile (expl1 i expl2) care aplicate asupra
nregistrrilor, face s se execute comenzile prevzute (dac condiiile sunt .T.) sau
nu.
LOOP - ntoarce la SCAN executia comenzii n momentul cnd se atinge acest
opiune.
EXIT - oprete aciunea comenzii ca i cnd s-ar fi atins sfritul fiierului.
Comentariile se pot plasa n comand dup ENDSCAN pe aceeai finie.
Exemplu:
Considerm baza de date numit BAZA cu urmtoarele cmpuri: marca, nuine,
prenume, adres i telefon
SCAN for prenume = 'ion'
repl prenume with 'ION'
Endscan
n cadrul acestei comenzi se nlocuiete n toat baza de date prenumele 'ion' (scris
cu litere mici) cu 'iON' scris cu majuscule pentru toate nregistrrile n care
prenumele ion este scris cu minuscule.
Schema logic a instruciunii este urmtoarea:

Comanda la nceput verific dac pointerul de nregistrare se gsete sfritul de


fiier (EOF - end of file). dac nu, atunci se execut comenzile i se avanseaz la
nregistrarea urmtoare (dac sunt prezente opiunile for sau while se verific i
ndeplinirea condiiilor prevzute de acestea. Dac este prezent clauza scope se
acioneaz n conformitate cu ea. n continuare (se pot ntlni i clauzele exit sau
loop), dup ce s-a avansat cu o nregistrare se reface bucla verificnd dac s-a
ajuns la sfritul fiierului cnd se ntrerupe execuia, aceasta continund cu prima
comand care urmeaz comenzii scan.
4.17 Proceduri i funcii definite utilizator
Aa cum FoxPro-ul are o serie de funcii, tot aa, n special cnd avem poriuni de
program care trebuie utilizate de mai mu!te ori i n special cnd dorim s utilizm
prti din program n scopul de a ne furniza anumite calcule, elemente care vor fi
utilizate n continuare, putem s ne definim funcii proprii.
O funcie definit utllizator (UDF - user define file) este o secven de program care
ntoarce o valoare programului apelant. Poate fi un program de sine stttor, o
procedur sau o funcie ntr-un program. UDF-urile se apeleaz prin numele lor.
Numele nu are voie s fie identic cu acela al unei functii FOXPRO (funcia FOX are
preceden i va fi executat neglijnd UDF - ul.
EXEMPLU:
Utilizarea unei cifre de control.
n cazul programelor de introducere date (numere de marc, coduri de produse etc)
este foarte util s poat fi detectate erorile de introducere chiar de la introducerea
datelor. De aceea se utilizeaz cifrele de control. Cifra de control, n cazul n care
una din cifrele numrului este schimbat (dintr-o eroare) se schimb i cifra de

control ceea ce duce la depistarea acestei erori (prin simplul fapt c programu! va
semnaliza o eroare este un semn c s-a greit la completarea cifrei sau la
introducerea ei).
Folosim metoda M11 (modulo 11), care are avantajul c oricare din cifre s-ar
schimba, cifra de control se schimb i ea i permite detectarea erorii. Aceast
metod const n nmultirea primei cifre a numrului cu 2, a celei de a doua cu 3 ... ,
se nsumeaz aceste produse i suma se mparte !a 11, restul fiind cifra de control.
prima cifr x 2 Numerele cu care se nmulesc cifreie tredoua 3 buie s fie numere prime ntre ele i s fie
treia 5 prime fa de numrul cu care se mparte.
patra 7
..........
Se adun produsele calculate ca mai sus i suma lor se mparte la 11. Dac restul
este 10, cifra de control este 0, alfel restul este cifra de control. Acest cifr
obinut (cifra de control) se altur (ca ultim cifr) la numrul initial. Marca 45
devine de exemplu 451.
La introducere (cnd vom avea de introdus pentru marca 45, vom folosi marca 451,
deci marca cu cifr de control, cifr care va nlocui marca peste tot cifra ce
reprezint marca), dac se va grei la introducere i se va introduce 457 (aa se
vedea pe document sau aa vedea operatorul sau va tasta el eronat), programul va
sesiza deoarece va verifica cifra de control.
Procedurile pot fi plasate n programe separate (una sau mai multe proceduri) cnd
se utilizeaz naintea lansrii apelrii procedurii a comenzii set procedure to, sau la
sfritul unui program (dup ncheierea programului ... return) ntr-un program activ
n momentul lansrii programului care apeleaz procedura.
Procedurile pot fi utilizate pentru diferite calcule, validarea unor introduri (get) sau
n alte scopuri. Ele se apeleaz prin numele lor eventual punnd ntre paranteze
parametrul (parametrii).
Exemplu: mai jos este prezentat un program (o procedur) care calculeaz cifra de
control a unor numere. Numrul cruia i se calculeaz cifra de control are maxim 4
cifre. Acest numr se va transforma ntr-unul de cinci cifre maxim prin adugarea
cifrei de control la sfritul numrului,
PROGRAMUL DE APELARE AL FUNCIEl
* CCP.PRG_____________________________________&&1
clea___________________________________________&&2set procedure to control___________________________&&3
@ 1,2 to 22,78__________________________________&&4
@ 3,35 say 'PROCEDURA' ________________________&&5
@ 4,24 say 'DE CALCUL AL CIFREI DE CONTROL'____&&6
@ 2,5 to 5,75 double_____________________________&&7
cc = 'T'_________________________________________&&8
do while cc='T'___________________________________&&9
icod=0_________________________________________&&1- 0
@ 6,27 say 'CODUL:'_____________________________&&11
@ 6,35 get icod pict '9999999'______________________&&12
Read ___________________________________________&&13
if icod=0_________________________________________&&1- 4
exit_____________________________________________&- &15
endif____________________________________________&- &16
dw=control(icod)__________________________________- &&17
@ 6,44 say dw___________________________________&&18
set curs off______________________________________&&19
dw = inkey(0)____________________________________&&20
set curs on______________________________________&&21
@ 6,44 say ' '____________________________________&&22

enddo__________________________________________&&2- 3
clear __________________________________________&&24
return__________________________________________&&- 25
*: EOF: CCP.PRG________________________________&&26
FUNCIA APELAT (ca program separat)
*CONTROL.PRG__________________________________&&27function control___________________________________&&28
param n_________________________________________&&29
dimens I(5)_______________________________________&&30
y=n_____________________________________________&&- 31
j=5______________________________________________&- &32
q=int(n/10)_______________________________________- _&&33
i=0______________________________________________&- &34
do while .not. j<=0_________________________________&&35
l(j)=y-q*10_______________________________________- _&&36
y=q_____________________________________________&&- 37
q=int(q/10)_______________________________________- &&38
j=j-1____________________________________________&- &39
enddo___________________________________________&&- 40
q=i(5)*2+i(4)*3+i(3)*5+i(2)*7+i(1 )*11__________________&&41
y=int(q/11)_______________________________________- &&42
c=q-y*11________________________________________&&- 43
if c=10__________________________________________&&44c=0____________________________________________&&4- 5
endif_____________________________________________- &&46
return c___________________________________________&&47
EOF: CONTROL.PRG_______________________________&&48
Comentarea liniilor programetor:
1. Linie comentariu - programul de calcul al cifrei de control CCP.
2. aceast linie terge ecranul
3. se realizeaz posibilitatea comunicrii cu procedura de calcul a cifrei de contro!
(care este situat ntr-un program numit CONTROL.PRG)
4. comanda realizeaz pe ecran un chenar dreptunghiular din linia 1 coloana 2 pn
n linia 22 coloana 78
5 i 6. comenzi care realizeaz afiarea unor iruri de caractere.
7. reafizeaz un alt chenar, dublu n care s-a tiprit titlul.
8. variabila cc ia valoarea logic .T.
9. se iniiaz o bucl (ct timp variabila cc este true)
10. variabila de memorie icod ia valoarea 0
11. se afieaz irul de caractere 'CODUL' pentru a ti c se cere introducerea
codului
12. se cere (prin GET introducerea codului, a unei cifre pentru care programul
urmeaz s calculeze cifra de control.
13. comanda READ de citirire a introducerii fcute
14. testeaz dac codul introdus este 0
15. dac s-a introdus codul 0 se iese din bucl (oprirea programului)
16. se ncheie testarea (if este urmat prin sintaxa instruciunii de endif).
17. variabila dw ia valoarea cifrei de control a cifrei (codului) introduse prin get cifra
este diferit de 0, dup apelarea procedurii de calcul care calculeaz cifra de
control)
18 se afieaz acest cifr de control
19. se dezactiveaz cursorul
20. se atept introducerea unui caracter de la tastatur
21. ss activeaz cursorul

22. se afieaz un spaiu (pentru a terge cifra decontrol)


23. se ncheie bucla (do... enddo)
24. linia realizeaz tergerea ecranuiui
25. se ncheie programul
26. comentariu marcnd sfritul programului
27. marcheaz nceputul procedurii control (nu trebuie scris n procedur. A fost
pus aici doar pentru a ti ce program este scris mai jos).
28. marcheaz nceputul procedurii (obligatoriu prima linie din program)
29. parametru! procedurii. Prin comanda dw=control(icod) se transmite cifra (icod)
acestui parametru i el ia valoarea lui, deci n=icod. n felul acesta se legtura ntre
program i procedur.
30. se definete variabila I ca tablou cu o dimensiune i cinci etemente
31. variabila y ia valoarea parametrului (y=n=icod)
32. variabila j ia valoarea 5 (cifra noastr cu tot cu cifr de control va avea
maximum cinci caractere)
33. variabila q ia valoarea primelor 3 cifre din numrul nostru (se neglizeaz ultima
cifr)
34. se iniializeaz variabilele tabloului l cu valoarea 0.
35. se iniiaz un ciciu ce se repet atta timp ct j nu este negativ sau 0 (n bucl
se vor face nmulirile fiecrei cifre a numrului conform algoritmului de calcul al
cifrei de control. Pentru aceasta va trebui s separm numrul n cifrele
componente nmulim cifrele n mod corespunztor i s facem suma produselor
numerelor),
36. se stabilete cifra de cel mai mic rang a numrului (cifra a patra)
37. q ia valoarea variabilei y
38. se mai reduce numrul cu o cifr (pentru stabilirea cifrei de rang urmtor)
39. se reduce j cu 1 (pentru c s-a parcurs o iteratie)
40. se ncheie iteratia, se compar valoarea lui j cu 0 i se reia dac j este mare
dect 0
41. cum toate cifrele numrului au fost separate (n i(j)) se poate calcula produsul
conform algoritmului de calcul al cifrei de control
42. variabila y ia valoarea ctului dintre produsu! obinut i cifra 11
43. cifra de control (cc) este restul acestei mprtiri
44. dac restul este 10
45. el devine 0
46. se ncheie testarea
47. se ncheie procedura prin predarea cifrei de control programului n cadrul
comenzii dw=control(icod).
48. comentariu ce marcheaz sfritul procedurii.
n continuare este dat o schem care indic modul de funcionare al procedurii:
* CCP.PRG
Clea____________________________________EXPLICAREAset procedure to control
@ 1,2 to 2278___________________PROCEDURII DE CALCUL A CIFREI
@ 3,35 say 'PROCEDURA'_________________DE CONTROL
@ 4,24 say 'DE CALCUL AL CIFREI DE CONTROL'
@ 2,5 to 5,75 double
cc = 'T'___________________________Explicatiile se afla in dreapta!
do while cc=.t,
icod=0
@ 6,27 say 'CODUL:'
@ 6,35 get icod pict '9999999'___________________icod=1234
read
if icod=0
exit

endif
dw=control(icod) 1
@ 6,44 say dw___________________(afieaz cifra de control calculat)
Set curs off______________________(valoarea este preluat din
dw=!nkey(0)_____________________procedur, dup ce ea a fost
set curs on______________________executat)
@ 6,44 say ' '
enddo
clear
return
EOF; CCP.PRG
function control
Param n___________________________________n=1234
dimens I(5)
y=n
j=5
q=int(n/10)__________________________q=int(1234/10- )=123
i=0_____________________IT1_______IT2______IT3____- ___IT4____ultima iteraie
Do while .not.j<0_________________j=4>0_____j=3>0____j=2>0_- _____j=1>0
I(j)=y-q*10_____________i(5)=4_____i(4)=3_____i(3)- =2____i(2)=1______i(1)=0
y=q__________________y=123_____y=12______y=1______- y=0_______y=0
q=int(q/10) _____________q=12_____q=1_______q=0______q=0______- _q=0
J=J - 1_________________j=4______j=3________j=2______j=1- ________j =0
enddo
q=i(5)*2+i(4)*3+i(3)*5+i(2)*7+i(1)*11_____________- ______q=4*2+3*3+2*+7=34
y=int(q/11)_______________________________________- __y=int(34/11)=3
cc=q-y*11_________________________________________- _cc=34+3+11=1
if cc=10_____________________________________________- cc #10 = 1
cc=0
endif
return cc_____________________________________________cc = 1
*: EOF: CONTROL.PRG
La definirea unei funcii sau proceduri, trebuie stabilite prelucrrile ce vor avea loc
n interiorul ei, care sunt parametrii functiei (n cazul c are parametrii, i care sunt
parametrii transmii de functie programului. Numele sub care sunt definii
parametrii n funcie pot fi diferii de cel care apare n program, recunoaterea lor
fiind automat.
Definirea unei funcii se face prin intermediui comenzii:
FUNCTION nume_funcie
n care nume_funcie este numele atribuit funciei, deci numele prin care este
recunoscut de ctre sistem.
Definirea procedurilor se realizeaz analog:
PROCEDURE nume_procedur
Numele funciei sau procedurii poate avea maxim 10 caractere. Apelul lor se
realizeaz prin numele lor urmat ntre paranteze de !ista parametrilor de
comunicare cu funcia, ca rezultat al prelucrrilor din cadrul funciei. Ordinea n care
sunt aezai parametri este aceeai cu ordinea din comanda parameter din cadrul
functiei, astfel nct fiecrui parametru din !ista de !a apelare s-i corespund cte
unul n lista parametrilor din funcie,
o procedur se lanseaz n execuie prin comanda DO urmat de numele procedurii.
Parametrii acesteia se introduc dup cuvntul WITH a acestei comenzi.
Terminarea normal a unei proceduri sau funcii se face la ntlnirea comenzii
RETURN, cnd sunt predai programului apelant parametrii, la executarea ultimei
comenzi a procedurii (funciei), la ntlnirea comenzilor SUSPEND, CANCEL i QUIT

cu aciunea lor specific.


Comanda:
SET PROCEDURE TO [fiier]
asociaz la programul curent, n execuie fiierul (cu extensia .PRG) unde se vor
cuta toate procedurile ce nu sunt gsite n programul apelant.
Comanda:
CLOSE PROCEDURE
nchide fiierul respectiv (realizeaz disocierea dintre program i fiierul de
proceduri).
n cazul apelrii unei proceduri se procedeaz astfel:
- se caut procedura n programul curent (apelant)
- se caut n fiierele deschise cu comanda SET PROCEDURE
- se caut n toate programele active (n curs de execuie) la diferite nivele (pn la
nivelul 1 (primul executat).
- se caut fiierul cu nume identic cu al procedurii considernd comanda ca
executnd un program. Pentru ca o cutare s fie fcut numai ntr-un anumit fiier,
deumirea acestuia se va include n clauza IN a comenzii DO.
o 5 septembrie 2008
o 0 comentarii
o nici o evaluare
Capitolul 5-1.
5. INTRARE - IEIRE
Un program, de multe ori are nevoie de introducerea unor date, de vizualizarea
altora pentru a informa utilizatorul i a decide executia n continuare ca i de
afiarea unor rezultate !a ncheierea execuiei. Comunicarea ntre utilizator i
program se face prin intermediul tastaturii, al ecranului i al imprimantei.
5.1 Formatul de afiare i citire
Pentru a lmuri modul cum se pot realiza aceste lucruri s analizm urmtoarea
comand:
@ 10,5 say 'Cum te numeti ?' get nume
@ 12,5 say nume
@ 12,25 say ',Bine ai venit in lumea FoxPro!'
Aceste comenzi vor cere un nume, vor atepta introducerea lui i apoi vor afia de
exemplu mesajul (dac numele introdus este Andrei);
Andrei, Bine ai venit in lumea FoxPro!
Pentru aceasta, ecranul este mprtit n linii i coloane, ncepnd cu coloana 0 linia
0 aezate n poziia din stnga sus a ecranului.
O comand de afiare SAY este urmat de dou cifre care reprezint linia i coloana.
Dac cifrele sunt fracionare atunci tiprirea se face la intervalele respective
fracionate, de exemplu linia 10,7 va reprezenta a zecea linie plus 70% din
nlimea unei linii (n FoxPro sub DOS nu sunt permise dect cifre ntregi). Aa se
afl coordonatele primului pixe! ce trebuie afiat.
n FoxPro este posibil afiarea folosind o serie de culori. Se recomand folosirea
culorilor implicite care sunt relativ bune ns ele pot fi schimbate.
Codificarea culorilor este;
--------------------------------------------------- --------------------------------negru_________________________________________N
blanc_________________________________________X
albastru_______________________________________B
maro________________________________________GR
albastru deschis_______________________________BG
verde__________________________________________G

violet________________________________________RB
rou___________________________________________R
alb___________________________________________W
galben_______________________________________GR+
PENTRU MONITOARE A/N
alb__________________________________________W
subliniat______________________________________U
In video invers _________________________________I
Adugarea unui asterisc la codul culorii face ca aceasta s fie strlucitoare sau
sclipitoare, n cazu! culorilor de fond (pentru hrtie), iar adugarea unui + indic o
nuan mai strlucitoare a ei (pentru codul cernelii).
Afiarea unui caracter pe ecran presupune specificarea a dou culori pentru
caracterul propriu-zis, numit culoare a cernelii i alta pentru fondu! pe care se
afieaz, numit culoare a hrtiei. Cele dou culori se grupeaz ntr-o pereche de
formatul fiind:
culoare cerneal / culoare hrrie
Culorile pot fi indicate i printr-un set de ase valori indicnd componentele n RGB
(rou, green, blue) de exemplu:
ALB=255,255,255
RGB (255,0,0,0,255,255) echivaient cu R+ / BG+
O succesiune de maxim zece perechi de culori reprezint o list de perechi de
culori. Un set de 24 liste de perechi de culori reprezint un set de culori adic un
mod complet de descriere a unui element FoxPro de exempiu o fereastr de dialog.
n total avem 2 (perechi de culori)*10 (schem de culori)*24 seturi de culori = 480
culori care identific o schem de culori.
La un moment dat n memorie este ncrcat un singur set de culori, cel curent.
Modificarea culorilor ntr-o schem de culori se realizeaz cu comanda:
SET COLOR OF SCHEME expn1 TO
[list perechi culori | SCHEME expn2]
Comanda modific culorile schemei expn1 a setului de culori curent, noile culori
fiind date prin enumerare n list sau prin copierea culorilor dintr-o alt schem
specificat prin numrui su expn2 (vechiul continut expn1 se va pierde).
Comanda: SET COLOR OF SCHEME expn1 TO determin ncrcarea schemei expn1
n ultimul set de culori ncrcat sau salvat, un set de culori definit prin SET COLOR
SET TO, un set de culori ncrcat din CONFIG.FP un set de culori implicit FoxPro.
Salvarea i ncrcarea unui set de culori se realizeaz astfel:
CREATE COLOR SET nume set culori
SET COLOR SET TO [nume set culori]
Prin aceste comenzi se salveaz toate culorile setului curent n memorie cu numele
"nume set culori", respectiv se ncarc un nou set de culori din memorie.
Clauzele urmtoare apar ntr-o serie de comenzi:
COLOR SCHEME expn
COLOR list perechi culori
Aceste clauze au semnificaia:
- n absena clauzelor de afiare se folosesc culorile din setul de culori curent;
- dac se dorete afiarea cu alte culori se va folosi una din aceste clauze (n al
doilea caz tiprirea se va face numai pentru elementul n care se precizeaz clauza,
apoi revenindu-se).
Folosirea setului curent nu este modificat de aceste clauze.
n varianta sub DOS, afiarea caracterelor se face la nivel de linie i coloan, care
au o dimensiune fix existnd un singur tip de caractere. n varianta sub Windows
unde listarea se face la nive! de pixel, exist mai multe tipuri de caractere (fonturi)
i mai multe dimensiuni a!e caracterelor. n aceast variant, pentru a afia un text
pe ecran, trebuie s se specifice:

- setul de caractere folosit (Arial, Roman, Times etc);


- stilul de afiare (Bold, Italic,...);
- dimensiunea caracterelor;
- poziia de afiare pe ecran:
- eventual culorile folosite.
Pentru a putea vedea i alege seturile de caractere disponibile, se utilizeaz
comanda:
? GETFONT()
care determin apariia unei ferestre (Font) n care utilizatorul poate specifica un set
de caractere, un stil de afiare i o dimensiune ca n cele ce urmeaz:

Dup alegerea opiunilor dorite i acionarea declanatorului OK pe ecran va aprea


afiat o linie coninnd enumirea setului de caractere, dimensiunea i stilul de
afiare, de exemplu:
Arial,9,N
n tabelul urmtor sunt indicate denumirea seturilor de caractere, stilurilor de
asfiare i mnemonicele lor:
SET CARACTERE____SET CARACTERE_____STIL_______semificaie______MNEMONI- C
--------------------------------------------------- --------------------------------------------------------------------------------Arial__________________MS Serif___________Bold________ngroat__________B
Courir__________________Roman___________Italic____- ____nclinat___________I
Courir New______________Script___________Normal_______nor- mal___________N
Fixedsys_____________Small Fonts________Outline_______conturat__________O
FoxFont_______________Symbol___________Opaque_____- __opac____________Q
FoxPrint_______________System___________Shadow____- __umbrit___________S
FoxProWindow_________Terminal__________Strikeout__- _____tiat____________Modern Times__________New Roman______Transparent____transpar.__________T
MS Sans Serif__________Wingdings_________Subliniat_____sub- liniat__________U
Aceste stiluri pot fi cumulate. Bl- indic un stil ngroat, nclinat i tiat cu o linie
orizontal i se va indica astfel;
@ 10,10 SAY ' ACESTA ESTE STILUL' FONT 'Arial',9 style 'B!-'
ntro serie de comenzi apar clauze cu privire la specificarea stilului caracterelor i a
fonturilor i dimensiunii acestora:
[ FONT expc [ ,expn ] ] i [ STYLE expc ]
5.2 Comenzile @SAY i @ GET
Afiarea pe ecran a diverselor date se poate realize cu comanda:
@ lin,col SAY expr [FUNCTION expc1 ] [PICTURE expc2]
[SIZE expn1,expn2] [FONT expc3 [,expn3] ]
[STYLE expc4] [COLOR SCHEME expn4 |

COLOR list perechi culori]


Acest comand va evalua expresia "expr" i va afia rezultatul la coordonatele lin
i col (linie,coloan) pe ecranul calculatorului,
Dimensiunea zonei de afiare va fi controlat de clauza SIZE, n care expn1
reprezint numrul de linii iar expn2 numrul de coloane al zonei de afiare.
Valoarea implicit pentru expn1 este 1 (adic o linie).
Setul de caractere folosit i stilul de afiare se specific prin clauzele FONT i STYLE.
n absena lor se va folosi setul i stilul implicit al ferestrei.
Indicarea culorilor de afiare se face prin clauzele COLOR SCHEME i COLOR sau cu
culorile implicite dac culorile nu se indic, ^
Codurile FUNCTION stabilesc o serie de condiii de afiare iar codul PICTURE
stabilesc dimensiunea zonei (numru! de caractere) i eventual alte condiii de
afiare dup cum se vede n tabelele urmtoare:
a). Pentru codurile FUNCTION:
Semnificaie_____________________________________- _______Cod
Permite numai caractere alfabetice__________________________A
Aliniaz la stnga datele numerice __________________________B
Dup un numr pozitiv afieaz CR__________________________C
Format dat calendaristic stabilit prin SET DATE______________D
Tiprete datele calendaristice n format EUROPEAN___________E
Centreaz textul _________________________________________I
Aliniaz la dreapta textul__________________________________J
Selecteaz ntregul cmp de editare la mutarea n cmp ________K
Afiez zerouri n faa punctului zecimal n locul spaiilor ________L
Permite selectarea unui element al listei (prima liter sau folosind tasta space) M
Terminarea editrii cu ENTER. (utiliz. GET)___________________List
Pentru ir de caractere la date ce conin alte date dect cod. PIC_R
Limiteaz limea de afiare la n caractere ___________________S(n)
Elimin blancurile de la nceput i sfrit_____________________T
Se afieaz DB !a cifre negative____________________________X
Se afieaz spaii n loc de zero nesemnificativ________________Z
Numerele negative sunt incluse ntre paranteze________________{
Toate caracterele sunt convertite n majuscule_________________!
Afieaz semnul monetar (stabiiit cu SET CURRENCY) la sfritui cifrei $
b ) Pentru codurile PICTURE:
Semnificaie_____________________________________- _______Cod
Permite doar introducerea caracterelor alfabetice_______________A
Permite doar date de tip logic______________________________W
Permite doar litere i cifre_________________________________N
Permite orice caractere___________________________________X
Permite doar Y,y, N,n (Yes, No) trecndule la majuscule________Y
Permite doar date numerice, cifre i semne (indic numrul lor)___9
Permite cifre, blancuri i semne (numrul lor)__________________#
Afieaz simbolul monetar (SET CURRENCY)_________________$
Afieaz asterisc n faa numerelor___________________________*
Specific poziia punctului zecimal___________________________.
Delitator separnd poziia cifrelor din stnga punctului zecimal ,
Limea cmpului de afiare sau de cifre citite este dat de lungimea irului de
caractere din clauza PICTURE. Codurile FUNCTION pot fi incluse n clauza FUNCTION
sau pot fi incluse n clauza PICTURE precednd codurile PICTURE i fiind obligatoriu
precedate de caracterul "@".

Exemplu:
@ 1,1 say 'altemativ' FUNCTION '!x!x!x!x!x'
AITeRnAtIv
@ 3,3 SAY 555.45 pict '@Z 999999.99'
____555.45
(liniuele din faa cifrei semnific cele trei zerouri nlocuite cu spaii).
AFIAREA IMAGINILOR PE ECRAN
Pentru afiarea imaginilor se folosete o comand SAY puin modificat fa de cea
anterioar:
@ lin,col SAY fiier BITMAP | cmp general
[STYLE expc1] [CENTER] [ISOMETRIC | STRECH]
[SYZE expn1,expn2]
Imaginile pot fi depozitate fie n fiiere, fie n cmpuri de tip general.
Exemplu: Fiierul LIVES.BMP din directorul Windows:
@ 1,1 SAY 'C: WINDOWSLEAVES.BMP' BITMAP
Clauza SIZE indic zona i dimensiunile de afiare n care expn1 reprezint numrul
de linii iar expn2 numrul de coloane. Dac imaginea este mai mare, ea va fi
decupat i se va afia doar ceea ce ncape n zona respectiv. Dac zona decupat
este prea mare, imaginea va fi afiat n colul din stnga sus al zonei.
Clauza CENTER centreaz imaginea att pe orizontal ct i pe vertical, iar clauza
STRECH umple zona cu imaginea respectiv (eventual distorsionat). Clauza
ISOMETRIC umple de asemenea zona de afiare dar este modificat astfel inct si pstreze proporiile.
Clauza STYLE modific modul de afiare:
- opac eventualele texte sau alte imagini situate sub imaginea respectiv nu sunt
vizibile (Q);
- transparent vechiul coninut al zonei de afiare se vede i el (T).
Dac n timul execuiei unui program sunt necesare date de la utilizaor, programul
va trebui s opreasc execuia i s solicite aceste date utilizatorului. Aceata se
realizeaz n felul urmtor:
- mai nti se definesc zonele de introducere a datelor (numite cmpuri de editare);
- apoi se da comanda de citire (READ);
- se continu execuia programului.
Comanda de definire a cmpurilor de editare este:
@ lin,col GET var | cmp
[FUNCTION expc1] [PICTURE expc2]
[SIZE expn1, expn2] [FONT expc3 [,expn3]]
[STYLE expc4] [DEFAULT expr1]
[ENABLE] [DISABLE] [MESSAGE expc5]
[[OPEN] WINDOW ferestr] [RANGE [expr2] [,expr3]]
[SIZE expn2, expn3] [VALID expl1| expn4]
[ERROR expc6] [WHEN expl2]
[COLOR SCHEME expn4 | COLOR list perechi culori]
Comanda definete un cmp de editare n poziia lin,col unde va fi citit o valoare
care va fi introdus n variabila "var" sau n cmpul de date "cmp". Tipul variabilei
sau al cmpului va fi dat de tipul valorii citite.
Clauzele FUNCTION, PICTURE au fost prezentate Ia comanda SAY i sunt Ia fel ca i
clauzele STYLE i FONT. Clauza ENABLE permite accesul la cmpul citit iar clauza
DISABLE nu, opiunea implicit fiind ENABLE. Accesarea cmpului este controlat de
clauza WHEN care nu va permite accesul dect dac expl2 este evaluat .T.
Evaluarea expresiei are loc Ia execuia comenzii READ.
Clauza WINDOW permite editarea cmpurllor memo ntr-o fereastr de editare care
a fost definit anterior prin comanda DEFINE WINDOW.

Clauza RANGE permite veficarea condiiei impuse ca valoarea editat n cmp sa fie
mai mare sau egal dect expr2 i mai mica sau egal cu expr3. Dac una din
condiii Iipsete, valoarea nu va mai fi llmitat (inferior, respectiv superior) dar nu
pot fi omise ambele limite.
Clauza SIZE determin dimensiunile cmpului de editare. Expn1 reprezint
nlimea iar expn2 Iimea n coloane. Efectul ei este influenat de claza PICTURE n
modul urmtor:
- Ia editarea unui cmp cu o lungime mai mic dect clauza data prin SIZE, limea
regiunii va fi dat de lurigimea cmpului;
- Ia editarea unei variabile cu lungime mai mic dect expn2, limea regiunii va fi
egaI cu acest expresie;
- n cazul n care expn2 este mai mica dect lungimea variabilei sau a cmpuIui, se
va realiza defilarea acesteia sub regiunea stabilit prin clauza SIZE.
Dac se foIosete clauza SIZE i PICTURE concomitent, atunci:
- dac dimensiunea stabilit prin PICTURE este mai mica dect cea din SIZE
dimensiunea de editare este dat de PICTURE;
- dac dimensiunea data prin clauza PICTURE este mai mare dect cea dat prin
SIZE, cmpul get va defila n regiunea de editare.
Clauza SIZE se foIosete n general pentru cmpurile tip memo.
Clauza VALID este o clauz cu importan deosebit deoarece cu ajutorul ei se
poate verifica introducerea i nu se permite dect introducerea (n bazele de date a
acelor valori care satisfac anumite condiii impuse datelor din baze de date
.respective.
CIauza VALID accept ca parametru o expresie care poate fi de tip logic sau
numeric. n cazul unei expresii de tip logic se verific expresia i valoarea introdus
este validat (admis) numai dac exprersia logic are valoarea .T. Altfel se va afia
mesaj de eroare i se va reveni n cmpul de editare.
O facilitate deosebit a clauzei VALID este faptul c n alctuirea expresiei se admit
funcii definte utilizator.
Exemplu:
CLEAR
SET TALK OFF
STORE 0 to a,b,c
@ 10,10 SAY 'lntroducei numerele'
@ 10,32 GET a picture '@Z 99999'
@ 10,40 GET b picture '@Z 99999' VALID b<a
NOTE se admit doar numere mai mici dect cele anterioare
@ 10,50 GET c picture '9' valid CONTROL(b )
NOTE se admite doar cifra de control a lui b
READ
@ 12,10 SAY 'Numrul cu cifr de control este:'
@ 12,50 say b
@ 12,55 say c
return
FUNCTION CONTROL
NOTE se deflnete procedura control
....................
Return
n cazul n care nu se valideaz introducerea i dorim un alt mesaj dect cel afiat
de sistem, atunci putem folosi clauza ERROR dup care se indic mesajul (care-l va
nlocui pe cel standard - mesajul este un ir de caractere).
Clauzele COLOR i COLOR SCHEME determin culorile utilizate pentru introducerea
datelor.
Comenzite SAY i GET pot fi grupate ntr-o singur comand n urmtoarea form:
@ lin,col SAY expr.......... GET var .......

Exemplu:
@ 10,10 SAY 'lntroducei numele' get nume pict '@!';
DEFAULT " "
5.3 Obiecte de control
Interfaa FoxProW este prevzut cu o serie de obiecte de control (mai simplu
controale) care fac conversaia sistem utilizator mai plcut i mai eficient, mai
comod.
Exist 8 tipuri de controale n FoxPro i anume:
- cmpuri de editare cu butoane de incrementare-decrementare aceste obiecte
sunt de fapt cmpuri de editare a unor valori numerice, crora li se atribuie dou
butoane cu funcia de incrementare i decrementare a valorii numerice editate.

- comutatoare - utilizate pentru a selecta dintre dou valori posibile, adevrat sau
fa!s. Apar pe ecran ca nite csue cu explicaii n dreapta lor i cu csu asociat
care are dou valori posibile:spaiu sau x i n care "x" indic starea activat a
comutatorului.
- liste permit alegerea unui element dintr-o mulime finit, afiat pe ecran n
interiorul unui cadru care are ataat o bar de defilare.

- lista ascuns este asemntoare cu lista, cu deosebirea c pe ecran se vede


doar elementul curent al listei. La activare (elegere) lista ascuns este expandat n
vederea alegerii de ctre utilizator a elementului dorit:
List of file type

- declanatoarele - apar pe ecran sub forma unor butoane i sunt utilizate pentru a
declana anumite aciuni. Operaia declanat este afiat pe ecran:

- declanatoarele invizibile - sunt nite declanatoare care pot fi acoperite de text


(invizibiie) dar nu i pierd calitatea de declanator.
- butoanele radio - un singur buton (dintr-un grup) poate fi activ la un moment dat.
Starea activat este anunat de un punct ce apare n interiorui butonului. La
activarea unui buton se dezactiveaz un altul:

1. Cmpurile numerice cu butoane


Editarea cmpurilor numerice se poate face cu ajutorul comenzilor GET. n varianta
sub Windows se pot folosi cmpurile de editare cu butoane de incrementare
decrementare care se creaz cu comanda:
@ lin,col GET var | cmp
SPINNER expn1 [,expn2] [,expn3]
[FUNCTION expc1] [PICTURE expc2]
[SYZE expn1,expn2] [FONT expc3 [;expn3] ]
[STYLE expc4] [DEFAULT expr1]
[ENABLE] [DISABLE] [MESSAGE expc5]
[[OPEN] WINDOW fereastr] [RANGE [expr2] [,expr3] ]
[SIZE expn2,expn3] [VALID expl1 | expn4]
[ERROR expc6] [WHEN expl2]
[COLOR SCHEME expn4 | COLOR list perechi culori]
Comanda difer de editarea cmpurilor GET simple prin clauza SPINNER n care:
expn1 reprezint valoarea cu care se va incrementa respectiv decrementa valoarea
numeric n curs de editare, expn2 reprezint limita inferioar a valorii de editare
iar expn3 iimita superioar.
Exemplu:
@ 10,10 GET b DEFAULT 0 picture '@Z 999999'
SPINNER 100,0,50
2. Comutatoarele
Comutatorul permite citirea datelor care au dou valori posibile (masculin sau
feminin de exemplu). Pe ecran apare printr-o csu ptrat coninnd caracterul x
sau blanc i n dreapta un text explicativ.
Pentru crearea unui comutator se utilizeaz comanda GET obinuit, dar n variabila
"var" sau cmpul de editare, trebuie s fie un cmp numeric sau logic. n cazul
tipului numeric valoarea 0 indic comutator neactivat, iar una diferit de 0 indic
comutator activat respectiv .F. neactivat i .T. activat.
Pentru a specifica c este vorba de un comutator, n clauza FUNCTION sau PICTURE
codul specific va fi "*C" urmat, la distan de un spaiu de textul explicativ al
comutatorului.
Exemplu:
CLEAR
select=.T.
@ 10,10 GET select FUNCTION '*C Selectat'
linia a treia poate fi nlocuit cu una din urmtoarele dou:
@ 10,10 GET select PICTURE '@*C Selectat'
@ 10,10 GET select FUNCTION '*C' PICTURE 'Selectat'
Activarea unui comutator poate determina terminarea comenzii READ curente.
Pentru aceasta sunt utilizate codurile FUNCTION "N" i "T", primul ducnd la

terminarea comenzii READ (implicit), iar 'T' determinnd terminarea comenzii READ
n cazul activrii comutatorului.
O alt facilitate implementat pentru acest obiect este tasta direct de alegere.
Aceasta este o tast care permite alegerea comutatorului respectiv, imediat ce a
fost aleas. Pentru acesta n clauza PICTURE sau FUNCTION se vor folosi caracterele
"<".
Exemplu:
CLEAR
STORE .F. to terminat,corectat,selectat
@ 10,10 GET terminat FUNCTION '*C <Terminat'
@ 10,10 GET corectat FUNCTION '*C <Corectat'
@ 10,10 GET selectat FUNCTION '*C <Selectat'
READ
Tastele directe de alegere sunt T,C,S care sunt afiate distinct (cu alt culoare).
Pentru dezactivarea accesului la un comutator se pot folosi dou caractere
succesive "\"
Exemplu:
alfa=.T.
@ 10,10 GET alfa FUNCTION *C \<Pozitiv'
READ
La specificarea culorilor comutatorului folosit clauzele COLOR SCHEME i COLOR,
vom avea urmtoarea semnificaie a culorilor n cadrul unei scheme de culori:
Numr pereche Elementul controlat
1-4 Nefolosite de comutator
5 Mesajul clauzei MESSAGE
6 Comutatorul selectat
7 Tastele directe de alegere
8 Nefolosit de comutator
9 Comutator cu acces activat
10 Comutator cu acces dezactivat
Exemplu:
color=1
@ 10,10 GET color FUNCTION '*C <Colorat';
COLOR ,,,,W+/Rb,W/R,GR+/BW+/B,W/B
READ
3. Lista
Pentru a alege un element dintr-o list ce este afiat pe ecran se folosesc tastele
direcionale dup care se apas tasta ENTER. Dac lista este doar parial afiat pe
ecran, n dreapta cadrului va aprea o bar de defilare prin care se va indica
poriunea listei care este afiat curent pe ecran.
Sintaxa comenzii GET cuprinde o nou clauz i anume:
FROM masiv [RANGE expn1 [,expn2]] | POPUP submeniu
Selecia este memorat ntr-un masiv (cu variabila var) sau ntr-o baz de date
desemnat prin cmp. Var sau cmp trebuie s fie numerice sau ir de caractere.
Dac var sau cmp sunt numerice, ea memoreaz poziia din list a elementului
selectat, iar dac ele sunt iruri de caractere, se va memora chiar elementul
respectiv n list.
Elementele listei pot fi preluate dintr-un masiv, cnd se folosete clauza FROM sau
dintr-un submeniu la folosirea clauzei POPUP.
- dac masivul este unidimensional, elementele listei vor fi ncrcate n ordine din
masiv. ,
- dac masivul este bidimensional, elementele vor fi preluate din prima coloan a

masivului, urmtoarele fiind ignorate.


Pentru a alege doar elementele dintr-o portiune a masivului ca elemente ale listei,
se utilizeaz clauza RANGE n care expn1 desemneaz elementui de masiv ce se va
ncrca n primul element al listei, iar expn2 numrul de elemente ale listei care vor
fi preluate din masiv.
Dac masivul este bidimensional, clauza RANGE functioneaz astfel: se selecteaz
n list elementele masivului ncepnd cu al expn1-lea element inclusiv
(numerotarea ncepnd cu linia 1 col 1 pn la linia 1 col n urmnd n continuare
linia 2 col 1 fiind numerotat cu n+1 amd) i continund cu elementete de sub
acesta pe coloan pn se selecteaz expn2 elemente sau pn la sfritul
coloanei, dac expn2 lipsete.
Exemplu: presupunem masivul:
a1, a2, a3, a4 Clauza RANGE 7,2 va avea ca efect selectaa5, a6, a7, a8 rea elementelor a7,a11,a15.
a9, a10,a11,a12 Prin modificarea masivului sau a structurii
a13,a14,a15,a16 sale, se va modifica i lista corespunztoare.
Codul FUNCTION al acestui obiect este caracterul "&", acesta indicnd faptul c
respectiva comand GET declar o list i nu un GET simplu.
Pentru a preciza c obiectul este unul terminal (celelalte obiecte nu vor mai fi citite
la ieirea din READ) se folosete codul FUNCTION "'T" ("N" pentru element
neterminal). Deci FUNCTION '&T' sau PICTURE "@&T' indic un obiect terminal iar
FUNCTION '&N' sau PICTURE '@&N' indic un obiect neterminal.
Clauza SIZE determin poriunea de pe ecran ocupat de list n care expn3 d
numru! de !inii ocupate, iar expn4 numrul de coloane. Dac n list sunt mai
multe elemente dect permite regiunea definit, atunci n latura dreapt va aprea
o bar de defilare.
Culorile folosite pentru afiarea listei sunt precizate prin c!auze!e cunoscute, n care
corespondena dintre lista de perechi de culori i elementele listei controlate de
acestea este dat mai jos:
Numr pereche Elementul controlat
1 Opiune neactivat
2 Opiune activat
3 Chenarul i bara de defilare
4 Neutilizat n list
5 Mesajul
6 Elementul selectat al listei
7-8 Neutilizat n list
9 List cu acces permis
10 List cu acces nepermis
Restul clauzelor sunt cele obinuite.
Exemplu:
CLEAR
DIMENSION CUL(8)
CUL(1)='Negru'
CUL(2)='Albastru'
CUL(3)='Verde'
CUL(4)='Albastru deschis'
CUL(5)='Rou'
CUL(6)='Violet'
CUL(7)='Maro'
CUL(8)='Gri'
cul='Negru'
@ 10,10 SAY' Alegeti culoarea dorit' Get cul ;

FUNCTION '&' FROM culoare SIZE 5,20 MESSAGE ;


'Culori 'VALID cul # 'Gri'
READ
Clear
@ 10,10 SAY 'Culoarea aleas este '
??cul
4. Lista ascuns
Utilizarea listei ascunse se face mutnd cursorul din cmp n cmp (folosind TAB sau
SHIFT pn la selectarea listei ascunse cnd se apasa ENTER sau SPACE lista fiind
astfel expandat. Se folosesc sgeile direcionale, dup care se apas ENTER sau
SPACE pentru alegere. Comanda este cea standard diferind codul FUNCTION care
este "^". n comand var este o variabil sau un element de masiv iar cmp este un
cmp al unei baze de date care este folosit pentru a memora opiunea utilizatorului,
la alegerea unui element din list i el, trebuie s fie de tip numeric sau un ir de
caractere.
Dac este un cmp numeric, va memora poziia elementului ales, iar dac este un
ir, n variabil se va memora chiar elementul solicitat. Valoarea iniial a variabilei
va determina poziia iniial a cursorului n cadrul listei (elementul curent).
n clauzele FUNCTION sau PICTURE se precizeaz lista ascuns n care elementele
sunt separate prin ";" i codul FUNCTION.
Exemplu:
CLEAR
cul=1
SET TALK OFF
@ 10,10 GET cul FUNCTION '^T AIb;Verde;Rosu;Negru'
NOTE list ascuns terminal
b=1
@ 10,10 GET b FUNCTION '^N Satisfctor;Bine;Foarte bine'
Note list ascuns neterminal
READ
Pentru a specifica o list ascuns se pot folosi urmtoarele combinaii:
FUNCTION '^' PICTURE 'Satisfacator;Bine;Foarte bine'
FUNCTION '^ Satisfacator;Bine;Foarte bine'
PICTURE '@^ Satisfctor;Bine;Foarte bine'
FUNCTION ' Satisfctor;Bine;Foarte bine ' PICTURE '@^'
De asemenea se pot introduce codurile T i N pentru liste terminale i respectiv liste
neterminale. Dac se folosete codul N sau nu se utilizeaz un astfel de cod, atunci
lista nu va fi terminal i dup alegerea elementului dorit se va continua cu citirea
urmtoarelor cmpuri GET,
Selectarea unui taste directe se poate face prin includerea n faa elementului n
iru! de caractere FUNCTION sau PICTURE a caracterului backslash, Exemplu:
FUNCTION '^ <Alb; <Verde;AI<bastru'
Selectarea n acest list ascuns se poate face apsnd A,V,b.
Codul backslash introdus naintea unui element, dezactiveaz accesul la acel
element. Acest element va aprea pe ecran cu alte culori dect celelalte
FUNCTION '^<Alb; <Verde;\Albastru'
Din list se pot selecta doar elementele Alb i Verde.
Clauza FROM determin ca elementele din list s fie preluate dintr-un masiv
(asemntor cu cele prezentate la list n seciunea anterioar).
Clauza COLOR i COLOR SCHEME pot de desemna dou scheme de culori, prima
controleaz afiarea listei ascunse n starea selecatat i a mesajului, iar a doua,
afiarea opiunilor listei i a chenarului. Diferitele perechi de culori au urmtoarele
semnificaii:

per Elementul controlat


1 Opiune cu acces nepermis (n schema a doua expn8)
2 Opiune cu acces permis (expn8)
3 Chenarul (expn8)
4 Neutilizat
5 Mesaj dat prin MESSAGE
6 Elementul selectat (expn8) Liast ascuns selec (expn7)
7 Tast direct
8 Nefolosit
9 List ascuns cu acces permis (expn7)
10 List ascuns cu acces nepermis (expn7)
5. Declanatoarele
Declanarea unui declanator are ca efect o anumit aciune iar ca efect grafic,
schimbarea culorilor acestuia.
Comanda de definire a declanatoarelor este cea obinuit (GET) prin care se pot
defini mai multe declanatoare.
Memorarea opiunii utilizatorului se face n elementul de masiv sau variabila var,
sau ntr-un cmp al unei baze de date. Valoarea dac este de tip numeric, va
memora numrul de ordine al declanatorului iar dac este de tip ir de caractere
va memora textul declanatorului. Codul FUNCTION specific este asteriscul care
indic comenzii GET c obiectul respectiv este un declanator. Definirea se face
clauzele FUNCTION sau PICTURE:
FUNCTION '*' sau PICTURE '@*
n cadrul irului de caractere introdus dup clauza FUNCTION sau PICTURE se
introduc i textele asociate declanatoarelor definite, separate prin ";". Lista
declanatoarelor se plaseaz la sfritul irului de caractere al codului FUNCTION
sau PICTURE i este separat prin spaiu de restul codurilor. Numrul
declanatoarelor va fi acelai cu numrul elementelor introduse n clauza
FUNCTION.
Exemplu:
CLEAR
d='Pornit'
@ 10,10 GET d FUNCTION '* Pornit;Oprit;Pauza'
NOTE definete trei declanatoare Porinit, Oprit, Pauza
READ
Declanatoarelor li se pot atribui i caracteristici speciale prin codurile T sau N
(terminal sau nu), codurile H (poziie orizointal a declanatoarelor) sau V (vertical)
sau codurile < (pentru taste directe de acionare) i \ (pentru dezactivarea
declanatorului).
Se pot stabili de asemenea dou declanatoare care s aib caracterisl speciale:
- declanatorul implicit este ales automat la apsarea tastelor CTRL + ENTER.
Acest declanator este afiat deosebit de celelalte. El se poate selecta folosind
combinaia "!" plasat nainte de textul declanatorului;
- declanatorul ESCAPE care este acxionat la apsarea tastelor ESC i nu apare
afiat distinct pe ecran. El se semnaleaz prinn combinaia "?" n faa textului
declanatorului.
Exemplu:
CLEAR
d=1
@ 10,10 get d FUNCTION '*!<Pornit; <Oprit; ? <Anulat
READ
Sunt definite trei declanatoare ce pot fi activate cu tastele directe P, O i A primul
fiind declanator implicit, iar ultimul fiind declanator ESCAPE.
Clauza SIZE a comenzii GET pentru declanatoare se folosete astfel:

Expn1 nu se folosete (dar este obligatoriu, valoarea nu intereseaz);


Expn2 determin limea de afiare a declanatoarelor, dac lungimea textului
este mai mare dect expn2, limea este dat de lungimea textului;
Expn3 se folosete pentru a indica spaiul dintre declanatoare n cadrul unui
grup, expn3 reprezentnd numrul de linii (coloane la delanatoarele aezate pe
vertical) dintre dou declanatoare.
Clauza COLOR sau COLOR SCHEME stabilete culorile acestor obiecte dup
urmtoarele reguli:
Numr pereche Elementul controlat
1-4 Nefolosite de declanator
5 Mesaj dat prin MESSAGE
6 Declaator selectat
7 Tast direct de selecie
8 Nefolosit
9 Declanator cu acces permis
10 Declanator cu acces nepermis
6. Declanatoare invizibile
Acest declanator se aseamn cu cel anterior n continuare se vor prezenta doar
clauzele care difer.
Clauzele FUNCTION i PICTURE vor conine codul specific care este "*I". Exemplu:
CLEAR
d=1
@ 10,10 GET d FUNCTION '*IH ;;; ' SIZE 4,4,4
NOTE Se definesc patru declanatoaree invizibile, primul este poziionat la
oordonatele 10,10. Variabila d va memora numrul declanatorului invizibil
selectat.
READ
Urmtoarele clauze pot fi folosite exclusiv n definirea acestor declanatoare:
PICTURE '@*I;;;'
FUNCTION '*l' PICTURE ;;;'
FUNCTION ';;;' PICTURE '@*l'
De asemenea se pot utiliza codurile T i N, H i V.
7. Butoane Radio
Acest tip de obiect este specific peraiei de selectare a unui element dintr-o
mulime, astfel nct numai unul din ele s fie selectat la un moment dat.
Butoanele radio se prezint pe ecran prin cercuri, la dreapta crora exist texte
explicative. n interiorul unuia din cercuri este poziionat un punct ceea ce arat c
el este selectat.
Comanda GET care definete butoane este cea standard precizat nainte. Selecia
utilizatorului va fi memorat n "var" care trebuie s fie numeric sau ir de
caractere. n cazul unei valori numerice, aceasta indic numrul d ordine al
butonului selectat, iar dac ea este un ir de caractere, acesta va memora textul
explicativ asociat.
Specificarea acestui tip de obiect se face folosind codul specific n clauzele
FUNCTION i PICTURE care este "*R" sau "@*R" n clauza PICTURE.
Specificarea textului explicativ pentru fiecare buton radio se face printr-o lis care
conine textele respective, separate prin caracterul ";" care este separat de codul
FUNCTION printr-un blanc.
Ca i la comutatoare, se pot folosi urmtoarele coduri cu clauzele FUNCTION i
PICTURE:
- "N" - butoane radio neterminale;

- "T" - butoane radio terminale;


- "H" - butoane radio plasate orizontal (unul lng altul);
- "V" - butoane radio verticale (unul sub altul);
- "<" - se introduce naintea unuia din caracterele textului explicativ, specificnd
tasta direct de selectare a butonului radio;
- " " - se introduce n acelai mod ca cel precedent, pentru ca butonul s.nu poat fi
accesat (dezafecteaz butonul).
Exemplu:
CLEAR
A = 'luni' @ 10,10 GET a FUNCTION '*RTV <Luni; <Marti;M<iercu'+;
ri;<Joi;<Vineri;\<Sambata;\<Duminica'
READ
n exemplu sunt definite apte butoane radio, reprezentnd zilele sptmnii i
pentru fiecare se definete o tast de selectare, ultimele dou butoane fiind
dezactivate. Clauza DEFAULT permite crearea variabilei "var" i iniializarea sa.
Clauza SIZE controleaz limea butoanelor (nlimea fiind 1), ct i distana dintre
ele. Accesul este permis sau oprit prin clauza ENABLE respectiv DISABLE. Pentru a
afia un text explicativ n cadrul unui grup, va fi folosit clauza MESSAGE.
Culorile de afiare pot fi definite prin clauzele COLOR i COLOR SCHEME aa cum se
vede n tabelul urmtor:
Numr pereche Elementul controlat
1-4 Nefolosite de declanator
5 Mesajele clauz. MESSAGE
6 Buton radio selectat
7 Tast direct de seiecie
8 Nefolosit
9 Buton radio acces permis
10 Buton radio acces nepermis
Clauzele ce nu au fost descrise, au aceeai semnificaie aa cum prezentat la
celelalte obiecte din cmpurile GET.
8. Regiunile de editare text
Acest obiect permite editarea textelor dintr-o anumit poriune a ecranumlui special
destinat acestui scop. n aceast regiune a ecranului se pot folosi toate comenzile
de editare FoxPro, inclusiv cele referitoare la blocuri de text (selectarea unor zone,
copierea lor, mutarea, depunerea acestor zone text).
Comanda cu care se definesc aceste zone de editare text este:
@ lin,col EDIT var | cmp
[SIZE expn1,expn2] [,expn3]
[FUNCTION expc1] [FONT expc2] [,expn4]
[STYLE expc3] [DEFAULT expr]
[ENABLE] [DISABLE] [MESSAGE expc4]
[VALID expl1 | expn5] [ERROR expc5]
[WHEN expl2] [NOMODIFY] [SCROOL] (TAB]
[COLOR SCHEME expn6 | COLOR list perechi culori]
Pentru a termina editarea i a trece la urmtorul cmp GET se folosete tasta TAB
sau combinaia de taste CTRL+TAB pentru a salva noul coninut al textului, sau
tasta ESC pentru a prsi cmpul de editare fr salvare.
Memorarea textului ce se editeaz se face n variabila "var" o variabil, un element
de masiv sau un cmp al unei baze de date. Acestea trebuie s fie de tip ir sau de
tip memo.
Regiunea de editare ncepe n linia lin i coloana col, clauza SIZE specificnd

dimensiunea zonei, expn1 determinnd nlimea iar expn2 ltimea zonei de editare
exprimat n linii respectiv coloane.
n cazul n care expn1 = 1 se obine o zon de o linie ce are caracteristici speciale;
se poate defila textul pe direcia orizontal, iar apsarea tastei ENTER are ca efect
terminarea editrii i trecerea la urmtorul cmp GET.
n clauza SIZE se poate introduce expresia expn3 care indic numrul maxim de
caractere ce se pot edita n aceast regiune.
Exemplu:
CLEAR
Text = 'Text editat cu comanda EDIT'
@ 10,10 EDIT text SIZE 4,24
READ
Clauza FUNCTION poate conine dou coduri, referitoare la aliniere: "I" secific
centrarea textului, "J" specific alinierea la dreapta a textului. Implicit alinierea este
la stnga, acest tip de cod neexistnd.
Clauza DEFAULT permite crearea unei variabite care va memora textul introdus de
utilizator, n cazul cnd aceasta nu exista anterior execuiei comenzii EDIT. De
asemenea cu aceast clauz se iniializeaz variabila nou creat valoarea ei va fi
dat de "expr". Clauza este ignorat dac variabila exista anterior.
Clauza ENABLE (implicit) i DISABLE se folosesc pentru a activa respectiv dezactiva
accesul la obiect iar clauza MESSAGE, pentru a afia unele informaii n tipul editrii
textului.
Clauza VALID permite verificarea anumitor condiii impuse textului editat dac este
o expresie logic, iar dac este o expresie numeric valoarea 0 indic rmnerea n
zona de editare pe cnd o valoare diferit de 0 produce saltul la cmpul get indicat
de valoare (nainte sau napoi dup cum valoarea este pozitiv sau negativ).
Testrile complexe asupra textului introdus pot fi fcute prin una sau mai multe
funcii definite de utilizator.
Evaluarea expresiei logice a clauzei VALID se face la ieirea din zona de editare text.
n cazul n care valoarea expresiei este .T., se execut salvarea dup care se trece la
urmtorul cmp GET. Dac valoarea expresiei este .F. se afieaz un mesaj de
eroare, urmnd s se continue editatea pentru corectarea introducerii. Dac imediat
dup afiarea mesajului se apas tasta ESC se execut salvarea noului coninut
(chiar dac aceasta nu corespunde). Apsarea tastei ESC n zona de editare text
(exceptnd cazul anterior) are ca efect renunarea la noul coninut adic textul
introdus nu se salveaz n variabila "var",
Clauza ERROR permite modificarea mesajului de eroare. Clauza WHEN permite sau
oprete accesul la regiunea de editare text, funcie de anumite condiii prevzute n
expl2. Dac expl2 este evaluat ca .T. se permite accesul la regiunea de editare,
altfel nu, srindu-se la urmtorul cmp GET. n expresia expl2 (ce urmeaz clauzei
WHEN) este de asemenea posibil utilizarea unor funcii definite utilizator.
Pentru a vedea coninutu! unei variabile, cmp sau element de masiv ntr-o regiune
de editare text, fr ca acesta s poat fi modificat se indude clauza NOMODIFY.
Clauza SCROOL se folosete pentru plasarea n dreapta regiunii de editare a unei
bare de defilare cu ajutorul creia se poate defila de-a !ungul paginii de text mai
mari dect regiunea de editare.
Clauza TAB se folosete pentru a introduce caractere TAB n textul editat. Acesta
face ca apsarea tastei TAB s nu determine ieirea din zona de editare ci s
introduc un TAB (chr(9)) n cadrul textului. Pentru ieire n acest caz se va utiliza
CTRL+TAB.
Clauzele COLOR i COLOR SCHEME precizeaz culorile conform tabelul urmtor:
Numr pereche Elementul controlat
1,4,7-9 Nefolosite de declanator
2 Regiune de edit. accesibil

3 Bar de defilare
5 Mesaj clauz MESSAGE
6 Regiune de edit. seiectat
10 Regiune de edit. inaccesib.
5.4 Comanda READ
Comenzile GET i EDIT doar definesc cmpurile, nu declaneaz citirea lor, aceasta
urmnd s se fac prin comanda READ.
Citirea cmpurilor se face printr-o zon de memorie cu organizare FIFO (First in First
out - primul intrat, primul ieit) simbolizat prin exemplul urmtor:
Presupunem trei cmpuri get citite printr-o comand READ

Citirea propriuzis se realizeaz cu comanda READ care preia cele trei cmpuri din
zona de memorie definit, cmpurile GET unul cte unul n ordinea definirii
respectnd organizarea FIFO. Saltul la cmpul urmtor se realizeaz cnd cmpul a
fost complectat sau prin tastarea tastei ENTER, iar saltul la cel anterior prin tastarea
SHIFT+TAB sau a tastei direcionale .
Comanda READ are urmtoarea sintax:
READ [CYCLE] [ACTIVATE expl1] [DEACTIVATE expl2]
[MODAL] [WITH list ferestre] [SHOW expl3]
[VALID expl4 | expn1] [WHEN expl5]
[OBJECT expn2] [TIMEOUT expn3] [SAVE] [NOMOUSE]
[LOCK | NOLOCK] [COLOR list | COLOR SCHEME expn4]
Ieirea din cmpul GET se face odat cu complectarea ultimului cmp GET (dac nu
este precizat clauza CYCLE) sau la apsarea tastei ESC sau CTRL/W. Clauza CYCLE
determin continuarea comenzii READ dup ieirea din ultimul cmp GET cu primul
cmp (reluarea n ciclu a citirii). Terminarea n acest caz se va face la apsarea
tastei ESC i CTRL/W sau la terminarea limitei de timp din clauza TIMEOUT.
Clauza VALID este urmat de o expresie numeric sau logic care este evaluat la
ieirea din comenda READ astfel:
- valoarea expresiei este .T. comanda READ se ncheie;
- valoarea este .F. - nu se permite ieirea i cursorul rmne n cmpul GE care
rmne cmp curent.
Dac expresia este numeric cursorul se poziioneaz pe cmpul care are numrul
egal cu valoarea expresiei dac el exist, iar dac nu comanda read se ncheie. n
cazu! n care expresia clauzei valid este de a!t tip, comanda se ncheie.
Exemplu: Se citesc dou cifre strict pozitive de maxim dou cifre, primul numr fiind
mai mic dect al doilea iar suma egal cu 11. ;
SET TALK OFF
CLEAR
store 0 to a,b
@ 10,10 say 'lntroduceti primul numr' get a picture '99' valid a>0
@ 12,10 say 'lntroduceti al doilea numr' get b;
picture '99' valid a<b .and. a+b=11 and b>0
READ

?a, '<' ,b ,' si', a,'+', b ,'==', a+b


sau se poate folosi varianta:
SET TALK OFF
CLEAR
store 0 to a,b
@ 10,10 say 'lntroduceti primul numr' get a picture '99' valid a>0
@ 12,10 say 'introduceti al doilea numr' get b;
Picture '99' valid b>0
READ VALID a<b.and.a+b=11
?a,' <' ,b,' si', a,' +', b,' =,' a+b
O clauz VALID a unei comenzi READ poate conine o funcie utilizator (sau mai
multe) n care s-a indus o comand READ. n acest caz obinem dou nivele de
READ (READ-uri imbricate), prima comand avnd nivelul 1 iar cea de a doua
nivelul2. Clauza WHEN este folosit pentru ca o comand READ s fie executat
numai n anumite condiii prevzute n expresia logic ce urmeaz acestei clauze.
Comanda read va fi executat dac condiia este evaluat ca .T.
Clauza OBJECT dac este prezent face ca s poat fi citit un alt cmp dect primul
definit (dac este absent clauza se citesc cmpurile n ordinea definirii). Cmpul
citit va fi cel care are numrul de ordine egal cu expn2 (expresia ce urmeay
clauzei).
NOMOUSE - nu permite utilizarea mouse-ului
TIMEOUT expn3 - limiteaz timpul i termin comanda n timpul specificat.
Cmpurile editate n acest timp sunt salvate, restul nu.
Clauzele ACTIVATE, DEACTIVATE, MODAL, i WITH se refer la lucrul cu ferestre, iar
clauza SHOW va fi prezentat i ea n paginile urmtoae.
Pentru a afla cum s-a ncheiat ultima comand READ i n general orice comand de
editare se poate utiliza funcia READKEY() cu sintaxa:
READKEY [expn]
Funcia returneaz o valoare numeric ce corespunde tastei apsate pentru ieirea
dintr-o comand de editare (APPEND, BROWSE, CHANGE, CREATE, EDIT,
INSRERT.MODIFY i READ).
Tabelul de mai jos d codurile retumate i tasta ce determin aceasta:
Tasta de terminare______Valoare retur _____Semnificatie
_________________________s-au
_____________________ Nu s-a modificat.
--------------------------------------------------- --------------------------------------Backspace, sgeat stnga,
CTRL+H, CTRL+S________ 0______256__inapoi un caracter
Sgeat dreapta,
CTRL+D, CTRL+LCTRL+L__1______257__Inainte un caracter
Home, CTRL+A__________2______258___Inapoi un cuvnt
End, CTRL+F____________3______259___Inainte un cuvnt
Sgeat sus, Ctrl+End,
Shift+Tab, Ctrl+K_________4______260___Inapoi un cmp
Sgeat jos,Ctrl+X, Tab,
Ctrl+Enter, Ctri+I, Ctrl+J___5______261___Inainte un cmp
PgUp, Ctrl+R____________6______262___Inapoi un ecran
PgDn, Ctrl+C____________7______263___Inainte un ecran
Ctrl+sget stnga_______8______264___Umplut
Ctrl+Q, Escape_________12______268___leire fr salvare
Ctrl+End, + Ctrl+W______14______270___ieire cu salvare
Enter,Ctrl+sget
dreapta, Ctrl+M__________15_____271___Enter sau umplut
TIMEOUT_______________20_____276___Timeout
Ctrl+HOME, Ctrl+M_______33_____289___Ctrl+PgUp++PgUp________34_____290___-

Ctrl+PgDn_______________35_____291___F1_____________________36_____292___Tasta Help
Dac se introduce ca parametm al funciei expresia numeric expn, acesta va lua o
valoare corespunztoare modului n care s-a terminat omanda READ anterioar.
Vom avea urmtoarele semnificaii:
Valoare__________Tipul terminrii
------------------------------------------------2______Com. CLEAR READ
3______un obiect terminal
4______dat. nchiderii ferestrei
5______val .T. returnat de clauza DEACTIVATE
6______Datorit TIMEOUT
1______Nici unul din caz. anter.
Prin funcia READKEY se poate vedea modul de terminare al comenzii READ i felul
n care s-a terminat aceast comand.
Una din facilitile importante ale citirii de date prin comenzile GET - READ o
reprezint clauza VALID i clauza WHEN ce pot conine funcii definite de utilizator.
n continuare vom da un exemp!u de comezi READ imbricate pentru a lmuri acest
problem:
CLEAR
@ 10,10 SAY 'Nume' GET nume DEFAULT space(15);
VALID NOT EMPTY(nume)
@ 11,10 SAY 'Prenume' GET pren DEFAULT space(20);
VALID NOT EMPTY(pren)
@ 12,10 SAY 'Sex' GET sex DEFAULT .F.
@ 13,10 SAY 'lnaltime' GET inalt DEFAULT 0 Pict '9.99';
WHEN sex = .T. VALID NOT EMPTY (inalt)
@ 14,10 SAY 'Greutate' GET greu ' DEFAULT 0 PICT '9999';
WHEN sex=.F. VALID NOT EMPTY (greu)
READ
Acesta este o metod de rezolvare. Vom da n continuare o alt metod n care se
introduc comenzile READ imbricate;
CLEAR
@ 12,10 SAY 'Sex' GET sex DEFAULT .F. VALID test
read
FUNCTION TEST
@ 10,10 SAY 'Nume' GET nume DEFAULT space(15)
@ 11,10 SAY 'Prenume' GET pren DEFAULT space(20)
@ 13,10 SAY 'lnaltime' GET inalt DEFAULT 0 PICT '9.99';
WHEN sex=.T.
@ 14.10 SAY 'Greutate' GET greu DEFAULT 0 PICT '999';
WHEN sex=.F.
READ
IF EMPTY(nume) .or. EMPTY(pren) .or. (EMPTY(inalt) .and.;
sex=.T.) .or. (EMPTY(greu).and. sex=.F.)
RETURN .F.
ELSE
RETURN .T.
ENDIF
Cele dou exemple realizeaz acelai lucru i anume citirea celor cinci cmpuri GET.
Primul are o structur clasic, cel de al doilea avnd o structur mai complicat
coninnd un read imbricat.

n ceea dea a doua comand din ultimul program este citit cmpul GET sex ce va fi
citit cu comanda READ din linia urmtoare. Urmtoarele linii definesc o funcie
utilizator numit TEST. Trirniterea n acest procedur se face la citirea datei din
cmpul sex (prin clauza VALID) care pentru a ncheia comanda READ are nevoie de
rezultatul funciei TEST deci va efectua aceast funcie prin care se fac restul
citirilor i este validat sau nu valoarea citit (sex) n ultimele linii ale functiei
aceasta returnnd .F. sau .T. dup caz (cmp sex invalid sau respectiv valid).
Valoarea .F. sau .T. este returnat prin comanda RETURN,
n scopul aflrii nivelului de READ curent se folosete funcia RDLEVEL () care nu are
parametrii i care returneaz o valoare natural (0, - indic lipsa unei comenzi READ
active, iar 1 i aa mai departe indic nivelul de READ activ).
Comanda cu sintaxa:
CLEAR READ [ALL]
termin read-ul de pe nivelul curent i trece !a READ-ul de la nivelul anterior dup
ce a executat comenzile dintre READ-uri (dac exist). Folosind clauza ALL se vor
termina toate READ-urile de pe toate nivelele.
5.5 Comenzi i funcii pentru controlul cmpurilor GET
Numrul cmpului GET curent (care se af! n curs de editare} este depozitat n
variabila sistem _CUROBJ. Aceast variabil poate fi folosit att pentru aflarea
cmpului GET curent, ct i pentru trecerea la citirea unui nou cmp GET,
modificnd valoarea variabilei pnntr-o instruciune de atribuire de forma:
_curobj = expn (unde expn este o expresie numeric ntreag)
Pentru aflarea numelui cmpului GET curent se utilizeaz functia VARREAD() (fr
parametrii) care retumeaz un ir de caractere coinnd numele cmpului GET
curent (n fereastra BROWSE, CHANGE, sau EDIT) sau al variabilei, elementului de
masiv sau cmpului din baza de date (pentru un cmp GET simplu).
Acest funcie (VARREAD()) are o valoare identic cu funcia SYS(18) care se poate
folosi n acelai scop.
Exemplu:
@ 10,10 GET beta default 0 valid VARREAD()= 'beta'
READ
Cum VARREAD va lua valoarea 'beta' imediat ce se va introduce o valoare n
aceast variabil, introducerea prin READ se va ncheia i expresia clauzei VALID va
lua valoarea .T..
Pentru a obine numrul de ordine a! unui cmp GET se folosete functia:
OBJNUM(var [,expn])
Acest funcie retumeaz o valoare numeric reprezentnd numrul de ordine al
cmpului GET cu care se realizeaz citirea lui "var", care poate fi o variabil, un
element de masiv sau un cmp al unei baze de date. Dac se include i expresia
expn, aceasta va avea semnificaia nivelului de READ n care se caut cmpu! GET
respectiv.
Cnd un cmp GET a fost completat n ntregime, se iese din editarea cmpului
acest aciune fiind nsoit de un sunet scurt (BELL) dac SET BELL este ON. Dac
SET CONFIRM este ON atunci se va atepta (la completarea cmpului get) apsarea
tastei ENTER nainte de ieirea din cmpul GET. Pentru setarea acestei confirmri se
folosete comanda:
SET CONFIRM ON | OFF
care duce la confirmarea prin ENTER a introducerii (ON) respectiv nu (OFF cnd se
va iei automat din cmpul GET la completarea cmpului.
Comanda: CLEAR GETS se folosete pentru a elimina din memorie toate cmpurile
GET care urmeaz celui curent. Astfel citirea acestor cmpuri nu se mai face.
Comenzile SHOW GETS i SHOW OBJECT se folosesc cnd se dorete reafiarea
unuia sau mai multor cmpuri GET, n urma modificrii coninutului sau a

caracteristicilor acestora:
SHOW GET var [,expn1 [PROMPT expc] ]
[ENABLE | DISABLE] [LEVEL expn2]
[COLOR list perechi | COLOR SCHEME expn3]
Comanda reafieaz cmpul GET identificat prin "var" care poate fi un cmp de
editare simplu sau un obiect de control.
Dac se dorete schimbarea textului explicativ sau a imaginii obiectului reafiat, se
folosete clauza PROMPT urmat de irul expc ce reprezint noul text explicativ sau
noua imagine asociat obiectului. Prin "expn1" se selecteaz numrul curent al
obiectului din mulimea definit cu comanda GET.
Schimbarea strii elementului (activat, dezactivat) se realizeaz cu clauza ENABLE,
DISABLE iar cutarea elementului pe un alt nivel READ dect cel curent se specific
prin expresia "expn2". Culorile folosite se stabilesc prin clauzele COLOR sau COLOR
SCHEME.
O comand asemntoare este: 1
SHOW OBJECT expn1 [PROMPT expc]
[ENABLE | DISABLE] [LEVEL expn2]
[COLOR list perechi | COLOR SCHEME expn3]
Acest comand selecteaz obiectul ce se reafieaz prin numrui curent obiectului
dorit, "expn1". Celelalte clauze au aceeai semnificaie ca la comanda anterioar.
Pentru reafiarea tuiuror obiectelor se foloseste comanda:
[ENABLE JDISABLE] [LEVELEXPNL] [OFF| ONLY]
[WINDOW nume fereastr] [LOCK]
[COLOR list perechi | COLOR SHEME expn2]
Clauzele ENABLE i DISABLE se folosesc pentru schimbarea caracteristicilor de
acces ale tuturor obiectele care vor deveni toate accesibile (ENABLE) sau doar se
vor vizualiza (DISABLE).
Clauza WINDOW se refer la lucrul cu ferestre fiind tratat n capitolul respectiv, iar
LOCK intervine la lucrul n reea.
Exemplu:
CLEAR
SET TALK OFF
DIMENSION den(2)
den(1)='!nversoare
den(2)='Neinversoare'
@ 10,10 GET opt DEFAULT 'lnversoare' FROM den;
FUNCTION '&' SIZE 4,16
READ VAUD TEST()
FUNCTION TEST
IF opt='Inversoare'
a=den(1)
den(1)=den{2)
den(2)=a
ENDIF
SHOW GETS
RETURN .T.
Comanda READ poate fi prevzut cu o clauz SHOW GETS (ca n exemplu) care
este urmat de o expresie logic care poate fi o funcie definit utilizator. La
execuia comenzii SHOW GETS, nainte de reafiarea obiectelor respective se va
evalua expresia logic i, dac este .T. se va face reafiarea.
Valoarea rezultat n urma evalurii expresiei logice a clauzei SHOW nu este luat n
considerare de FoxProW.
5.6 Comenzile ? i ??
Aceste comenzi sunt alte comenzi de afiare a datelor pe ecran sau imprimant.

Comanda calculeaz poziia de afiare funcie de poziia curent cursorului. Sintaxa


comenzii este:
? | ?? [expr1] [PICTURE expc1] [FUNCTION EXPC2]
[AT expn1] [FONT expc3 [,expn2]]
[STYLE expc4 [expr2] [,expr3....]
Comenzile afieaz pe ecran rezultatul evalurii expresiilor "expr1", expr3 ...., cele
dou comenzi diferind doar prin modul de calcul al poziiei de afiare a acestor
valori i anume comanda ? afieaz acest valoare ncepnd cu prima coloan a
urmtoarei linii n care se afl cursorul n acel moment, iar comanda ?? n poziia din
care se afl cursorul n acel moment.
Clauzele PICTURE i FUNCTION stabilesc formatul de afiare al datelor iar clauza AT,
indic coloana din care se va face tiprirea datei respective. Clauza FONT i STYLE
sunt utilizate pentru specificarea tipului de caractere i a stilului de afiare utilizat.
Dac se dorete afiarea mai multor valori prin aceeai comand se vor preciza
variabilele de tiprit, separate printr-o virgul (care vor fi afiate la un interval de un
spaiu ntre ele, pe aceeai linie. Dac nu se dorete un spaiu ntre acestea se
poate folosi comanda;
SET SPACE OFF | ON n care OFF duce la absena spaiului opiunea implicit fiind
ON
Pentru afiarea la imprimant se vor folosi comenzile:
SET PRINTER ON | OFF n care ON determin ca ieirile s se fac i la imprimant.
5.7 Comenzile *,&&, i ,\. TEXT... ENDTEXT
Comenzile * i && se folosesc pentru a introduce n programe comentarii iar
comenzile ,\, TEXT i ENDTEXT sunt folosite pentru a introduce texte n programe,
texte care sunt tiprite pe sistemul standard de ieire.
Dac ntr-o linie, pe primul caracter diferit de spaiu apare caracterui "*", atunci linia
respectiv va fi considerat comentariu i nu va fi interpretat de ctre compilator.
Exemplu:
CLEAR
* Aceast linie este considerat comentariu
RETURN
Aceast metod se poate folosi i pentru a "terge" din program anumite linii
nenecesare fr ca ele s fie terse efectiv.
Dac ntr-o linie FoxPro apar caracterele "&&" indiferent n ce poziie, atunci toate
comenzile care urmeaz acestor caractere se consider comentariu i nu vor fi luate
n considerare de compilator. Acest metod este utilizat pentru a introduce
comentarii care lmuresc funcionarea comenzii aflate pe !inia respectiv.
Exempiu:
CLEAR && comanda terge ecranul
USE MFIXE INDE MFIXE && deschide baza de date
RETURN && ncheie executia programului,
Comenzile i \ realizeaz tiprirea liniilor de text ce le urmeaz.
linii de text \ linii de text
Exemplu:
CLEAR
Bun venit in lumea
calculatoaretor!
Bun venit in lumea calculatoarelor!
Observm c irurile de caractere nu trebuie s fie introduse ntre ghilimele sau
apostroafe i c se tipresc inclusiv spaiile. Comanda SET TEXTMERGE cu sintaxa:
SET TEXTMERGE [ON | OFF] [TO [fisier] [ADDITIVE] ]
[WINDOW nume fereastr] [SHOW | NOSHOW]
Cnd se specific clauza ON expresiile ncadrate ntre delimitatorii "<<" i ">> " vor
fi evaluate nainte de afiarea textului iar n caz contrar (implicit) acestea vor fi

afiate exact aa cum sunt n text fr evaluare.


Opiunea TO permite specificarea unui fiier unde vor fi introduse textele
respective.
Delimitatorii folosii pentru ncadrarea expresiilor de evaluat pot fi modificai cu
ajutorul urmtoarei comenzi:
SET TEXT MERGE DELIMITERS TO [expc1 [,expc2] ]
Dac n comand se specific un singur delimitator, acesta va fi folosit naintea i
dup expresia de evaluat, iar dac sunt introdui doi delimitatori, primul va fi folosit
naintea, iar al doilea n spatele expesiei.
Cu comanda:
SET TEXTMERGE DELIMITERS TO
se revine la delimitatorii standard ("<<" i">>" ),
O comand asemntoare cu aceastea este cea cu structura:
TEXT
linii de text (una sau mai multe)
ENDTEXT
Exemplu:
TEXT
Aceste linii de text sunt asemntoare comenzilor i i are exact aceleai regului de
funcionare cu cele expuse pentru aceasta.
ENDTEXT
Comanda (ca i i \) este influenat de comanda SET PRINTER TO
(Privitor la locul de afiare a textului). De asemenea comanda TEXT ... ENDTEXT
poate utiliza expresii delimitate dup cum s-a artat la comanda anterioar.
5.8 Lucrul cu ecranul. Elemente semigrafice
Caracterele ce pot fi afiate ntr-o anumit poziie pe ecran nu sunt numai litere i
cifre ci i anumite elemente semigrafice care sunt puse la dispoziia utiiizatorului
prin submeniul File pe optiunea Character Map n care sunt furnizate o serie de
caractere i semne ce pot fi utilizate,
De asemenea exist i o serie de comenzi care fac posibil afiarea pe ecran a unor
chenare, simple sau trase cu linie dubl, cu anumite culori, n scopu! obinerii unor
imagini ct mai plcute.
Comanda cu sintaxa:
@ lin1,col1, lin2,col2 BOX [expc]
Acest comand permite trasarea unui chenar (eventual plin cu diferite tipuri de
caractere, de la coordonatele lin1,col1 stnga sus i pn la lin2,col2 (dreapta jos),
caracterul de umplere fiind precizat prin expc.
Comanda:
@ lin1,col1, TO lin2,col2 [DOUBLE | PANEL | list chenar]
[PATTERN expn1] [PEN expn2 [,expn3]] [STYLE expc]
[COLOR list perechi culori | COLOR SCHEME expn4]
se folosete n acelai scop. Comanda traseaz un dreptunghi din lin1,co!1 (stnga
sus) pn n lin2,col2 (dreapta jos) unde opiunile semnific:
- DOUBLE - chenarul este trasat cu linie dubl (sub DOS)
- PATTERN - traseaz un chenar simplu cu o singur linie. Chenarul va fi plin dac se
precizeaz clauza PANEL
- STYLE expc - irul de caractere conine un numr 0-99 care indic procentul din
latura chenarulu! care va fi rotunjit (0 -dreptunghi, 99 - elips sau cerc).
- PATTERN indic modul de umplere conform tabelului:
expn Mod de umplere
0 Fr umplere (gol, transparent)
1 Plin (interior culoarea fond)

2
3
4
5
6
7

Cu linii orizontale
Cu linii verticale
Cu diagonale spre nainte
Cu diagonale spre napoi
Model special
Model special

PEN expn2 controleaz trasarea liniei delimitatoare a figurii (peni) conform


tabelului:
Expn2 Grosimea
0 Fr
1 1 punct
2 2 puncte
3 3 puncte
4 4 puncte
5 5 puncte0
6 8 puncte
Expn3 Tipul penitei
0 Fr
1 cu linie punctat deas
2 cu linie punctat rar
3 cu linie punct
4 cu linie punt punct
Culorile se pot preciza prin clauzele COLOR sau COLOR STYLE. Folosirea clauzelor
PATTERN, PEN i STYLE elimin efectul clauzetor DOUBLE, PANEL i list chenar.
Exemplu:
@ 10,10 to 20,70 PATTERN 2 PEN 2 style '0'
@ 5,40 to 22,50 PATTERN 3 PEN 1 style '99'
@ 7,20 to 15,30 PATTERN 0 PEN 0 styte '5'
tergerea ecranului se realizeaz cu comenzile:
CLEAR - care terge tot ecranul
i
@ lin,col [CLEAR | CLEAR TO lin2,col2]
Aceast a doua comand terge o portiune de ecran care ncepe n !in,col (stnga
sus) pn n lin2,col2 (dreapta jos) n cazul folosirii clauzei CLEAR TO, respectiv
lin,co! (stnga sus) i colul din stnga jos al ecranului (care este definit de funciile
SROWS() i SCOLS().
Se terge doar linia specificat pn la sfritul ei dac nu se specific nici clauza
CLEAR nici CLEAR TO.
Exemplu:
@ 10,10 TO 20,20 PATTERN 1 COLOR w/r
@ 12,20 CLEAR TO 20,50
Comanda @... FILL se folosete pentru a modifica culorile dintr-o anumit poriune a
ecranului far a afecta coninutul su:
@ lin,col FILL TO lin2,col2
[COLOR list perechi culori|COLOR SCHEME expn]
n care lin,col reprezint colul din stnga sus iar lin2,col2 colul din stnga jos.
Exemplu:
@ 0,0 to 24,79 PEN 4
@ 12,20 FILL TO 14,60 COLOR r/b
@ 16,20 FILL TO 20,60 COLOR w+/n
o 5 septembrie 2008
o 0 comentarii

nici o evaluare
Capitolul 5-2.
5.9 Ferestre
o

Fereastra este o poriune a ecranului, tratat ca un tot unic i care pot fi create de
ctre utifizator pentru a face tiprirea curent (fereastra devine ecranul curent).
Exist ferestre sistem (despre care s-a vorbit anterior) i ferestre ce pot fi definite
de ctre utilizatori. Lucrul cu ferestre este urmtorul:
- ferestrele trebuie definite iniial prin comenzi specifice;
- apoi ferestrele se afieaz pe ecran (se activeaz);
- se pot afia texte sau diferite obiecte n ferestre;
- ferestrele se pot minimiza, muta, redimensiona etc;
- apoi, la terminarea lucrului ferestrele se nitur din memorie i de pe ecran.
Definirea unei ferestre se face cu comanda:
DEFINE WINDOW nume FROM lin,col TO lin2,col2
I AT lin3,col3 SIZE lin4,col4 [IN [WINDOW] nume1
I IN SCREEN | IN DESKTOP] [FONT expc1 [,expn1]]
[STYLE expc2] [FOOTER expc3] [TITLE expc4]
[HALFHEIGHT] [DOUBLE | PANEL | NONE | SYSTEM
| ir chenar] [CLOSE | NOCLOSE] [FLOAT | NOFLOAT]
[GROW | NOGROW] [MDI | NOMDI] [MINIMIZE]
[SHADOW] [ZOOM | NOZOOM] [ICON FILE expc5]
[FILL expc6 | FILL FILE fisier bmp]
[COLOR list perechi | COLOR SCHEME expn]
Nume - reprezint numele de identificare a ferestrei (maxim 10 caractere).
Ferestrelor definite li se asociaz o structur arborescent pe nivele, o ferestr
putnd fi subordonat altei ferestre (clauza IN WINDOW).
Relaia printe - copil dintre dou ferestre determin anumite caracteristici pentru
fereastra copil:
- mutarea ferestrei printe determin corespunztor mutarea ferestrei copil;
- fereastra copil nu poate fi mutat n afara ferestrei printe;
- coordonatele ferestrei copil sunt relative la fereastra printe. Dac nu se dorete
asocierea unei ferestre alteia, se poate folosi clauza SCRREN care definete fereatra
pe ecran (opiune implicit) sau clauza IN DESKTOP:
Aceast fereastr va fi asemntoare rdcinii directorului (directorul curent), ei
putndui fi asociate alte ferestre (copil).
lin,col definete colul din dreapta sus al ferestrei, iar lin2,col2 definete colul ei din
stnga jos. Coordonatele sunt relative la ecranul calculatorului sau la fereastra
printe i pot fi att ntregi ct i fracionare.
Clauzele AT i SIZE prin lin3,lin4 respectiv lin4,col4 pot i ele indica poziia ferestrei,
exprimat n caractere.
Exemplu:
DEFINE WINDOW fer1 FROM 5,10 TO 15,70 IN SCREEN
DEFINE WINDOW fer2 AT 2,10.5 SIZE 2,40.5 IN fer1
Afiarea textelor n fereastr se face folosind un font i un stil implicit (FoxFont) cu
dimensiunea de 10 puncte stilul Normal. Orice comand ce va afia un text n
fereastr va folosi acest font i stil.
Dac se dorete schimbarea fontului i al stilului se folosesc clauzele FONT i STYLE
unde prin expc1 se pot indica noul font ('Roman' 'Arial' etc) respectiv prin expn1
dimensiunea sa iar prin expc2 stilul de afiare (bold, Italic etc).
Clauzele FOOTER i TITLE sunt urmate de un ir de caractere reprezentnd un text
ce va fi afiat pe linia de jos a ferestrei (FOOTER) respectiv pe prima sa linie (TITLE)
n centrul acesteia,
Clauza HALFHEIGHT se folosete pentru a crea o baz de titlu de "jumtate de
nlime" pentru compatibilitate ntre versiunile DOS i WINDOWS ale FoxPro.
Clauzele DOUBLE, PANEL, NONE, SYSTEM i list chenar se refer la tipul chenarului

ferestrei. Incluznd n comand clauza PANEL vom obine un chenar plin, cu clauza
DOUBLE se va obine un chenar trasat cu linie dubl (versiunea sub DOS, sub
WlNDOWS chenarul va fi plin). Clauza NONE indic lipsa complet a chenarului, iar
clauza SYSTEM creaz un chenar asemntor cu ferestrele sistemului. Dac nu se
specific nici o clauz referitoare !a chenar, se creaz un chenar tras cu o linie
simp!.
Clauza FILL stabilete fondul ferestrei (varianta sub DOS, altfel nu se utilizeaz).
Clauza FILL FILE urmat de numele unui fiier imagine (bmp) indic imaginea cu
care se va umple fundalul ferestrei.
Clauza CLOSE sau NOCLOSE indic posibilitatea nchiderii sau imposibilitatea de a
nchide fereastra, prin selectarea opiunii CLOSE din meniul FILE sau prin apsarea
butonului stng al mouse-ului, cnd cursorul acestuia se afl pe coltul din stnga
sus al ferestrei.
Dac este prezent clauza NOCLOSE fereastra nu poate fi astfel nchis ci
nchiderea sa se poate face numai prin comenzi FoxProW.
Clauzele FLOAT / NOFLOAT permite (respectiv nu) mutarea ferestrei. Mutarea se
poate face astfel:
- selectnd opiunea Move din submeniul Windows sau tastnd combinaia CTRL+F7
i acionnd apoi tastele direcionale dup care mutarea se ncheie tastnd ENTER.
- poziionnd mouse-ul pe latura superioar a chenarului i "trgnd" de fereastr
(metoda drag and drow) adic innd apsat butonul stng al mouse-ului se mut
mouse-ul. Cnd este eliberat se ncheie mutarea.
Clauza NOGROW nu permite schimbarea dimensiunilor ferestrei, iar micorarea
dimensiunilor ferestrei la o icoan este permis de clauza MINIMIZE,
Folosind tastele CTRL+F9 se realizeaz de asemenea minimizarea sau selectnd
opiunea ZOOM din submeniul Windows, sau cu ajutorul mouse-ului prin dublu clic
pe butonul de minimizare.
Clauza ZOOM / NOZOOM permite sau nu extinderea ferestrei la ntreg ecranul sau
ntrega zon printe. Repetnd operaia de maximizare, fereastra va fi readus la
dimensiunile originale.
n FoxProW exist un tip de ferestre predefinit numit MDI (Multiple Document
Interface) care permite lucrul cu ferestre multiple. Caracteristicile specifice ale
ferestrelor MDI sunt:
- o fereastr MDI se maximizeaz la fereastra principal (ecran);
- dispar obiectele de control ale ferestrei (maximizare, reducere);
- butonul de activare a meniului asociat se include n baza meniului sistem FoxPro;
- titlul ferestrei este inclus n zona titlu a ferestrei sistem;
- activarea altei ferestre MDI determin maximizarea automat a ferestrei MDI.
C!auza MD! / NOMDI specific faptul c este definit (sau nu) o feresir de tipul
MDI.
Opiunile implicite sunt:
NOCLOSE, NOFLOAT, NOGROW, NOZOOM fr MINIMIZE.
Culorile folosite la afiarea ferestrei pot fi precizate prin clauzele COLOR sau COLOR
SCHEME.
Comanda:
SET BORDER TO [SINGLE | DOUBLE | PANEL | NONE
list chenar1] [,list chear2]
modific forma chenarului definit pentru fereastr.
Opiunea implicit este SINGLE, Schimbarea tipului chenarului cu aceas comand
nu influeneaz ferestrele care au fost deja definite pn la aceast comand n
schimb ea influeneaz chenarul meniurilor.
Comanda:
ACTIVATE WINDOW [nume1, [nume2...]] | ALL
[IN [WINDOW] nume3 | IN SCREEN] BOTTOM |
TOP | SAME] [NOSHOW]
realizeaz afiarea ferestrei nume1 (eventual nume2 ... ) sau a tuturor ferestrelor

(ALL) pe ecran, eventual n alte ferestre (lN WINDOW nume3). Dac pe ecran exist
alte ferestre, afiarea se face peste acestea.
Vom avea dou aspecte referitoare la acest comand: unul cu privire la afiarea
propriuzis i altul cu privire la locul de afiare (fa de fereastra curent sau fa de
ecran n ansamblu).
Astfel dac se dorete o alt poziie pentru fereastra de activat relativ la celelalte se
vor folosi clauzele:
- BOTTOM - amplasarea ferestrei se face n spatele celorlalte;
- TOP - amplasarea se va face n fa;
- SAME - n poziia normal (cea n care este deja activat).
Clauza NOSHOW - activeaz fereastra dar nu o afieaz pe ecran (fereastra este
completat n memorie, dup care ea va fi afiat prontr-o comand SHOW
WINDOW).
Comanda:
SHOW WINDOW nume [,nume2...] |ALL
[IN [WINDOW] nume3 IN [WINDOW] SCREEN]
[REFRESH] [TOP | BOTTOM | SAME] [SAVE]
Clauzele care nu au fost prezentate sunt:
REFRESH - se folosete pentru remprosptarea ferestrei BROWSE fiind util la lucrul
n reea,
SAVE - se folosete pentru a pstra o imagine a ferestrei respective pe ecran sau
ntr-o alt ferastr (printe) i dup ce fereastra a fost ascuns. Imaginea este
eliminat prin utilizarea comenzii CLEAR. Nu se poate ap!ica clauza SAVE asupra
ferestrei curente,
Exemplu:
SET TALK OFF
CLEAR
DEFINE WINDOW f1 FROM 1,10 to 20,60
DEFINE WINDOW f2 FROM 2,10 to 8,40
ACTIVATE WINDOW F1
CLEAR
@ 1,1 SAY 'Ce mai faci?'
SHOW WIND f2
@ 6,1 SAY 'Andrei'
NOTE fereastra curent este tot f1 (nu s-a schimbat)
SHOW WIND f1
CLEAR
Comanda opus lui ACTIVATE WINDOW i SHOW WINDOW este HIDE WINDOW sau
DEACTIVATE WINDOW care elimin de pe ecran una sau mai multe ferestre fr a le
nltura din memorie:
HIDE WINDOW [nume1 [,nume2]... ] |ALL
[IN [WINDOW nume3 | [IN [WINDOW] SCREEN]
[BOTTOM |SAME |TOP] [SAVE]
Ferestrele cu numele "nume1", "nume2", "nume3" vor fi ascunse dar nu vor fi
ndeprtate din memorie. Specificnd clauza ALL vor fi ascunse toate ferestrele
existente pe ecran n acel moment. Ascunderea ferestrelor se poate face pe ecran
(SCREEN) sau ntr-o alt fereastr printe (nume3, IN WINDOW).
Clauza SAVE se folosete pentru a pstra n memorie imaginea ferestrelor dup
ascunderea lor. Imaginea se terge cu comanda CLEAR.
Comanda HIDE WINDOW nu afecteaz locul n care se trimit ieirile comenzilor
FoxPro. Fereastra ascuns cu acest comand rmne fereastr curent n
continuare.
Pentru a modifica fereastra curent se pot folosi comenzile ACTIVATE WINDOW sau
DEACTIVATE WINDOW (care ascunde fereastra dar ea nu rmne fereastr
curent):
DEACTIVATE WINDOW nume [,nume2] | ALL

Dac sunt mai multe ferestre active, cealalt fereastr activ (nu cea care a fost
dezactivat) va deveni fereastr activ dar comanda nu nltur fereastra din
memorie.
nlturarea ferestrelor din memorie se poate realiza cu comanda:
RELEASE WINDOWS [list ferestre]
Lista ferestrelor ce sunt nlturate din memorie poate conine ferestre utilizator dar
i ferestre sistem.
Comanda:
CLEAR WINDOWS
nltur toate ferestrele att de pe ecran ct i din memorie.
Comanda:
SAVE WINDOWS list | ALL TO fiier | TO MEMO cmp
salveaz caracteristicile ferestrelor ntr-un fiier n vederea refacerii lor ulterioare.
Dac la numele fiierului n care sunt salvate ferestrele prezente n list (sau toate
n cazul clauzei ALL) nu se specific o extensie, sistemu! va atribui automat
extensia ,WIN
n fiierul specificat sau n cmpul memo se vor specifica i strile momentane ale
ferestrelor respective, deci dac sunt active sau ascunse. Refacerea ferestrelor se
realizeaz cu comanda:
RESTORE WiNDOW list | ALL FROM fiier
I FROM MEMO cmp memo
Dac este refcut sau definit o fereastr cu acelai nume cu al uneia existente n
memorie, cea din memorie se pierde fiind nlocuit cu noua fereatr. O dat cu
refacerea se reface i starea ei (activ sau ascuns).
Exemplu:
CLEAR
DEFINE WIND f1 FROM 6,10 T016,40 DOUBLE SHADOW
ACTIVATE WIND f1
@ 1,1 SAY ' Fereastra de testare'
SAVE W!ND f1 TO f1
NOTE se salveaz ferestra f1 n fiierul f1.win
CLEAR WINDOWS
NOTE se eiibereaz memoria de toate ferestrele
RESTORE WINDOWS f1 from f1
NOTE Se reface fereastra f1
@ 1,1 SAY Fereastra de testare'
Retu
Funcie de prezena sau absena clauzei FLOAT sau NOFLOAT n comanda DEFINE
WINDOW fereastra poate fi mutat n alt poziie sau nu. Pentru mutarea unei
ferestre se folosete comanda:
MOVE WINDOW nume TO ln,col | BY expn1,expn2
[CENTER]
n comand noua poziie este desemnat prin lin,col sau se calculeaz relativ la
pozitia curent a ferestrei n funcie de expresiile expn1 i expn2. Clauza TO se
refer la fereastra printe dac exist sau la ecranul FoxPro i semnific numrul de
linii i coloane ca i expn1 (numrul de linii -plus sau minus -expn1) sau riumrul de
coloane. Clauza CENTER dirijeaz ferestra n poziie central fa de fereastra
printe sau fat de ecranul FoxPro.
Fereastra de mutat trebuie s fie activ n momentul lansrii comenzii MOVE.
Exemplu:
CLEAR
DEFINE WIND f1 PROM 1,2 TO 6,22
ACTIVATE WINDOW f1 NOSHOW
@ 1,1 SAY ' Fereastra de testare'
SHOW WIND f1
FOR i=1 to16

Wait TIMEOUT 0.2


MOVE WINDOW f1 by 1,3
ENDFOR
retu
n exemplu se va defini fereastra f1 n colul din stnga sus al ecranului dup care
fereastra va fi mutat cte o linie n jos i trei coloane n dreapta pn cnd ea
ajunge n colul din dreapta jos.
Comanda WAIT este introdus pentru a ncetini mutarea ferestrei. O extensie a
acestei comenzi este:
ZOOM WINDOW nume MIN | [AUTO] | MAX | NORM
[AT Iin1,col1 | FROM lin1,col1
[SIZE lin2,col2 | TO Iin2,col2 ]]
Cu ajutorul acestei comenzi se poate maximiza (extinde la tot ecranui fereastra
printe), minimiza (reducere la dimensiuni minime, acest form putnd fi plasat
n orice poziie pe ecran sau fereastra printe) sau redimensionarea ferestrei
respective.
Clauzele MIN (minimizare), MAX (rriaximizare) NORM (aducerea ferestrei la
dimensiuni normale) pot fi folosite att pentru ferestre utilizator ct i ferestre
sistem. Aceste clauze pot fi folosite numai dac s-au prevzut anumite clauze la
definirea ferestrelor (MIN dac s-a prevzut clauza MINIMIZE la definirea ferestrei
etc).
FUNCII REFERITOARE LA FERESTRE
WEXIST (nume) - returneaz .T. dac exist fereastra "nume".
WBORDER ([nume]) - returneaz .T.dac fereastra are chenar
WMAXIMUM ([nume]) - returneaz .T. dac starea ferestrei este maximizat.
WMINIMUM ([nume]) - idem dac este minimizat
WVIZIBLE (nume) - returneaz .T. dac fereastra este visibil Dac nu se precizeaz
numele ferestrei n comenzite WBORDER, WMAXIMUM i WMINIMUM, atunci funcia
respectiv se refer la ferestra curent.
Informaii privitoare la poziia pe ecran a unei ferestre se pot obine cu funciile:
WLROW ([nume]) - indic linia de pe latura superioar
WLCOL ([nume]) - indic coloana laturii din stnga
WROWS ([nume]) - indic numrul de linii ai ferestrei
WCOLS ([nume]) - indic numrul de coloane ale ferestrei
Deci primele funcii indic colul din stnga sus al ferestrei, iar urmtoarele dou
ferestre indic mrimea ferestrei. Dac nu se specific numele ferestrei, atunci
informaiile se refer la fereastra curent, iar dac numele este (ghilimele) sau ""
atunci informaiile se refer la ecranul FoxPro.
WTITLE ([numc]) - afieaz numele ferestrei
Trebuie fcut distincie ntre numele unei ferestre i titlul su (dei ele pot fi
identice). Numele ferestrei este cel indicat n comanda define window iar titlul este
cel prezent n clauza TITLE.
WPARENT ([nume]) - returneaz un ir de caractere coninnd numele ferestrei
printe a ferestrei nume (sau a ferestrei curente).
WCHILD ([nume] [,expn]) - returneaz numrul de ferestre copil ale unei ferestre
date sau ale ferestrei curente. Dac este prezent "expn" atunci funcia este de tip
ir de caractere i este returnat numele ferestrei copil indicat prin expn: dac expn
este 0, se obine numele primei ferestre copil. Cu alte valori se obine numele
celorlalte ferestre copil (a doua cu 1, a treia cu 2 amd pn se returneaz irul
nul).
WOUTPUT ([nume]) - afieaz ntr-un ir de caractere numele ferestrei curente (dac
nume lipsete) i .T. dac funcia curent este cea precizat ("nume" ) i F, dac nu
este curent dac "nume" este prezent.
WLAST ([nume]) - funcia va returna valoarea .T. dac fereastra "nume" coincide cu
fereastra anterior activat (naintea ferestrei active n prezent) i ,F. dac nu ea este
aceasta. Funcia activat fr parametru returneaz numele ferestrei curente

anterioare (fereastra care va deveni curent dac se folosete comanda


DEACTIVATE WIND).
WONTOP ([nume]) - returneaz nume!e ferestrei din fa (cnd pe ecran sunt mai
multe ferestre), cnd este apelat fr parametru iar n caz contrar va retuma .T.
dac "nume" este fereastra cel mai din fa.
COMENZI N CARE INTERVIN FERESTRE
Comanda READ determin citirea obiectelor, cmpurilor definite anterior cu
comanda GET. Citirea acestor obiecte se poate desfura n mai multe ferestre toate
fiind coordonate de comanda READ.
Pentru a utiliza acest procedeu vom folosi urmtoarea metod de lucru:
- vom defini mai nti ferestrele;
- se va activa fereastra ce va conine cmpu! GET ce urmeaz a fi citit realizndu-se
corespondena dintre cmpurile GET i ferestreie ce le conin;
- n final se va executa comanda READ care va declana citirea cmpurilor definite
anterior.
Exemplu:
SET TALK OFF
CLEAR
DEFINE WIND f1 FROM 2,6 TO 8,20 DUBLE SHADOW
DEFINE WIND f2 FROM 6,24 TO 20,60 DUBLE SHADOW
DEFINE WIND f3 FROM 10,20 TO 18,70 DUBLE SHADOW
ACTIVATE WIND f1
@ 1,1 GET a DEFA 0 PICT '9999.99'
ACTI WIND f2
@ 2,4 GET b DEFA 0 PICT '9999.99'
ACTI WIND f3
@ 2,4 GET c DEFA 0 PICT '9999.99'
ACTI WIND f2
@ 4,4 GET d DEFA 0 PICT '9999.99'
HIDE WIND ALL
READ
clea all
retu
n sintaxa comenzii READ sunt prevzute clauze referitoare la ferestre anume:
READ
..........
[ACTIVATE expl1 ] [DEACTIVATE expl2] [MODAL]
[WITH Iist ferestre]
Clauza ACTIVATE - la citirea comenzii READ este evaluat expresia logic expl1
pentru schimbarea ferestrei curente. Acest expresie poate conine o functie
definit utilizator.
Clauza DEACTIVATE - este urmat de o expresie logic care este evaluata cnd se
aduce o alt fereastr pe ecran (deoarece se dezactiveaz o fereastr).
Exemplu:
SET TALK OFF
CLEAR DEFINE WIND f1 FROM 2,2 TO 10,36 DUBLE SHADOW
DEFINE WIND f2 FROM 4,32 TO18,76 DUBLE SHADOW
DEFINE WIND f3 FROM 12,10 TO 20,70 DUBLE SHADOW
ACTIVATE WIND f1
@ 5,4 GET a DEFA 0 PICT '9999.99'
ACTI WIND f2
@ 5,4 GET b DEFA 0 P!CT '9999.99'
ACTI WIND f3
@ 5,4 GET c DEFA 0 PICT '9999.99'
ACTI WIND f2
@ 5,4 GET d DEFA 0 PICT '9999.99'

READ ACTIVATE test1() DEACTIVATE test2() CYCLE


CLEAR WINDOWS
FUNCTION test1
@ 0,1 SAY 'Fereastra curenta este:'
?? WOUTPUT()
@ 1,1 SAY 'Fereastra curent a fost'
?? WLAST ()
RETURN .F.
FUNCTON test2
@ 2,1 SAY' Ferestra din fata este:'
?? WONTOP()
RETURN .F.
n acest exemplu sunt citite patru valori numerice a,b,c, i d n trei ferestre f1,f2 i
f3. Cu ajutorul clauzelor ACTIVATE i DEACTIVATE se afieaz n fiecare fereastr
urmtoarele informaii:
- ferestra curent;
- fereastra curent anterioar;
- fereastra din fa, folosind funciile WOUTPUT() ,WLAST() i WONTOP().
Evaluarea clauzei ACTIVATE presupune evaluarea functiei test1(), aceasta fcnduse de fiecare dat cnd se schimb fereastra curent, la intrarea n noua fereastr.
Clauza DEACTIVATE presupune evaluarea funciei test2(), de fiecare dat cnd peste
fereastr se aduce o alta, n cazul nostru la fiecare schimbare a cmpului GET
deoarece toate trei ferestrele sunt suprapuse i oricare dou cmpuri GET
consecutive sunt citite n ferestre diferite.
ntr-o comand READ pot interveni ferestre ce nu conin cmpuri GET ale comenzii
READ curente. Acest lucru se realizeaz la evaluarea unor expresii apartinnd unor
clauze ca WHEN, VALID, ACTIVATE etc, Pentru a nu permite accesarea altor ferestre
dect a celei implicate n comanda READ se adaug clauza MODAL la comanda
READ.
Acelai tip de limitare se obine i prin clauza WITH cu deosebire c ferestrele ce vor
putea fi accesate vor fi specificate n lista ce urmeaz acestei clauze. Ferestrele pot
fi utilizator sau sistem.
Pentru a testa dac o fereastr particip sau nu la comanda READ curent, se va
folosi funcia WREAD() cu sintaxa:
WREAD ("nume" ) - retumeaz .T. dac fereastra specificat particip la comanda
READ curent.
O fereastr particip la comanda READ dac:
- un cmp READ este n acest fereastr;
- numele ferestrei este inclus n clauza WITH a comenzii READ. Dac nu se specific
parametrul funciei, acesta se va referi la fereastra din fa (cea retumat de
WONTOP()).
Comanda SHOW GETS conine i ea clauze cu ferestre:
SHOW GETS
.......
[WINDOW nume fereastr]
.......
Dac n comand se include aceast clauz, vor fi reafiate doar obiectele
cmpurilor GET din aceast fereastr fr s afecteze celelalte cmpuri GET, din
celelalte ferestre.
Editarea cmpurilor MEMO se poate face ntr-o fereastr definit utilizator cu o
comand GET cu clauza OPEN:
@ . . . GET . . . [OPEN] WINDOW nume fereastr . . .
Pentru a intra n editarea cmpului memo, se tasteaz combinaia CTRL+HOME,
CTRL+PgUp sau CTRL+PgDn, iar ieirea din editare se face cu CTRL+W, CTRL+End,
CTRL+Q sau ESC. Cu clauza OPEN fereastra va fi deschis automat cnd cursorul va
ajunge n cmpu! memo respectiv.

Editarea cmpurilor memo se poate realiza i prin intermediul comenzii;


MODIFY MEMO
..........
[WINDOW nume1 [IN [WINDOW nume2 | IN SCREEN] ]
Incluznd clauza WiNDOW nume - fereastra de editare va avea aceleai
caracteristici cu cele ale ferestrei specificate n acest clauz. Pentru a specifica o
ferestr printe se folosete caluza IN WINDOW n care nume2 va desemna
fereastra printe. Fereastra printe trebuie s fie vizibil pe ecran.
Cu clauza IN SCREEN fereastra este deschis pe ecran.
Pentru a specifica o fereastr definit utilizator unde vor aprea cmpurile memo
(prin comenzi ca @ ... SAY/GET, APPEND, BROWSE, CHANGE, EDIT sau MODIDY
MEMO) se folosete comanda:
SET WINDOW OF MEMO TO nume
n care "nume" va desemna fereastra folosit !a editarea cmpurilor memo
respective.
Comenzile ,\, TEXT... ENDTEXT pot i ele s afieze textui respectiv ntr-o fereastr
caz n care trebuie inclus n comanda SET TEXTMERGE clauza WINDOWS:
SET TEXTMERGE ... [WINDOW nume] ..,
unde "nume" este numele ferestrei unde se direcioneaz ieirea.
5.10 Meniuri
Meniul reprezint un element de interfa prin care se ofer utilizatorului
posibilitatea selectrii unei anumite opiuni dintr-o mulime, afiat pe ecran,
integral sau parial, urmmd ca funcie de alegerea fcut s fie declanate
anumite aciuni.
Un exemlu este meniul sistem al FoxProW-ului dar este posibil crearea unor astfel
de menuiri pentru lucrri proprii (meniurile vor lansa diverse prograne n execuie),
Un rneniu este format dintr-o "bar a meniului" (orizontai) i mai multe
"submeniuri". Bara meniului conine mai multe opiuni fiecrei dintre opiuni i se
ataeaz de obicei submeniuri. Fiecare submeniu poate i e! s fie format din mai
multe opiuni.
Modul de lucru cu meniurile utilizator este urmtorul:
- se definete meniul n urmtoarele etape:
- se definesc opiunile;
- se definesc aciunile pentru fiecare opiune (adic programele care sunt
lansate de fiecare opiune);
- se activeaz meniul;
- se efectueaz diferitete operaii (afiare, ascundere etc.);
- n final se elimin din mernorie meniul odat cu terminarea lucrului. Comanda
pentru definirea meniului este:
DEFINE MENU nume [BAR [AT LINE expn1] ]
[IN [WINDOW] nume fer | IN SCREEN]
[KEYeticheta] [MARK expc1] [MESSAGE expc2]
[NOMARGIN] [COLOR list | COLOR SCHEME expn2]
Barei meniului i se atribuie un nume urmnd ca n continuare acest element s fie
identificat prin acest nume. Clauza BAR se folosete cu scopul de a prelua
caracteristicile noii bare a meniului de la cea a meniului sistem FoxPro. Urmtoarele
aspecte sunt caracieristice meniuiui sistem:
- dup alegerea meniului bara meniu este dezactivat;
- bara meniu acoper o singur linie a ecranului sau a ferestrei;
- poziia submeniurilor va fi stabilit automat de sistem;
- dac bara are o dimensiune mai mare dect ecranul sau fereastra n care a fost
definit, se va foiosi metoda defilrii pentru accesarea opiuniior bar.
Clauza AT LINE determin afiarea barei meniului pe linia cu numrul expn1 a
ecranului (sau ferestrei). Clauzele IN WINDOW i IN SCREEN specific locul plasrii

barei (n fereastr sau ecran).


Clauza KEY etichet precizeaz o tast care prin actionare duce la activarea
meniului.
Clauza MESSAGE determin afiarea pe ultima linie (n centrul ei) a mesajului expc2
care de obicei lmurete utilitatea meniului. Clauza este influenat de comanda
MESSAGE. Optiunile bar vor fi aezate una dup alta pe bara meniului i vor fi
separate prin spatii. Eliminarea spaiilor separatoare se poate face introducnd
clauza MARGIN n comanda DEFINE MENU,
Clauzele COLOR i COLOR SCHEME controleaz culorile de afiare. Implicit sunt
uiilizate culorile schemei 2 de culori,
Dup definirea unei bare a meniului trebuie definite optiunile bar care vor aparine
fiecrei bare a meniului cu comanda:
DEFINE PAD opt OF nume PROMPT exc1 [AT lin,col]
[BEFORE opt bara | AFTER opt bara]
[KEY etich [ ,expc2]] [MARK expc1] [ SKIP [ FOR expl ]
[MESSAGE] [COLOR list | COLOR SCHEME expn]
Numele opiunii bar va fi dat de "opt" iar bara meniu de care va aparine este cea
din comanda anterioar i egal cu "nume". Textul ce va fi afiat pe bara meniului
va fi cel dat n clauza PROMPT, adic irul de caractere expc1. Stabilirea unei taste
directe de alegere a opiunii bar respective se realizeaz prin plasarea combinaiei
"<" naintea caracterului de selecie desemnat.
Exemplu: ... PROMPT <Salvare'...
va defini un text al unei opiuni bar, 'Salvare' n care tasta direct de alegere va fi
"s", Dac caracterul respectiv apare de mai multe ori n cadrul textului atunci primul
astfel de caracter va fi caracterul ce va fi selectat indiferent de modul de selectare
n clauza PROMPT. Exemplu:
PROMPT'Alb<astru';..
n acest caz tasta direct de alegere va fi A din Albastru i nu a din Albastru.
Clauza AT determin poziia de pe ecran sau fereastr unde va fi afiat opiunea
bar respectiv: linia va fi desemnat prin lin, coloana prin col. Se pot obtin astfel
meniuri verticate, orizontale sau neregulate.
Dac aceast clauz lipsete, afiarea optiunilor bar se va face ncepnd cu linia 0
coloana 0, una dup alta, pe direcie orizontal.
Ordinea de apariie i selectare a opiunilor bar ale unui meniu este dat de
ordinea definirii acestora prin comenzile DEFINE PAD corespunztoare.
Dac se dorete inserarea unei opiuni bar ntre opiunile definite se folosesc
clauzele BEFORE (inserare n fa) sau after (inserare n spate).
Exemplu:
DEFINE MENU test
DEFINE PAD opt1 OF test PROMPT ' Opt<1'
DEFINE PAD opt2 OF test PROMPT ' Opt<2'
DEFINE PAD opt3 OF test PROMPT ' Opt<3'
se poate realiza acelai lucru cu:
DEFINE MENU test
DEFINE PAD opt1 OF test PROMPT ' Opt<1'
DEFINE PAD opt2 OF test PROMPT Opt<3'
DEFINE PAD opt3 OF test PROMPT ' Opt<2' BEFORE opt:
Un astfel de meniu va arta ca mai jos:

Clauza KEY se folosete pentru definirea unei ci directe de alegere a opiunii bar
respective (Combinaie de taste care acionate determin alegerea opiunii

respective.
Clauza MESSAGE determin afiarea textului din irul expc4 ct timp opiunea bar
respectiv este selectat pe ultima linie i de obicei are ca scop lmurirea selectrii
opiunii respective. Comanda este influenat de comanda SET MESSAGE.
Clauza SKIP face ca respectiva bar s nu poat fi accesat. Clauza folosit fr FOR
face ca bara respectiv s fie doar afiat i nu seiectat iar cu FOR s poat fi
accesat n anumite condiii.
De asemenea dezactivarea unei opiuni bar se poate face prin plasarea
caracterului "" naintea textului clauzei PROMPT.
Exemplu: Comenzile urmtoare sunt echivalente (bar inaccesibil):
DEFINE PAD opt1 OF test PROMPT ' Salvare'
DEFINE PAD opt1 OF test PROMPT ' Salvare' SKIP
Clauzele COLOR i COLOR SCHEME specific culorile utilizate pentru tiprirea
opiunilor i implicit ele sunt cele ale schemei 2 de culori. Submeniurite sunt definite
prin comanda DEFINE POPUP:
DEFINE POPUP nume [FROM lin.col] [TO lin2,col2]
[IN [WINDOW] nume fer | IN SCREEN] [FOOTER expc1 ]
[TITLE expc2] [KEYetich] [MARGIN] MARKexpc3]
[MESSAGE expc4] [MOVER] [MULTISELECT]
[PROMPT FIELD expr | PROMPTFILES [LIKE masc] ]
PROMPT STRUCTURE] [RELATIVE] [SCROOL]
[SHADOW] [COLOR list | COLOR SCHEME expn]
Un submeniu reprezint o list de opiuni care pot fi de urmtoarele tipuri:
- opiuni definite de utilizator prin comenzi de tip DEFINE BAR;
- opiuni calculate pe baza continutului unor nregistrri ale unei baze de date
(PROMPT FIELD);
- cmpuri dintr-o baz de date (PROMPT STRUCTURE);
o list de fiiere dintr-un director (PROPT FILES).
Numele submeniului va fi "nume" iar pozitia sa pe ecran sau ntr-o fereastr va fi
dat de clauza FROM n care lin,col indic poziia colului din stnga sus a
submeniului.
Dac aceasz clauz lipsete, submeniul va fi plasat n colul din stnga sus al
ecranului sau al ferestrei active (poziia 0,0). Clauza TO precizeaz colul din stnga
jos al
meniului. Dac aceast clauz lipsete, sistemul va calcula dimensiunile
submeniului (din numrul barelor i considernd grosimea uneia cu 1 adic o linie).
Pentru ca submeniul s fie plasat ntr-o fereastr definit de utilizator, numele
acesteia va fl inclus n clauza IN WINDOW. Altfel meniul va fi introdus ntr-o fereastr
dac exist o fereastr activ n momentul definirii meniului.
Clauza TITLE se folosete pentru afiarea unui text (expc2) n centrul laturii
superioare a chenarului submeniului, iar clauza FOOTER permite afiarea textului
expc1 pe latura inferioar a meniului.
Clauza KEY se folosete cu scopul de a specifica o cale direct pentru activarea
submeniului, cale dat de "etich" care este o etichet de tast,
Clauza MESSAGE afieaz n subsoiui ecranului un mesaj lmuritor (expc4) clauz
ce este influenat de comanda SET MESSAGE,
Clauza MARGIN se include n comand pentru ca opiunile s fie separate de chenar
printr-un spaiu suplimentar la dreapta i la stnga acestora.
Clauza MOVER permite rearanjarea opiunilor n meniu cnd acesta este activat.
Opiunile au n dreapta un caracter ce indic posibilitatea de mutare a acestuia,
Pentru mutare se procedeaz ca mai jos:
- se selecteaz opiunea (cu tastele direcionale) i cu tastele CTRL+ i CTRL+ se
deplaseaz opiunea respectiv n noua poziie.
- cu mouse-ul: se pozitioneaz cursorul pe caracterul suplimentar (de mutare) i
dup accea se apas butonul stng i inndu-l apsat se mut n noua poziie.
Clauza MOVER nu are efect n cazul meniurilor create cu PROMPT.

O alt faciiitate este aceea c dac este prevzut clauza MULTiSELECT se pot
selecta concomitent mai multe opiuni. Fiecare opiune selectat este marcat n
stnga ei.
Comanda SET KEYCOMP poate fi poziionat pe DOS sau pe WiNDOWS, n prima
variant:
- cu tastatura se acioneaz tasta SHIFT mpreun cu ENTER sau SPACE cnd
cursorul este pe o opiune setectat. inerea tastei SHIFT apsat i deplasarea
cursorului deasupra altor opiuni (folosind tastele direcionale) determin selectarea
opiunilor.
- cu mouse-ul: se apas butonul stng al mouse-ului n timp ce cursorul se afl pe o
opiune selectat n timp ce tasta SHIFT este apsat. Deplasarea cursorui deasupra
altor opiuni cu tasta SHIFT apsat determin selectarea acestor opiuni.
Dac KEYCOMP este pe WINDOWS atunci dac se apas tasta SHIFT i se parcurg
mai multe opiuni ele sunt selectate.
Folosind mouse-ul se selecteaz opiunile printr-un click cnd tasta CTRL este
apsat
Clauza MULTISELECT nu poate fi folosit n acelai timp cu clauza PROMPT. Dup
selectarea mai multor opiuni, testarea n program a selectrii se testeaz cu
funcia MRKBAR()
Tipul de submeniu este determinat de clauza PROMPT. Dac aceast clauz lipsete,
opiunile meniului urmeaz s fie definite cu comenzi DEFINE BAR.
n cazul clauzei PROMPT FIELD opiunile submeniului vor fi preluate dintr-o baz de
date deschis n una din zonele de lucru pentru fiecare nregistrare cte o opiune.
La activarea submeniului se va selecta automat zona de lucru respectiv.
Expresia "expr" va determina modul de obinere a unei opiuni din nregistrarea
corespunztoare. Aceast expresie poate conine cmpuri ale bazei de date curente
sau ale unei baze de date deschis n alt zon de lucru, ntre care se poate aplica
operatorul de concatenare. Numrul maxim de opiuni ale unui submeniu creat dinro baz de date este nelimitat n versiunea sub WINDOWS a FoxPro-ului.
Exemplu:
CLEAR
USE agenda
DEFINE POPUP ag FROM 10,10 MARGIN PROMPT FIELD;
SUBSTR(nume,1,4)+' '+SUBSTR(prenume,1,4)
ACTIVATE popup ag
CLEAR POPU
USE
n exemplu este definit un submeniu numit "ag" ale crui opiuni se obtin din
primele patru caratere ale cmpurilor NUME i PRENUME concatenate i ntre care
este intercalat un spaiu.
Pentru ca opiunile submeniului s fie reprezentate de fiierele existente pe disc
ntr-un anumit director, se utilizeaz clauza PROMPT FILES. Acest clauz folosit
fr LIKE determin ca opiunile s fie reprezentate de toate fiierele existente n
directorul curent pe disc. Dac se utilizeaz clauza LIKE atunci se poate preciza
inaintea fiierelor o cale i se pot utiliza caracterele se selecie multipl din DOS (ca
* i ? exemplu: *.prg sau d:a???????.dbf) n cadrul mtii precizate dup clauz).
Se poate folosi i structura unei baze de date ca surs pentru opiunile unui
submeniu fotosind clauza PROMPT STRUCTURE.
Exemplu:
DEFINE POPUP pop FROM 2,10 MARGIN PROMPT;
FILES LIKE A:*.dbf
ACTIVATE POPUP pop
CLEAR POPUPS
O alt variant a acestei comenzi este cea n care opiunile sunt alese din structura
unei baze de date active. Acesta este opiunea PROMPT STRUCTURE:
Exemplu:

DEFINE POPUP pop FROM 2,10 MARG PROMTER STRU


Submeniurile pot fi definite i cu comanda:
Clauza RELATIVE poziia unei opiuni va fi dat de numrul opiunii din comanda
DEFINE BAR , pentru opiunile nedefinite lsndu-se spaii libere n absena acestei
opiuni. Dac este prezent opiunea, atunci nu se las spaii.
Clauza SCROOL are ca obiect afiarea unei bare verticale de defilare pe latura
dreapt a chenarului, cnd nu pot fi afiate toate opiunile submeniului.
Clauza SHADOW nu este disponibil n FoxProW, referindu-se la o umbr ce este
creat n varianta sub DOS.
Comanda de definire a opiunilor unui submeniu este:
DEFINE BAR expn1nume opt_sis OF nume submen
[PROMPT expc1] [BEFORE expn2] [AFTERexpn3]
[KEY etich [ ,expc2 ] ] [ MARK expc3 ]
[MESSAGE expc4] [SKIP [FOR expl ] ]
[COLOR Iist |COLOR SCHEME expn]
Comenzile DEFINE BAR i DEFINE PAD sunt foarte asemntoare. Pentru fiecare
opiune a submeniului se introduce o comand DEFINE BAR. Referirea la o opiune
se face prin expn1 care desemneaz opiunea cu numrul de ordine expn1 a
submeniului "nume submen".
Clauza PROMPT specific un text (expc1) ce este afiat pe poziia opiunii n
submeniu. n irul de caractere expc1 se pot introduce combinaiiie "<" pentru
desemnarea tastei de alegere direct, sau "" pentru a indica opiunile dezactivate,
Cnd irul de caractere expc1 este "-" aceasta indic faptul c se creaz o linie
separatoare n cadrul submeniului, pentru separarea opiunilor.
Clauzele BEFORE i AFTER sunt urmate de expresii numerice indicnd "naintea sau
n urma" crei opiuni va fi aezat opiunea respectiv. Aceste opiuni pot fi folosite
numai n prezena opiunii RELATIVE n comanda de creare a submeniului.
Celelalte clauze au aceeai semnificaie ca i cea din comanda DEFINE PAD.
Exemplu: Se dorete crearea urmtorului submeniu:

DEFINE POPUP culori FROM 6,10 TO 14,21 MARGIN MULTI


DEFINE BAR 1 OF culori PROMPT 'Al.<bastru'
DEFINE BAR 2 OF culori PROMPT <Verde' SKIP
DEFINE BAR 3 OF culori PROMPT <Rou'
DEFINE BAR 4 OF culori PROMPT '-'
DEFINE BAR 5 OF culori PROMPT <Alb'
DEFINE BAR 6 OF culori PROMPT <Galben'
ACTIVATE POPUP culori
Pentru a putea lucra cu aceste meniuri nu este suficient s fie definite meniurile ci
ele trebuie i s fie activate. Activarea se realizeaz CLI comanda:
ACTIVATE MENU nume [NOWAIT] [PAD nume opt]
Comanda afieaz i activeaz bara "nume" care este meniul propriuzis, selectnd
iniial prima opiune bar a meniului (dac nu este folosit clauza PAD caz n care
opiunea precizat aici este selectat). Operatorul poate selecta o alt bar cu
tastele direcionale, tastele directe de selecie sau cu mouse-ul.
Clauza NOWAIT determin continuarea execuiei programului dup afiarea
meniului i activarea sa.

Exemplu:
CLEAR
DEFINE MENU mainmenu
DEFINE PAD fiz OF mainmenu PROMPT '<Fizica'
DEFINE PAD chi OF mainmenu PROMPT '<Chimie'
DEFINE PAD lit OF mainmenu PROMPT '<Literatura'
DEFINE PAD spo OF mainmenu PROMPT <Sport'
ACTiVATE MENU mainmenu PAD sport NOWAIT
@ 10,10 SAY 'domeniu' GET dom DEFA'
READ
DEACTIVATE MENU mainmenu

Analog activrii barei de meniu se face i afiarea i activarea submeniului cu


comanda:
ACTIVATE POPUP nume [AT Iin,col] [BAR expn
[NOWAIT] [REST]
Comanda activeaz submeniul "nume" la coordonatele lin.col n ferestra activ (sau
pe ecran), selectnd iniial opiunea expn. Dac nu se include clauza AT submeniul
va fi afiat la coordonatele prevzute la definirea lui, iar dac nu apare opiunea
BAR
prima opiune a submeniului va fi selectat.
Clauza NOWAIT nu oprete execuia programului, iar clauza REST se folosete
pentru submeniurile definite cu clauza PROMPT FIELD i determin selectarea
iniial a opiunii corespunztoare indicatorului de nregistrri din baza de date. n
lipsa acestei clauze va fi selectat prima opiune.
Exemplu:
DEFINE POPUP popmenu
DEFINE BAR 1 OF popmenu PROMPT '<Fizica'
DEFINE BAR 2 OF popmenu PROMPT <Chimie'
DEFINE BAR 3 OF popmenu PROMPT <Literatura'
DEFINE BAR 4 OF popmenu PROMPT <Sport'
ACTIVATE POPUP popmenu BAR 4 NOWAIT AT 2,5
@ 10,10 SAY 'domeniu' GET dom DEFA ' '
READ
DEACTIVATE MENU mainmenu

Practic prin cele dou exemple se realizeaz acelai lucru.


Afiarea pe ecran (fereastr) a barelor de meniu i submeniu fr activarea lor
se poate realiza cu comanda:
SHOW MENU nume [,nume1...] | ALL
[PAD nume opt] [SAVE]
- comand prin care se afieaz barele de meniu enumerate (nume, nume1 ...), sau
al tuturor barelor meniu definite dac se folosete clauza ALL.
Pentru afiarea unei opiuni bar ca fiind selectat, acesta se specific prin clauza
PAD, iar pentru reinerea imaginii barei de meniu fr activarea ei vom folosi clauza
SAVE. Aceast imagine reinut n memorie poate fi tears cu comanda CLEAR.
Pentru afiarea submeniurilor se va folosi comanda SHOW POPUP.
SHOW POPUP nume [,nume1 ...| ALL
[PAD nume opt] [SAVE]
CU comanda HIDE MENU / POPUP se realizeaz nlturarea de pe ecran a barelor de
meniu (i submeniu) fr ca acestea s fie nlturate din memorie.
HIDE MENU nume [,nume1...] |ALL
[PAD nume opt] [SAVE]
HIDE POPUP nume [,nume1...] | ALL
[PAD nume opt] [SAVE]
Legtura dintre barele de meniu i submeniuri este de o importan deosebit
pentru realizarea unor meniuri complexe. O modalitate de legare a unei bare de
meniu cu o bar de submeniu sau o opiune este dat de comanda ON PAD;
ON PAD nume opt OF nume [ACTIVATE MENU nume
[ACTIVATE POPUP nume sub]
Comanda va avea efectul c n momentul alegerii opiunii "nume opt" din bara de
meniu se va activa submeniul "nume sub" sau bara de meniu "nume".
Activarea submeniului sau a barei de meniu se face la selectarea opiunii bar
respective, fr a fi nevoie de acionarea tastei ENTER sau SPACE.
Pentru activarea unui submeniu se folosete clauza ACTIVATE POPUP urmat de
numele submeniului, iar pentru activarea unei alte bare de meniu se folosete
clauza ACTIVATE MENU, dup care se include numele barei respective. Dac nu se
folosete nici una din cele dou clauze, alegerea opiunii nu va mai determina
activarea nici unuia dintre aceste elemente, comanda folosindu-se la eliberarea
opiunii bar respective.
Exemplu:
DEFINE MENU mainmenu
DEFINE PAD fiz OF mainmenu PROMPT '<Fizica'
DEFINE PAD chi OF mainmenu PROMPT <Chimie'
DEFINE PAD lit OF mainmenu PROMPT <Literatura'
DEFINE PAD spo OF mainmenu PROMPT <Sport'
DEFINE POPUP popmenu1
DEFINE BAR 1 OF popmenul PROMPT 'Fizica <Atomica'

DEFINE BAR 2 OF popmenul PROMPT 'Fizica <Moleculara'


DEFINE BAR 3 OF popmenul PROMPT '<Caldura'
DEFINE BAR 4 OF popmenu1 PROMPT '<Electricitate'
DEFINE POPUP popmenu2
DEFINE BAR 1 OF popmenu2 PROMPT 'Chimie <Oraganica'
DEFINE BAR 2 OF popmenu2 PROMPT 'Chimie <Anorganica'
DEFINE BAR 3 OF popmenu2 PROMPT 'Chimie <Fizica'
ON PAD fiz OF mainmenu ACTIVATE POPUP popmenu1
ON PAD chi OF mainmenu ACTIVATE POPUP popmenu2
ACTIVATE MENU mainmenu

Corespunztoare comenzii ON PAD pentru opiuni bar, avem o comand pentru


opiunile unui submeniu cu sintaxa:
ON BAR expn OF nume sub [ACTIVATE POPUP nume
|ACTIVATE MENU nume2]
La selectarea opiunii expn a submeniului "nume sub" se activeaz submeniul
"nume" sau meniul "nume2".
Dac nici una din opiuni nu se include n comand, opiunea expn a submeniului
"nume sub" va fi eliberat (nu va putea determina activarea unui element la
alegerea sa).
Pot fi create n acest mod mai multe nivele de submeniuri, sau mai multe
submeniuri care coordoneaz bare de meniuri.
Grupul de comenzi ON SELECTION se folosete pentru ca la alegerea opiunii bar
sau a unei opiuni a unui submeniu s se execute operaii mai complexe.
Aceste comenzi au forma:
ON SELECTION MENU
ON SELECTION PAD
ON SELECTSON POPUP
ON SELECTION BAR
Aceste comenzi determin executarea unei singure comenzi la alegerea opiuni
bar. Aceast comand ns poate fi un apel de procedur (o comand DO executarea unui program) sau o instruciune care s contin apelul unei funcii
definite utilizator n cadrul creia se pot executa o serie de operaii, n funcie de
opiunea aleas. Sintaxa comenzii este:
ON SELECTION MENU nume | ALL [instruciune]
- instruciune - va fi executat la alegerea oricrei opiuni bar a barei de meniu
nume sau oricrei bare definite cnd se folosete clauza ALL. Comanda trebuie
plasat ntre DEFINE MENU i ACTIVATE MENU. Dac instruciunea lipsete din
comand, opiunile bar respective sunt eliberate, adic nu se va executa nici o
instruciune la alegerea lor.
Comenzile:
ON SELECTION POPUP nume|ALL [instruciune]
ON SELECTION BAR expn OF nume|ALL
[instruciune]
realizeaz executarea instruciunilor la alegerea opiunii expn a submeniului nume

sau a barului respectiv, sau eliberarea acestei opiuni n cazul cnd aceasta
(instructiunea) nu apare n comand. Comanda trebuie plasat ntre DEFINE POPUP
i ACTIVATE POPUP.
Poziia i dimensiunile unui submeniu pot fi modificate prin:
MOVE POPUP nume TO lin,col | BY expn1 ,expn2
Acest comand mut submeniul n poziia lin,col sau peste expn1 linii i expn2
coloane relativ la poziia curent. Deplasarea se face la stnga i n jos dac valorile
sunt pozitive i la dreapta i n sus dac ele sunt negative.
Cu comanda:
SIZE POPUP nume TO expn1,expn2 | BY expn3,expn4
se modific poziia submeniului "nume" la poziia dat de colul din dreapta jos
(expn1,expn2 pentru clauza TO) i va fi schimbat cu expn3 linii i expn4 coloane
cnd este folosit clauza BY. Pentru valori pozitive meniul va fi mrit iar pentru
valori negative micorat.
Comenzile:
PUSH MENU nume_meniu
POP MENU nume_meniu [TO MASTER]
PUSH POPUP nume_meniu
POP POPUP nume_meniu
realizeaz salvarea unei versiuni a barei de meniu respectiv a submeniului, i
restaurarea acesteia (POP).
Clauza TO MASTER folosit la comanda POP MENU determin extragerea din stiv a
primei bare de meniu depus, dup care stiva se golete.
La un moment dat doar un meniu poate fi activat. Dezactivarea acestuia se
realizeaz cu comenzile:
DEACTIVATE MENU nume [,nume2...] | ALL
DEACTIVATE POPUP nume [,nume2...] | ALL
Aceste comenzi nu nltur meniul din memorie, deci nu este necesar redefinirea
sa pentru activare.
Eliberarea din memorie se realizeaz cu comenzile:
RELEASE MENUS [list meniuri [EXTENDED] ]
RELEASE POPUPS [list submeniuri [EXTENDED] ]
RELEASE PAD nume_opt | ALL OF nume submenu
RELEASE BAR expn | ALL OF nume submenu
Comanda RELEASE elimin barele respective (meniu, submeniu, sau opiunile bar
din meniu sau submeniu). Clauza EXTENDED determin nlturarea din memorie i
de pe ecran i a elementelor subordonate. Clauza ALL OF determin nlturarea
tuturor elementelor submeniului respectiv.
Toate barele de meniu vor fi eleminate cu comenzi CLEAR cu formele urmtoare:
CLEAR MENUS |POPUPS | ALL
n mod implicit meniurile sunt trasate cu o singur linie, iar dac se dorete
modificarea acestei trasri se folosete comanda SET BORDER care a fost descris
anterior.
n timpul rulrii unui program meniul sistem FoxPro poate fi accesat. Controlul
accesului se realizeaz cu comanda:
SET SYSMENU ON | OFF | AUTOMATIC
TO [list sub | list opt] TO [DEFAULT]
SAVE | NOSAVE
Pentru ca meniul sistem s fie accesibil, la executarea unor comenzi de citire de la
tastatur se include n comand clauza ON (implicit), cnd activarea meniului
sistem se face acionnd tasta F10 sau prin dublu click pe butonul drept al mouseuli. Clauza OFF nu permite accesul la meniu.
Clauza AUTOMATIC determin afiarea meniului pe ecran. Clauza TO se folosete
pentru eliminarea unor submeniuri sistem (vor putea fi accesate doar meniurile i
submeniurite prezente n "list sub" i "list opt" ). Elementele din list sunt
separate prin virgul.

Clauza DEFAULT determin revenirea la configuraia standard a meniului sistem.


O opiune bar din meniu poate fi marcat. Acest marcare se realizeaz cu
urmtoarele comenzi:
SET MARK OF MENU nume TO expc | expl
SET MARK OF PAD nume opt OFF nume TO expc | expl
SET MARK OF POPUP nume sub TO expc | expl
SET MARK OF BAR expn OF nume sub TO expc | expl
Aceste comenzi determin folosirea caracterului expc pentru marcarea unei opiuni,
sau a tuturor opiunilor dac se folosete forma cu expresie logic.
Se poate testa prin program starea marcat sau nu a unei opiuni folosind funciile:
MRKPAD (expc1,expc2)
care retumeaz dac opiunea bar specificat prin "expc2" a barei meniu "expc1"
este marcat.
MRKBAR (expc,expn)
returneaz valoarea .T. dac opiunea bar "expn" a submeniului "expc" este
marcat.
Exemplu:
SET TATK OFF
CLEAR
DEFINE MENU actiuni
DEFINE PAD articol OF actiuni PROMPT <Articol'
DEFINE PAD calitate OF actiuni PROMPT <Calitate'
DEFINE PAD marcate OF actiuni PROMPT '<Marcate'
DEFINE PAD demarcate OF actiuni PROMPT '<Demarcate'
DEFINE PAD inversate OF actiuni PROMPT '<lnversate'
ON PAD articol OF actiuni ACTIVATE POFUP artic
ON SELECTION PAD marcare OF actiuni DO mar1
ON SELECTION PAD demarcare OF actiuni DO marc2
ON SELECTION PAD inversare OF actiuni DO marc3
SET MARK OF MENU actiuni TO '!'
DEFINE POPUP artic MARGIN
DEFINE BAR 1 OF artic PROMPT <Masina '
DEFINE BAR 2 OF artic PROMPT '<Televizor'
DEFINE BAR 3 OF artic PROMPT ' <Apartament'
DEFINE BAR 4 OF artic PROMPT '<Teren '
DEFINE BAR 5 OF artic PROMPT '<Marcare'
DEFINE BAR 6 OF artic PROMPT '<Demarcare'
DEFINE BAR 7 OF artic PROMPT <lnversare'
ON SELECTION BAR 5 OF artic DO marc4
ON SELECTION BAR 6 OF artic DO marc5
ON SELECTION BAR 7 OF artic DO marc6
SET MARK OF POPUP artic TO '*'
ACTIVATE MENU actiuni
CLEAR POPUPS
CLEAR MENUS
PROCEDURE marc1
SET MARK OF MENU actiuni TO .T.
RETURN
PROCEDURE marc2
SET MARK OF MENU actiuni TO .F.
RETURN
PROCEDURE marc3
SET MARK OF MENU actiuni TO not;
MRKPAD('actiuni','inversare')
RETURN
PROCEDURE marc4

SET MARK OF POPUP artic TO .T.


RETURN
PROCEDURE marc5
SET MARK OF POPUP artic TO .F.
RETURN
PROCEDURE marc6
SET MA.RK OF POPUP artic TO NOT MRKBAR('artic',7)
RETURN
n acest program se creaz un meniu cu cinci opiuni i un submeniu asociat primei
opiuni meniu cu apte opiuni. Alegerea barei "Marcare" determin selectarea
tuturor opiunilor bar, iar alegerea optiunii "Demarcare" duce la demarcarea
acestora. La alegerea opiunii "Inversare" se va inversa starea opiunilor.
Posibilitatea de accesare a barelor meniu, opiunilor bar, submeniurile i opiunile
poate fi controlat cu comenzile SET SKIP:
SET SKIP OF MENU nume expl
SET SKIP OF PAD nume_opt OF nume expl
SET SKIP OF POPUP nume_sub expl
SET SKIP OF BAR expn | nume opt OF nume_sub expl
Modul de funcionare al comenzilor este asemntor (difer doar elementul la care
se refer: meniu, opiune bar, submeniu, opiune submeniu respectiv) i fac
posibil accesarea acestora. n combinaie cu acestea se pot folosi functiile
referitoare la accesare:
SKPPAD (expc1,expc2)
SKPBAR (expc1,expc2)
Aceste funcii vor retuma valoarea .T. cnd elementul la care se refer nu poate fi
accesat i .F. n caz contrar. Funcia SKPBAR() testeaz opiunea dat de expn a
submenului "expc".
Exemplu:
SET TALK OFF
CLEAR
a=1
DEFINE MENU aciuni
DEFINE PAD articol OF actiuni PROMPT '<Articol'
DEFINE PAD calitate OF actiuni PROMPT <Calitate'
DEFINE PAD activare OF actiuni PROMPT 'Ac<tivare'
DEFINE PAD dezactivare OF actiuni PROMPT <Dezactivare'
ON PAD articol OF actiuni ACTIVATE POPUP artic
ON SELECTION PAD marcare OF actiuni DO marc1
ON SELECTION PAD demarcare OF actiuni DO marc2
DEFINE POPUP artic MARGIN DEFINE BAR 1 OF artic PROMPT <Masina '
DEFINE BAR 2 OF artic PROMPT '<Televizor'
DEFINE BAR 3 OF artic PROMPT '<Apartament'
DEFINE BAR 4 OF artic PROMPT '<Teren '
DEFINE BAR 5 OF artic PROMPT 'A<ctivare'
DEFINE BAR 6 OF artic PROMPT <Dezactivare'
ON SELECTION BAR 5 OF artic DO marc3
ON SELECTION BAR 6 OF artic DO marc4
ACTIVATE MENU actiuni
DEACTIVATE MENU actiuni
PROCEDURE marc1
@ 10,10 SAY' ' GET a DEFAULT 1 PICT '9' RANGE 1,2
READ
CLEAR
IF a=1
SET SKIP OF PAD articol OF actiuni .F.
ELSE

SET SKIP OF PAD calitate OF actiuni .F.


ENDIF
RETURN
PROCEDURE marc2
@ 10,10 SAY ' ' GET a DEFAULT 1 PICT '9' RANGE 1,2
READ
CLEAR
IF a=1
SET SKIP OF PAD articol OF actiuni .T.
ELSE SET SKIP OF PAD calitate OF actiuni -T.
ENDIF
RETURN
PROCEDURE marc3
@ 10,10 SAY 'lntroduceti nr. optiunii de dezactivat';
GET a DEFAULT 1 PICT '9' RANGE 1,4
READ
CLEAR
SET SKIP OF BAR a OF artic.F.
RETURN
PROCEDURE marc4
@ 10,10 SAY 'lntroduceti nr. optiunii de dezactivat ';
GET a DEFAULT 1 PICT '9' RANGE 1,4
READ
CLEAR
SET SKIP OF BAR a OF artic.T.
RETURN
FUNCII REFERITORE LA MENIURI
Ultima optiune bar ales din bara de meniu activ este dat de funcia:
PAD()
Numele opiunii bar este returnat cu majuscule de funcie. Dac nu exista bar de
meniu activ se returneaz irul nul.
BAR () - returneaz un numr reprezentnd numrul ultimei opiuni selectate
MENU () - retumeaz un ir de caraciere coninnd numele barei meniu active
(majuscule)
POPUP () - returnez un ir de caractere reprezentnd numele submeniului activ
PROMPT () - returneaz textul asociat ultimii opiunii bar selectate
PRMPAD (expc1,expc2) - returneaz textul asociat ultimei opiuni bar a
submeniului
PRMBAR (expc1,expn) - returneaz textul asociat ultimei opiuni a submeniului
CNTPAD (expc) - retumeaz numrul de opiuni bar asociate unei bare meniu
(expc)
CNTBAR (expc) returneaz numrul de opiuni a!e submeniutui (expc)
GETPAD (expc,expn) - returneaz numele opiunii bar de pe poziia "expn" a barei
"expc"
GETBAR (expc,expn) - returneaz numeLe opiunii de pe poziia expn din submeniul
"expc"
Funciile PRMBAR () i PRMPAD () sunt folosite pentru a trece de la unele opiuni
(bar i respectiv simple) la textul asociat prin construcii de tipul urmtor:
PRMPAD (MENU (), GETPAD (MENU(),i))
PRMBAR (POPUP(), GETBAR (POPUP(),i))
o 4 septembrie 2008
o 0 comentarii
o nici o evaluare
Capitolul 6-1.

6. GENERATOARE
n FoxProW realizarea gestiunii datelor poate fi fcut n mai multe feluri:
- prin intermediu! meniului sistem cnd se pot executa operaii elementare. Metoda
nu este eficient n cazurile cnd este necesar execuia repetat a unor operaii i
a operaiilor complexe;
- prin programe create de utilizator - folosind comenzile i funciile limbajului
FoxProW, cnd un ntreg grup de operaii se poate face repetat, se automatizeaz
practic, operaiile pot fi fcute printr-o singur instruciune (trimiterea n execuie a
programului);
- folosind generatoarele ncorporate n mediul FoxPro pe baza unor opiuni
specificate de utilizator.
Principiul de funcionare al generatoarelor este: utilizatorul specific prin
intermediul interfeei sistemului opiunile sale i pe baza lor vor fi generate
programe de ctre FoxProW care vor rezolva problema pus.
Aceste programe (generate prin generatoare) pot fi nglobate n programele proprii
deci pot fi utilizate de ctre utilizatori i modificate. Avantajul folosirii generatoarelor
este dat de posibilitatea obinerii unor programe performante cunoscnd doar
comenzile de baz i fr efort deosebit, cunoscnd doar modul de utilizare al
genearatoarelor.
6.1 Generatorul de ecrane
Prin intermediul generatorului de ecrane se realizeaz programe care au drept scop
conversaia dintre program i utilizator cu privire la introducerea unor date i de
vizualizare a coninutului unor baze de date. Programele de introducere a datelor n
bazele de date sunt n genera! realizate cu acest generator.
Cu ajutoru! generatorului de ecrane pot fi realizate programe ce afieaz pe ecran,
ntr-o anumit configuraie, ferestre i obiecte specifice, text, linii, chenare, obiecte
de control etc asupra crora se acioneaz cu mouse-ul sau tastatura. Obiectele i
caracteristicile lor poart numefe generic de "ecran".
6.1.1 Pornirea generatorului de ecrane
Etapele realizrii unui program cu ajutorul generatorului de ecrane sunt
urmtoarele:
- se deschide fereastra de configurare a ecranului, n interiorul cruia se definesc
obiectele ce alctuiesc ecranul i se stabilesc caracteristicile globale ale ecranului;
- pe baza celor specificate se genereaz programul.
Pentru pornirea generatorului de ecrane se va tasta comanda (n fereastra de
comand.
CREATE SCREEN nume
unde nume este numele ecranului respecttv.
n urma tastrii acestei comenzi, se va deschide fereastra de configurare a
ecranului n care se definesc obiectele:
Poriunea de editare a ecranului (centrul su) este destinat introducerii obiectelor
ecranului;
- pentru a informa utilizatorul c n zona de editare trebuie scris un nume, n
apropierea acestuia va aprea textul "nume" acesta fiind un obiect al ecranului,
- la marginea ferestrei de configurare se pot vedea dou rigle (folosite pentru
determinarea coordonatelor) care implicit sunt gradate n inci, dar se poate modifica
gradarea n centimetri. Pentru aceasta se utilizeaz opiunea Ruller/Grid din
submeniul Screen.
Pentru ca s fie afiate permanent coordonatele cursorului (mouse-ului) se alege
opiunea Show Position din submeniul Screen.
n scopul definirii unui obiect cmp n zona de editare se realizeaz urmtoarele
operaii:
- din coloana de butoane aflate n partea stng a ferestrei de configurare se

acioneaz declanatorul al treilea (de sus n jos), se mut cursorul mouse-ului la


trei uniti de marginea superioar, n pozitie central i se apas butonul stng,
deschiznd astfel pe ecran fereastra de dialog Field;
- numele variabilei n care va fi pstrat continutul zonei de editare va fi scris n
csua text input: nume;
- n timpul execuiei programului, dup ce a fost completat un nume n zona de
editare, pe ecran va fi afiat un mesaj prin intermediul instruciunii SAY. Dac se
dorete acest lucru aceasta va fi introdus n clauza Valid (instructiunile
corespunztoare acestei clauze vor fi executate nainte de ieirea din zona de
editare a zonei de editare; de aceea se acioneaz declanatorul Valid, iar n
fereastra ce se deschide pe ecran se scriu instruciunile:
@ 14,35 SAY nume
@ 16,30 SAY ' Acest program este n functiune'
- se nchid apoi ferestrele de dialog deschise, acionnd succesiv declanatoarele
OK.
Pentru modificarea dimensiunilor unui obiect, se deplaseaz cursorul pe cmpul
respectiv, se actioneaz butonui stng al mouse-ului realiznd n acest fel
selectarea cmpului (obiectului) respectiv. Apoi, meninnd butonu! apsat, se
deplaseaz mouse-ul astfel nct dimensiunile s fie modificate la cele dorite.
Al doilea obiect, textul "nume", se definete astfel:
- se acioneaz al doilea declanator (din stnga), se mut cursorul la dou uniti
de marginea superioar i se apas butonul stng al mouse-ului;
- se introduce textul "nume" i se apas butonul stng (mouse).
Specificrile fcute n fereastra de configurare, pe baza creia se va genera
programul, trebuie salvate ntr-un fiier. Pentru aceasta se folosete opiunea Save
din submeniul File. Generarea programului se face utiliznd opiunea Generate ...
din submeniul Program. Dup ce toate aceste operaii au fost executate, fereastra
de configurare va fi nchis, tastnd ESC. Programul obinut poate fi executat
tastnd cornanda:
DO nume.spr
unde nume este numele dat programuiui (cel precizat n comanda CREATE SCREEN)
iar spr este extensia (obligatorie!),
n continuare vom prezenta modul de introducere a datelor ntr-o baz de date cu
ajutorul unui program generat cu generatorul de ecrane i vom folosi baza de date
creat n continuare.
Pentru a crea baza de date NOM.DBF vom folosi comanda:
CREATE nom
Structura creat va fi:
Cmp Tip Lungime Obs.
Den C 15 Denumire materiai
Data_ui D Data ultimei intrri
Data D Data introducerii
Specif M Specificaii tehnice (STAS, Nl etc)
Cod C 8 Codul materialului
Grup C 14 Grupa de materiale
Prov L Provenien (Intern / Import)
Pret N 12.3 Preui materialului
Stoc L Stoc (are stoc sau nu)
Deoarece specificaiile pot varia foarte mult s-a propus pentru acest cmp ca el s
fie un cmp memo.
Pentru introducerea datelor se poate folosi sistemul (BROWSE sau APPEND) dar
aceasta necesit cunotine FoxPro. Pentru ca introducerea s poat fi fcut de
nespecialiti este necesar realizarea unui program (care are i avantajul
posibilitii verificrii datetor).
Programul va fi un ecran cu structura din figur:

Se va introduce comanda de creare a ecranului:


CREATE SCREEN introd
Astfe! va fi creat fereastra de configurare a ecranu!ui iar n bara meniu!ui sistem
vor fi incluse opiunile Screen i Object, La un moment dat pot fi deschise mai multe
ferestre de configurare, numrul acestora fiind limitat de memoria de lucru
disponibil i de numrul maxim de fiiere deschise concomitent (config.sys),
Obiectele create pot fi copiate i mutate dintr-o fereastr n alta folosind optiunile
Cut, Copy i Paste din submeniul Edit.
De obicei, nainte de deschiderea ferestrei de configurare a ecranului, trebuie
deschise bazele de date cu care se lucreaz (deci vom deschide iniial NOM.DBF), se
terge ecranul i se initializeaz variabilete utiliznd instruciunile "codului de
iniializare".
n exemplu! nostru programu! generat va contine o instructiune READ cu care vor fi
activate obiectele ecranului. nainte de definirea obiectelor se stabilesc
caracteristicile globale ale ecranului: codul de iniializare i finalizare, clauzele
instruciunii READ i diverse atribute ale ferestrei n care vor fi afiate obiectele.
Atributele ferestrei se refer la poziia, dimensiunea i stilul acesteia, la fondul i
font-ul implicit al ferestrei.
Specificarea caracteristlciior giobale ale ecranului se face prin intermediul ferestrei
de dialog Screen Layout, aceasta fiind deschis pe ecran prin alegerea opiunii
Layout din submeniul Screen.

Dimensiunile i poziia ferestrei se stabiiesc cu ajutorul cmpului de editare Size,


respectiv Position sau cu ajutorul comutatorului Center, aflate n aceast fereastr
de dialog.
Pentru exemplul nostru, folosind butoanele de incrementare-decrementare din
seciunea Size, se stabilesc dimensiuniie ferestrei (msurate n pixeli): Width
(lime) 570, Height (nltime):380. De asemenea se activeaz comutatorul Center
din seciunea Position.

n cmpul de editare Title poate fi scris un ir de caractere care va aprea n centrul


laturii superioare a ferestrei, ca i n cmpul de editare Name, acesta fiind folosit n
programul generat.
Tipul i proprietile ferestrei n care vor fi afiate obiectele se stabilesc prin
intermediul dedanatorului Window Style aflat n fereastra de dialog Screen Layout.
Prin acionarea acestuia, pe ecran va fi deschis fereastra de dialog cu acelai
nume.
Referitor la tipul ferestrei, n lista Type sunt disponibile:
- Desktop - obiectele apar n ferestra FoxProW sistem (pe ecranui sistemului);
- User - obiectele apar ntr-o fereastr utilizator care poate fi:
user - fereastr utilizator
system - fereastr sistem
dialog - fereastr de dialog
alert - fereastr de atenionare (erori)
Atributeie ferestrei pot fi:
- Close - fereastra poate fi nchis
- Moveable - poate fi mutat
- Halt Ht/Title Bar - definete o fereastr a crei latur superioar are nlimea mai
mic dect cea obinuit (jumtate)
- Minimize - ferestra poate fi minimizat i maximizat
Chenarul poate fi de urmtaarele tipuri:
-None fr chenar;
- Single cu o linie simpl;
- Double - cu linie dubl
- Panel - cu chenar plin
- System - cu chenar asemntor ferestrei de comenzi de exemplu.
nchiderea ferestrei Window Style se face actionnd declanatorul OK. |
Specificarea eventualelor pachete de instructiuni (codul de iniializare i cel de
finalizare, clauzele instruciunii READ) care vor fi asociate ecranului, se face prin
intermediui ferestrei de dialog Screen Code. Aceasta va fi deschis pe ecran prin
acionarea declanatorului Code din ferestra Screen Layout.

Utiliznd declanatorul Screen Setup Code se pot scrie n fereastra de editare


deschise prin acionarea acestuia, codul de initializare, iar cu declanatorul Cleanup
and Procedures se poate scrie codul de finalizare. n codul de finalizare pot fi scrise
proceduri, n care caz se folosete comanda:
PROCEDURE nume_procedur
Pentru specificarea codurilor de initializare i a celui de finalizare ale exemplului
nostru, se realizeaz urmtoarele operaii;
- se acioneaz declanatorul Cleanup and Procedures i apoi Screen Set Code.
- se nchid cele dou ferestre de dialog deschise, acionnd declanatarele OK,
activndu-se astfel fereastra Setup, n care se scriu comenzile urmtoare:
close all

set date to dmy


use nom && se deschide baza de date
go top
if reccount()>0 && dac exist nregistrri
scatter memvar memo && se mut valoarea din nreg
swow gets && n variabilele de memorie
else
m.cod = 0 && n caz contrar se dau valori
m.pret = 5000 && acestor variabile de memorie
m.prov = .F. && variabilele de memorie au
m.stoc = TABLA && caracaterul m n faa denumirii
endif
buton=1 && n continuare sunt initializate
comut=0 && alte variabile de memorie
decl=1 && necesare: pentru butonul radio
list=1 && declanatoare, list etc
poz=1
- acionnd combinaia de taste CTRL+F1 se activeaz fereastra Cleanup, n care se
scriu instructiunile:
CLOSE ALL
CLEAR
se revine n fereastra de configurare folosind combinaia de taste CTRL+F1.
Exist cazuri n care obiectele ecranului nu trebuie s fie activate dect n anumite
condiii (nu este permis accesul la obiecte) de exemplu n cazul n care citirea unui
cmp "nume_copil", cnd cmpul "copii" e .F. n astfel de cazuri n fereastra de
editare deschis prin acionarea declanatorului On Screen Entry va fi scris un
pachet de instructiuni sau o expresie logic. Dup generare obiectele ecranului vor
fi activate numai dac valoarea returnat de coninutu! ferestrei de editare este .T.
Codu! scris n aceast fereastr va corespunde clauzei WHEN a instructiunii READ
cu care sunt activate obiecte!e n programul generat.
n mod asemntor, terminarea citirii obiectelor ecranului depinde de valoarea
returnat de codul corespunztor clauzei VALID a instructiunii READ. Coninutul
clauzei poate fi specificat utiliznd declanatoruf On Screen Exit din fereastra de
dialoag Screen Code.
n acelai mod poate fi specificat un set de instruciuni care va fi executat nainte de
citirea obiectelor (utiliznd declanatorul On Window Activate corespunztor
clauzei ACTIVATE) la activarea altei ferestre (folosind declanatorui On Window
Deactivate - clauza DEACTIVATE) sau la execuia unei instructiuni SHOW GETS - (On
Refresh) corespunznd clauzei SHOW GETS. Aceste instruciuni sunt adesea folosite
pentru actualizarea coninutului ecranului sau pentru a activa i dezactiva obiectele
acestuia.
Pentru a redeschide fereastra de dialog Screen Layout se alege opiunea Layout din
submeniul Screen. Aspectul ecranului poate fi mbuntit prin alegerea unei culori
potrivite pentru fondul respectiv. n acest scop se acioneaz declanatorul Color din
fereastra de dialog Screen Layout i pe ecran se va deschide o fereastra (Screen
Color) cnd se poate alege o culoare implicit (prin csua Automatic) sau o alt
culoare. Se poate alege i un fiier (de tip bitmap.bmp) pentru fondul ecranului.
Alegerea acestuia se face prin intermediul declanatorului Wallpaper. nchiderea
ferestrei se face acionnd declanatorul OK.
Un font implicit pentru textul cmpurilor de editare i al zonelor de editare poate fi
specificat cu ajutorul declanatorului Font aflat n fereastra de dialog Screen Layout.
Pentru fiecare din aceste obiecte se poate indica un alt font la definire.
n FoxProW se poate alege un fiier (de tip icoan .ico) al crui coninut va substitui
ecranul cnd acesta este minimizat. Alegerea fiierului se face prin intermediul
declanatorului lcon File. Revenirea n fereastra de dialog Screen Layout se face
acionnd butonul OK.

Pe parcursul realizrii unui ecran, utilizatorul poate modifica starea mediului PoxPro
(selectnd alte zone de lucru, deschiznd alte baze de date etc). Prin intermediul
declanatorului Environment va fi deschis fereastra de dialog cu acelai nume, n
care poate fi salvat starea mediului FoxProW (declanatorul Save), poate fi
refcut o stare creat anterior (Restore) sau pot fi terse ultimele informaii salvate
(Clear).
Pentru exemplul nostru se va salva mediul FoxPro (declanatorul Save din fereastra
de dialog Environment) dup care se nchide fereastra Screen Layout acionnd
declanatorul OK.
6.1.2 Tipuri de obiecte
Se pot defini ntr-un ecran urmtoarele tipuri de obiecte:
- obiecte text;
- cmpuri de editare;
- regiuni de editare;
-declanatore;
- butoane radio;
- comutatoare;
- liste ascunse;
-liste;
- cmpuri de editare cu butoane de incrementare-decrementare;
- linii;
- chenare;
- chenare rotunjite la margini.
Aceste tipuri de obiecte au o caracteristic comun. La definire, acestora li se
asociaz o variabil de memorie sau un cmp al unei baze de date. n timpul
execuiei, actionnd asupra unui obiect, variabila asociat acestuia ia o anumit
valoare (de exemplu dac ntr-o list ascuns se alege o anumit valoare, acesteia i
este atribuit valoarea 2 (a doua din list). n funcie de valoarea pe care o are
variabila, pot fi executate anumite operaii.
De exemplu instructiunile ce testeaz valoarea variabilei asociate unui obiect i, n
funcie de aceasta, execut anumite operaii i pot fi incluse n clauza VALID a
obiectului respectiv (instruciunile clauzei vor fi executate naintea prsirii
obiectului).
Cornunicarea dinire utilizator i FoxPro se realizeaz astfel:
- utilizatorul acioneaz (taste sau mouse) asupra unui obiect, modificnd valoarea
variabilei asociate acestuia;
- funcie de valoarea variabilei, se execut anumite operaii sau se transmit
informaii utilizatomlui (prin afiarea unui text, dezactivarea unor obiecte, afiarea
unor imagini etc.).
Comunicarea nceteaz odat cu ncheierea execuiei (de obicei acionnd
declanatorul OK).
ntre obiecte exist i o deosebire esenial: n cmpurile de editare datele se
introduc tastnd caracter cu caracter, iar la alte cmpuri (declanatore, butoane
radio, comutatoare, liste, liste ascunse) se acioneaz modificnd valoarea variabilei
asociate (selectnd valori).
Zonele de editare cu butoane de incrementare-decrementare pot fi incluse n
ambele categorii prezentate mai sus, utilizatorul avnd posibilitatea de a introduce
direct n zona de editare valoarea dorit, sau poate modifica prin incrementaredecrementare, cu ajutorul butoanelor asociate.
Regiunile de editare se aseamn foarte mult cu zonele de editare (diferind doar
cantitatea de date introdus).
n versiunea sub Windows, pe partea stng a ferestrei de configurare se gsete o
coloan de butoane cu ajutorul crora se definesc obiectete ecranului. Cu excepia
primeia (Selection pointer) fiecare buton corespunde unui anumit tip de obiecte.

Definirea unui obiect se realizeaz n felul urmtor:


- se selecteaz butonul corespunztor;
- se mut cursorul n fereastra de configurare n poziia dorit pentru obiectul
respectiv i se apas butonul stng al mouse-ului;
- se stabilesc proprietile obiectului (n ferestra de dialog deschis pe ecran, care
se incheie prin nchiderea ferestrei).
Pentru a defini mai multe obiecte succesiv, se procedeaz astfel:
- se realizeaz un dublu clic pe butonul asociat tipuiui de obiect care va fi definit;
- se pot defini mai multe obiecte de acelai tip, n modul prezentat anterior, fr a
mai actiona butonul asociat aflat n stnga ferestrei de configurare;
- pentru a ncheia operaia de definire a grupului de obiecte de acelai tip se
realizeaz un clic pe primul buton (Selection pointer).
Fiecrui obiect i este asociat o ferestr de dialog ce poate fi deschis printr-un clic
dublu pe obiectul respectiv.
n exemplul nostru, pentru construirea ecranului se alege initial opiunea Show
Position din submeniul Screen pentru ca n bara de stare din partea inferioar a
ecranului s fie ataate coordonatele curente ale cursorului mouse-ului. De
asemenea n fereastra Ruler/Grid, deschis prin alegerea opiunii cu acelai nume
din submeniul Screen, se selecteaz butonul radio Centimeters.
ncepem crearea obiectelor care alctuiesc ecranul prin definirea unor obiecte de tip
text. Pentru a crea un astfel de obiect, n cazul nostru "Den", se realizeaz
urmtoarele:
- se acioneaz al doilea buton din latura stng a ferestrei de configurare (de sus);
- se mut cursorul mouse-ului n poziia n care se dorete plasarea obiectului (1.40
pe vertical i 1.80 pe orizontal, n cazul nostru) i se apas butonul stng al
mouse-ului;
- se introduce textul dorit (Denumire);
- se apas butonul stng al mouse-ului.
n mod similar se definesc celelalte obiecte text ale ecranului nostru dup cum
urmeaz:
Data ultimei int_______2.48_________1.68
Data introducerii______3.08_________1.68
Cod________________3.78_________1.68
Specificatii__________4.68_________1.68
Provenienta__________6.98_________2.68
Pret________________7.88_________5.88
Grupa______________6,88_________5.88
Nom_______________0.58________12.18
Aceste obiecte (tip text) au caracter informativ. Utilizatorul nu poate aciona asupra
lor.
CMPURI DE EDITARE
Poriunile de ecran n care se vor introduce date pentru actualizarea unor baze de
date de exemplu (Den, Specif, data_ui etc) poart numele de cmpuri de editare.
Pentru a defini un cmp de editare se procedeaz astfel:
- se acioneaz butonul al treilea din stnga ferestrei de configurare;
se mut cursorul n poziia dorit pentru cmpul de editare i se apas butonul
stng al mouse-ului, deschiznd fereastra de dialog;

- n interiorul acesteia se stabilesc proprietile obiectului;


- prin nchiderea ferestrei se ncheie definirea.
Proprietile unei zone de editare care pot fi specificate n fereastra de dialog se
refer la:
- numele variabilei asociate (un cmp din baza de date sau o variabil de memorie)
i va fi specificat prin intermediul declanatorului Input sau n cmpul de editare
alurat;
- tipul datei - (ir caractere, numeric sau dat calendaristic) i va fi stabilit prin
intermediul ferestrei de dialog Format, deschis prin acionarea declanatomlul cu
acest nume. n fereastr pot fi specificate opiuni de editare ca n tabelele
alturate:
OPIUNI PENTRU IRURILE DE CARACTERE
Opiunea______________Modul de afiare
__________________________________________________- _____
Alpha Only_________Doar caractere alfabetice
To Upper Case______Caractere convertite n litere mari
R_________________Caracterele non-format sunt afiate
__________________dar nu sunt pstrate n cmp
Edit "Set" Date_____ Date calendaristice editate n format curent
British Date________ Date calendaristice editate n format englezesc
Trim_______________Spaiile de la nceput i sfrit sunt eliminate
Center_____________Datele sunt afiate centrat
OPIUNI PENTRU FORMATARE DATE NUMERICE
Opiunea__________________Modul de afiare
__________________________________________________- _______
Left Justify_________Aliniere la stnga (normal pentru cmpuri numerice)
Blank if Zero_______ Spaiu n caz c valoarea este zero
(Negative)__________Numerele negative sunt ncarate ntre paranteze
Edit "Set" Date_____ Date calendaristice editate n format curent
British Date________ Date calendaristice editate n format englezesc
CR if Pozitive_______CR (credit) afiat dup numr dac este pozitiv
DB if Negative______ DB (debit) afiat dup numr dac este negativ
Leading Zeroes_____ Tiprete toate zerourile din faa cmpului
Currency___________Afieaz n formatul curent
Scientific___________Afieaz n format tiinific

OPIUNI DE FORMATRE DATE CALENDARISTICE


Opiunea__________________Modul de afiare
__________________________________________________- _________
Edit "Set" Date_____ Date calendaristice editate n format curent
British Date________ Date calendaristice editate n format englezesc
- valoarea cmpului sau variabilei va fi editat dac este selectat butonul radio
Input Field (Get), sau va fi doar afiat dac este ales butonul radio Output Field
(Say);
- dac este activat comutatoru! Select Field on Entry, cnd cursorul se afl n
cmpul de editare, ntregul obiect va fi selectat. n cazul unui obiect tip Say (care
este doar afiat) acesta va fi actualizat la fiecare modificare a variabilei afiate. n
mod implicit zona de editare va fi dezactivat dup generare, n timpul activrii
comutatorului initialiy Disable Field.
- o valoare minim i una maxim pentru valoarea introdus n cmp pot fi
specificate prin intermediui declanatoarelor Lower respectiv Upper.
- se pot specifica pachete de instruciuni corespunztoare clauzelor asociate
obiectului, prin intermediul declanatorelor din seciunea Clauses.
Crearea primului cmp de editare (aflat lng obiectul text "Nume" ) se face astfel:
- se selecteaz csua a treia din marginea stng a ferestrei de configurare;
- se mut cursorul n poziia 1.18, 3.72 i se apas butonul stng al mouseului;
- n fereastra de dialog deschis pe ecran, n csua text Input... se specific numele
variabilei n care va fi pstrat coninutul csuei de defilare m.nume;
- se nchide fereastra de dialog acionnd declanatorul OK.
Pentru a modifica dimensiunea unui obiect se procedeaz astfel:
- se poziioneaz mouse-ul pe obiect i se acioneaz butonul stng al mouse-ului;
- se poziioneaz cursorul pe un col al obiectului i se deplaseaz mouse-ul nct
obiectul s capete dimensiunile dorite (mouse-u! rmnnd apsat).
Se modific dimensiunile obiectului creat astfel nct acesta s se ntind pn la
1.32 centimetri de marginea superioar i 6,24 centimetri de extremitatea stng a
ferestrei de configurare. n mod asemntor se definesc celelalte csue de editate
astfel:
Poziia Variabila asociat
1.68,3.88 m.data_ui
2.32, 3.88 m.data_i
3.12, 3.88 m.cod
La definirea obiectelr m.data_ui i m.data_i se va specifica faptui c acestea sunt de
tip dat calendaristic astfel: se deschide fereastra asociat fiecrui obiect, se
acioneaz declanatorul Format, iar din fereastra de dialog deschis se selecteaz
birtonul radio Date.
REGIUNI DE EDITARE
Acest tip de obiect se foiosete pentru cazurile n care spatiul ocupat de zona
respectiv este mai mare (nu se refer numai la 10-20 de caractere). Definirea
zonelor de editare se face n mod asemntor cu crearea cmpurilor de editare,
folosind butonul al patrutea aflat la marginea stng a ferestrei de configurare.
Fa de cmpurile de editare, n fereastra de dialog Edit Region se pot face
urmtoarele specificri:
- Dac a fost selectat comutatorul Scrool Bar on Edit Region, n marginea dreapt a
regiunii de editare va fi adugat o bar de defilare;
- tasta Tab va putea fi utilizat n regiunea de editare n cazul cnd comutatorui
Allow Tabs in Edit Region este activat;
- numrul de caractere care pot fi scrise n regiunea de editare va fi specificat cu

ajutorul zonei de editare Character Length.

Crearea regiunii de editare a adresei se va face astfel:


- se selecteaz butonul al patrulea din marginea stng a ferestrei de configurare;
- se mut cursorul n pozitia dorit (de exemplu 4.50, 3.80) i se apas butonul
stng al mouse-uiui deschiznd ferestra de dialog Edit Region;
- n csua text Input se scrie numele variabilei asociate obiectului (m.specif)
se nchide fereastra aclonnd declanatoru! OK.
BUTOANE RADIO
Specificarea provenienei n exemplul nostru se va face printr-un buton radio aflat n
apropierea textului "Prov" (deoarece are doar dou vaiori), Definirea unui buton
radio se face cu ajutorul butonului al aseiea, n mod asemntor cu definirea
zonelor de editare.

n fereastra Radio Button se pot face specificrile:


- variabila sau cmpul bazei de date asociat grupului, de tip numeric sau ir de
caractere va fi specificat prin declanatorul Variable sau n zona alturat (cmp de

editare);
- textele explicative vor fi plasate n apropierea butoanelor radio (pentru a fi
explicite) i vor fi specificate n seciunea Radio Button Prompts;
- n apropierea butoanelor radio pot fi afiate imagini (comutatorul Picture Buttons,
fiiere cu extensia .bmp, selectate dedanatorul Picture File..);
- la prima afiare butonul radio ce va fi selectat se poate specifica cu ajutorul listei
ascunse Initial;
- butoanele grupului pot fi dispuse vertical (Vertical) sau orizontal (Horizontal) cu
specificare n seciunea Options;
- grupul de butoane poate fi dezactivat la lansare dac a fost activat comutatorul
Initialy Disable Buttons;
- n zona de editare Space Between Buttons poate fi indicat distana dintre
butoane;
- clauzele asociate grupului pot fi specificate prin intermediul declanatoarelor din
seciunea Clauses;
Pentru cazul nostru se vor realiza urmtoarele operaii:
- se acioneaz declanatorul al aselea din marginea stng;
- se mut cursorul n poziia dorit (7.58, 2.16) i se apas butonul stng,
deschiznd astfel fereastra de dia!og Radio Button;
- n cmpul de editare Variable se introduce numele variabilei;
- n seciunea Radio Button Prompts: se introduc textele reprezentnd butoanele
radio:
< Intem
< Extern
- se actioneaz declanatorul Valid i m zona de editare a ferestrei deschise, se
scriu instruciunile de validare;
if buton=0
m.prov=.f.
else
m.prov=.t.
endif
- se nchid n final feresfrele de dialog prin acionarea declanatoarelor OK.
LISTA ASCUNS
O list ascuns va fi folosit n exemplul nostru pentru a selecta grupa (din mai
multe posibiliti) n care se gsete un material. Definirea se face asemntor cu a
zonei de editare selectnd butonul al optulea din stnga ferestrei de configurare. Se
pot specific:
- elementele listei ascunse vor fi precizate de utilizator dup selectarea butonului
radio List Popup din seciunea Options, sau vor fi extrase dintr-un masiv n cazul
selectrii butonului radio Array Popup;
dup generare lista va fi dezactivat dac a fost ales comutatorul Initialy Disable
Popup care va putea fi activat doar explicit;numele variabilei de memorie sau
al cmpului bazei de date de tip numeric sau ir de caractere va fi specificat prin
intermediul declanatorului Variable ... sau n cmpul de editare asociat lui;

- dac elementele nu sunt extrase dintr-uri masiv ele vor fi introduse n seciunea
Popup Prompts; |
- elementul listei care va fi selectat iniial se indic n lista ascuns Initial;
- cu ajutorul declanatoarelor 1st Element i # Element (seciunea Clauses) se vor
stabili elementeie masivului i anume primul element al listei i numrul
elementelor extrase.
Pentru definirea listei ascunse din exemplul nostru, se realizeaz operaiile;
- dup acionarea declanatorului cu numru! opt se mut cursorul n zona dorit
(6.62, 7.22) i se apas butonul stng al mouse-ului deschiznd fereastra de dialog
Popup;
- n cmpui de editare Variabie al acestei ferestre se scrie numeie variabilei de
memorie sau al cmpului din baza de date care va fi asociat listei ascunse
(m.filiala);
- n seciunea Popup Prompts se indic elementele listei ascunse (una sub alta);
Profile Produse din lemn
Tabl Cauciuc si produse PVC
Materiale de constructii Rulmenti
Ambalaje Organe asamblare
CMPURI DE EDITARE CU BUTOANE DE INCREMENTARE
n exemplul nostru un cmp cu butoane de incrementare-decrementare poate fi
preul unui material. Definirea acestui cmp se face cu ajutorul butonului al zecelea
din fereastra de configurare, n mod asemntor cu crearea celorlalte cmpuri.
n fereastra de dialog Spinner se pot specifica:
- numele variabilei sau al cmpului bazei de date (numerice) ce va fi specificat cu
ajutorul declanatorului Variable sau n cmpul alturat asociat;
- formatui de afiare cu declanatorui Format;
- valorile minim i maxim ntre care se va ncadra valoarea introdus n cmpul de
editare respectiv (cmpurile Minimum i respectiv Maximum din seciunea Display;
- pasul de incrementare - decrementare (Increments By);
- la execuia programului se pot scrie valori mai mici sau mai mari dect acestea
(seciunea Range specific valorile minime i maxime cu declanatoarele Lower i
Upper);

- pot fi specificate o serie de clauze (seciunea Clauses) privind condiii impuse


variabilei la introducere (WHEN, VALID etc);
- comutatoarele Select on Entry i initially Disable au aceleai semnicaii ca i n
cazul obiectelor prezentate anterior.
Pentru ecranul nostru definirea butonului de incrementare-decrementare folosit la
stabilirea preul unui material se face astfel:
- se acioneaz butonul al zecelea i se mut cursorul n zona dorit (7.52, 7.38) i
se apas pe butonul stng al mouse-ului;
- n sectiunea Display a ferestrei Spinner ce s-a deschis se scriu valorile (de
exemplu):
Minimum: 1000
Maximum: 500000
Increment By: 10
- n cmpul de editare Variable se introduce numele variabilei asociate cmpului
(m.pret);
- se nchide fereastra de dialog Spinner (OK).
COMUTATOARE
n exemplul nostru operatorul va putea specifica prin intermediul unui comutator
dac materialul respectiv are stoc sau nu. La definirea acestui obiect se acioneaz
butonul al aptelea i dup ce s-a deschis fereastra Check Box asociat se fac
specificrile obinuite:
- numele variabilei de memorie sau al cmpului din baza de date de tip numeric sau
logic se specific n cmpul de editare Variable, sau prin intermediul
declanatorului, Variabila va lua valoarea 0 sau 1 dup cum comutatorul a fost
activat sau nu;
- textul informativ va fi introdus n cmpul de editare Check Box Prompt (caracterul
precedat de" <" va deveni tast direct de selecie);

- dac va fi ales comutatorul Picture Check Box, va fi aleas o imagine n locul


textului explicativ, iar cu comutatorul Picture File se va afia fisierul (.bmp) ce
conine imaginea;
- dup generare, comutatorul va fi activat dac a fost ales comutatorul Initially
Checked (va fi dezactivat cu comutatorul Disbled);
- clauzele asociate se definesc cu comutatoarele din seciunea Clauses dup care se
nchide fereastra (OK).
Definirea comutatorului "Stoc" se face astfel:
- se alege butonui al aptelea i se mut cursorul n poziia dorit (8.50, 6.20) dup
care se acioneaz butonul stng al mouse-ului;
- n cmpu! de editare Check Box Prompt: se introduce textul:
<Stoc (S va deveni tast direct de selectare)
- n cmpul de editare Variable se scrie numele variabilei;
- pentru a specifica o clauz Valid se actioneaz declanatorul cu acest nume i se
scriu instructiunile:
IF comut=0
m.stoc=.f.
ELSE
m.stoc=.t.
ENDIF
- se nchid cele dou ferestre deschise acionnd tastete OK.
LISTE
Pe ecran va fi afiat o list coninnd grupele de materiale despre care exist
informaii n baza de date nom.dbf pe parcursul execuiei programului. Prin alegerea
unei grupe din list, obiectele ecranului vor fi actualizate cu informatiile referitoare !
a acesta.

- utiliznd butoanele radio din seciunea List Items se va preciza de unde sunt
extrase elementete listei:
From Array - dintr-un masiv;
From Popup - dintr-un submeniu;
From Files - din fiiere aflate pe diverse periferice (disk);
From Fields lista se extrage dintr-o baz de date;
From DBF Structure - din structura unei baze de date.
- n cmpul de editare Variable sau declanatorul cu acelai nume se va indica
numele variabilei asociate (numeric sau ir);
- dac este selectat comutatorul Terminate When Choise is Made, n timpui execuiei
programului execuia comenzii READ este terminat cnd se face o alegere;
- initial lista este dezactivat dac este activat comutatoru! Initially Disable List;
- eventualele clauze asociate se indic n sectiunea Clauses;
Definirea listei pentru exemplul nostru se face astfel:
- se actioneaz butonul al noulea i se mut cursorul n poziia dorit (1.20, 11.50)
i se declaneaz butonul stng al mouse-ului deschiznd fereastra de dialog List;
- din seciunea List Items a acestei ferestre se aiege butonul radio From Field iar n
cmpul de editare alturat se introduce numele cmpului din care vor fi extrase
elementele listei i anume "grupa";
- n cmpul Variable se scrie numele variabilei care va fi asociat acestui obiect,
variabila poate avea orice nume;
- se acioneaz declanatorul Valid din seciunea Clauses iar n zona de editare a
ferestrei ce se deschide se scriu instruciunile:
GO lista
pozitie=lista
SCATTER MEMVAR MEMO
if m.prov = .f.
buton = 1
ELSE
buton=2
ENDIF
IF m.stoc = ,f.
comut = 0
ELSE
comut = 1
ENDIF
SHOWGETS
care vor fi executate dup ce se face alegerea oricrui element al listei, apoi se
nchid ferestrele acionnd comutatoarele OK.
Se poate modifica lista astfel nct colul din dreapta s fie n colul de coordonate
5.30, 13.80.

DECLANATOARE
n ecranul pe care dorim s-l creem operaiile de adugare a informaiilor, salvare a
lor i incheierea operatiei de introducere se fac prin intermediul a trei declanatoare
(Adugare, Salvare i leire). Un grup de declanatoare se definete cu butonu! a!
cincilea din irui de butoane din stnga ecranuiui de configurare. Apoi mutnd
cursorul n dreapta i acionnd butonul stng al mouse-ului se deschide fereastra
Push Button n interiorul creia se definesc declanatoarele:

- un declanator poate fi de tip normal, zone dreptunghiulare care se disting prin


culoarea lor diferit i prin textul ncadrat, declanatoare invizibile - care se
suprapun (de obicei) peste o imagine sau text i de tip picture - declanatoare n
care textul este nlocuit de o imagine. Tipul declanatoarelor unui grup se specific
cu ajutorul butoanelor din sectiunea Type. Dac s-a ales tipul invizibil n cmpul de
editare Number se va indica numrul de declanatoare ce alctuiesc grupul, n cazul
declanatoarelor de tip picture, fiierele din care sunt extrase imaginile folosind
declanatoru! Each Picture File;
- pentru declanatoarele normale, textele pe care acestea le ncadreaz vor fi scrise
n seciunea Push Button Prompts; (poate fi folosit grupul de caractere < pentru a
desemna taste directe. De asemenea poate fi desemnat un declanator implicit
plasnd n faa textului asociat grupul de caractere "!" astfe) dup generare
declanatorul va fi ales n mod automat dac este acionat combinaia
CTRL+Enter. Pentru a specifica un declanator care dup generare va fi acionat n
mod implicit prin apsarea tastei ESC textul asociat va fi precedat de grupul "?";
- prin intermediul declanatorului Variable se precizeaz variabila sau cmpul din
baza de date asociat declanatorului;
- dispunerea pe orizontal sau vertical a declanatoarelor este indicat prin
butoanele radio Horizontal sau Verical;
- dezactivarea initial a grupului de declanatoare va fi dat de alegerea
comutatorului Initially Disable;
- instuciunea READ va fi ncheiat prin acionarea unui declanator din grup dac
se activeaz comutatorul Terminate READ on Selection;
- distanele ntre declanatoare se stabiiesc cu ajutorul zonelor de editare Space
Between Butons;
- eventualele clauze se pot specifica prin comutatoarele seciunii Clauses.

Pentru definirea grupului de declanatoare din exemplul nostru se procedeaz


astfel:
- dup selectarea butonului al cincilea se mut cursorul n zona dorit amplasrii
declanatoarelor (6.30, 11.50) i se apas pe butonul stng al mouse-ului cnd se
deschide fereastra Push Button;
- se scriu n seciunea Push Button Prompts unele sub altele textele asociate celor
trei declanatoare adic:
<Adaugare
<Salvare
! iesire // acesta este declanator implicit
- n cmpul de editare Variable se introduce numele variabilei asociate grupului de
declanatoare;
- se atege butonu! radio Vertical pentru dispunerea declanatorelor;
- n clauza Valid se scriu instruciunile (dadanatorul Valid):
Do case
Case decl = 1 && declanatorul ADAUGARE
append blank
scatter memvar memo && se mut variabileie din baza de
poz=recno() && date n cmpurile coresp. din
m.cod=' ' && memorie (sunt create variabilele)
m.grupa='tabla' && se iniializeaz apoi variabilele
m.pret=5000
m.prov=.f.
m.stoc=.f.
buton=1
comut=0
decl=1
list=1
show gets
case decl=2
if reccount()=0
appe biank
endif
go poz
gather memvar memo && se mut variabilele de memorie && n baza de date
show gets && n baza de date
case decl=3
clea read
endcase
- se inchid ferestrele (OK).
Programul de introducere astfel creat (cel dat ca exemplu) are ns anumite
deficiene: el este un program model, care are incluse toate tipurile de obiecte ce
pot fi create. ntr-un prrogram de introducere unde se fac introduceri masive ns,
este neconvenabil ca n timpul introducerii (unde se lucreaz n special cu tastatura)
s fie nevoie s se ntrerup tastarea i s se lucreze cu mose-ul, apoi s se reia
tastarea. Ba chiar este nevoie ca tastrile numerice s fie grupate de cele
alfanumrice pentru ca s poat fi automatizat ntr-o mai mare msur tastarea.
Din acest motiv noi recomandm utilizarea unor programe scrise cu instruciunile
SAY i GET sau utilizarea generatorului de filtre doar pentru crearea ecranului de
introducere i folosirea !ui n interiorul unui program asemntor cu exemplul care
urmeaz. Aici nu se utilizeaz nici un cmp care s utilizeze mose-ul, iar ncheierea
tastrii este semnalizat printr-o anumit introducere n primui cmp (spaiul).
Astfel cnd se va introduce acest cod se va produce ieirea, iar altfel se va continua
cu o alt introducere.

Pentru a rezolva automatizarea introducerilor i a modificrilor se va putea indexa


baza de date i se va testa existena codului n fiier. Dac e! exist, va fi vorba de
o modificare (codul trebuie s fie unic) iar dac nu, este vorba de o introducere (ca
n programu! urmtor):
close all
set date to brit
use nom inde indcod
go top
m.den=' '
m.cod=0
m.data_ui=date()
m.data_i=date()
m.adr=repl( ,80)
m.grupa=' '
m.pret=1ooo
m.Prov=.f.
m.stoc=.f.
tt=.t.
do while tt=.t. && se lanseaz un ciclu DO pentru reluarea
do int.spr && introducerii utiliznd screenul (anumit INT)
if m.den=" && text de oprire introducere (verificare la
tt=.f. && sfritul introducerii - dup READ)
exit
endif
seek m.cod
if .not.found() && test verificare ADAUGARE sau MODIF
appe blank
gather memvar memo
else
gather memvar memo
endif
m,den=' ' && urmeaz ini(ializarea valorilor la introd.
m.cod=' ' && ulterioare
m.data_ui=date()
m.daia_i=date()
m.adr=repl(' ',80)
m.grupa=' '
m.pret=1000
m.prov=.f.
m.stoc=.f.
enddo
close all
retu
De fapt lucrurile sunt ceva mai complicate dar o parte din ele pot fi rezolvate n
acest fe!. Altele pesupun combinarea ntre screenuri i programe i (eventual
modificarea n cadrul programului de creare screenuri - int.spr - care este un
program ca oricare altul).
OBIECTE GRAFICE
Pentru mbuntirea aspectufui i a clarittii programelor este recomandabil s se
utilizeze obiectele grafice. Acestea sunt: linii, chenare sau chenare rotunjite pentru
care se folosesc butoanele 11,12 i 13 din stnga ecranului de configurare.

De exemplu pentru ecranul nostru se pot crea dou chenare, primul avnd punctul
de coordonate din stnga sus 0.40,1.00 iar cel din dreapta jos la 6.10,10,20 iar al
doilea n punctu! 6.40, 1.00 i 9.50, 10.20 n mod asemntor se va crea un ecran
rotunjit avnd coordonatele: stnga sus: 7.40, 1.68 i dreapta jos: 8.82, 4.60 care se
ncadreaz n grupul de butoane radio definit anterior.
Caracteristici suplimentare pentru linii, chenare i chenare rotunjite pot fi stabilite
dup ce au fost selectate, folosind opiuniie din partea inferioar a submeniuiui
Object (care vor fi ulterior explicate). O facilitate deosebit o reprezint posibilitatea
includerii n ecran a obiectelor de tip imagine. Pentru aceasta se acioneaz butonul
cel mai de jos aflat n stnga ferestrei de configurare. n continuare se mut
cursorul n stnga i se plaseaz cursorul n partea unde va fi colul din stnga sus
al figurii, se spas pe butonul stng al mouse-ului, deschiznd pe ecran fereastra de
dialog Screen Structure unde:
- pentru a include o singur imagine n ecran se alege butonul radio File, iar cu
ajutorul declanatorului alturat se specific fiierul din care se preia imaginea;
- dac n ecran se dorete includerea unui cmp general, se va alege butonul radio
Field, numele cmpului fiind introdus n fereastra deschis la actionarea
declanatomlui;
- caracteristicile imaginii se stabilesc cu ajutoru! butoanelor radio din sectiunea
Structure And Frame Oifferent Size; dac a fost ales butonu! Clip Picture iar
dimensiunile imaginii sunt mai mari dect ale cadrului n care este depus, numai o
poriune a imaginii va fi vizibil, alegnd butonul radio Scale Picture - Retain Shape,
imaginea i va modifica dimensiunite astfel nct s ocupe un spatiu ct mai mare
(pstrnd prporiile imaginii), imaginea i va modifica proporiile ca s ocupe tot
cadrul dac s-a selectat butonul Scale Picture - Fill the Frame;
- imaginea va fi centrat dac s-a ales comutatorul Center Picture;
- dac informaiile sunt extrase dintr-un cmp de tip general, pentru ca s se
actualizeze coninutul imaginii la fiecare schimbare a nregistrrii eurente, se alege
comutatorul Refresh Output Filed;
- n cadrul declanatorului Comment se indic eventualele comentarii asociate.
n ecranul nostru se va include o imagine. Dup ce a fost acionat ultimul buton din
marginea stng a ferestrei de configurare, se pozitioneaz cursorul n punctul 0.95
6.65 i se apas butonul stng al mouse-ului, deschiznd fereastra de dialog
asociat imaginii. Prin intermediu! declanatorului File se alege fiierul c:FOXPROW
SAMPLEORGANIZEBMPSRESERVE.BMP. Se alege butonul radio Scale Picture Retain
Shape i apoi declanatorul OK.
6.1.3 Manipularea obiectelor
Deoarece uneori forma proiectat iniial pentru ecran este necesar s fi schimbat
(poziia obiectelor n ecran o dorim alta, sau se dorete tergerea sau adugarea

unor obiecte) se face o reconfigurare a obiectelor (schimbarea poziiei lor).


Realizarea acestei operaii se face prin intermediu! submeniuiui Object, care este
inc!us n meniul sistem la pornirea generatorului de ecrane.
Pentru a modifica proprietile mai mutor obiecte se face selectarea acestora iar
apoi, prin intermediui opiunilor subineniului Object, se fac schimbnie dorite perifru
toate obiecteie selectate. Pentru selectare se acioneaz butonul Selection pointer,
aflat n partea stng a ferestrei de configurare (primul buton), i apoi se realizeaz
un click pe obiectul de selectat. n continuare pot fi selectate alte obiecte (alturi de
primul) acionnd simuftan tasta SHIFT i butonul stng al mouse-ului dup ce
cursorul a fost poziionat pe obiect.
Selectarea obiectelor se poate face i printr-o zon de marcare n modul urmtor:
- se acioneaz butonul Selection pointer;
- se mut cursorul n colul din stnga sus al zonei ce cuprinde obiecteie de
selectat;
- mentinnd butonul stng al mouse-ului apsat, se deplaseaz mouse-ul pn cnd
se plaseaz n zona de selecie toate obiectele dorite;
- apoi se elibereaz butonul mouse-ului, obiectele coninute total sau parial n zona
de marcare vor fi setectate.
Deseori este necesar (sau este dorit) o aliniere a obiectelor. O aliniere perfect se
poate realiza alegnd opiunea Align to Grid din submeniul Screen, dup ce au fost
selectate obiectele care sunt implicate n aceast operaie. Dac s-a ales opiunea
Snap to Grid din acelai submeniu, alinierea obiectelor se va face automat
(obiectele ce sunt aezate pe aproximativ aceeai linie sau coloan).
Proprietile caroiajului de linii la care se face alinierea pot fi stabilite n fereastra de
dialog Ruller/Grid care va fi deschis pe ecran dac se alege opiunea cu acelai
nume din submeniul Screen.
Folosind butoanele radio din seciunea Ruler Lines (din aceast fereastr) se poate
specifica un caroiaj vizibil (Yes) sau nu (No) pe ecran. Pot fi de asemenea alese
unitile de masur iar nchiderea ferestrei se face acionnd declanatorul OK.
n fereastra de configurare unele obiecte pot fi suprapuse astfel nct cel mult unul
s fie vizibil n ntregime. Aducerea n prim plan a unui obiect din mai multe
suprapuse, se face selectnd obiectul, alegnd optiunea Bring to Front din
submeniul Screen. n mod asemntor selectnd un obiect aflat n prim plan, prin
intermediul opiunii Send to Back din submeniul Screen, obiectul este plasat n
ultimul plan al imaginii. Plasarea unui obiect n poziie central n cadrul liniei
curente se face prin selectarea lui i alegnd opiunea Center.
n realizarea ecranelor apar o serie de situaii n care este necesar efectuarea
acelorai operatii asupra mai multor obiecte. Aceste obiecte pot fi grupate, astfel
nct ele s se comporte unitar ele putnd fi manipuiate ca un obiect. Pentru
gruparea obictelor ele sunt selectate, dup care se alege opiunea Group din
submeniul Screen. Operaia invers se realizeaz alegnd opiunea Ungroup, dup
ce grupul de obiecte a fost selectat.
Font-ul textului coninut ntr-un obiect se alege din fereastra de dialog Font deschis
pe ecran prin selectarea obiectului i alegerea opiunii Font din submeniul Screen. n
mod asemntor, prin intermediul opiunii Text Alignment din acelai submeniu, se
stabilete tipul de aliniere a textului n cadrul unui obiect.
Un model de fond i culoarea de fond pentru un obiect se specific prin intermediu!
opiunii Fill, respectiv Fill Color. Opacitatea sau transparena unui obiect se stabilesc
cu ajutorul opiunii Mode. Pentru marginile obiectelor pot fi stabilite culori prin
intermediu! opiunii Pen Color. Grosimea i tipul marginilor chenarelor i a!
chenarelor rutunjite se specific prin opiunea Pen. Parcurgerea obiectelor unui
ecran cu ajutorul tastaturii (TAB pentru ordinea direct i SHIFT+TAB pentru ordine
invers) se face n ordinea definirii lor,
Ordinea de parcurgere poate fi modificat prin fereastra de dialog Object Order
deschis prin alegerea opiunii cu acelai nume din submeniul Screen. n aceast
fereastr se afl o list cu toate obiectele de control definite. Ordinea din list

coincide cu ordinea de parcurgere a lor dup generare. Schimbarea ordinii se face


astfel:
- se poziioneaz cursorul mouse-ului pe linia aflat n stnga obiectului a crui
ordine se dorete a fi schimbat;
- meninnd butonul stng apsat, se deplaseaz mouse-ul mutndu-se i obiectul
n poziia dorit;
- elibernd butonul mouse-ului operaia va fi ncheiat.
Dac din fereastra Obiect Order se ateae butonul radio By Row dup generare
obiectele vor fi accesate de la stnga la dreapta, linie cu linie, pornind din partea
superioar a ecranului. Accesul va fi de sus n jos, pe coloane de la stnga la
dreapta dac se alege butonul By Column. nchiderea ferestrer de dialog se facp
folosind declanatorul OK.
Pentru fiecare pachet de instruciuni specificat de utilizator se deschide cte o
fereastr de editare dac se alege opiunea Open All Snipets. Parcurgerea lor se
face cu combinaia de taste CTRL+F1 sau opiunile submeniului Window.
Dac majoritatea obiectelor unui ecran sunt cmpuri de editare corespunznd
cmpurilor unei baze de date, crearea ecranului poate fi uurat de utilizarea
opiunii Quick Screen (din submeniul Screen).
Prin alegerea acesteia va fi deschis fereastra cu acelai nume iar cmpurile
asociate cmpurilor de editare vor fi specificate n Constructorul de expresii deschis
prin alegerea declanatorului Fields.
Dimensiunea implicit a cmpului va fi cea din baza de date, dar poate fi specificat
o alt lungime cu ajutorul cmpului de editare Max Field Width. Cmpurile de
editare vor fi aezate n ordine pe linii de la dreapta la stnga, sau pe coloane
funcie de butonul radio selectat (n seciunea Field Layout). Dac a fost activat
comutatorul Titles, n apropierea cmpurilor de editare vor fi afiate numele
cmpurilor bazei de date.
Dac se selecteaz comutatorul Add Alias, la numele cmpului se va aduga i
numele alias-ului iar dac se alege comutatorul Memory Variables, pentru fiecare
csu i este asociat o variabil de memorie.
Dup ce a fost nchis fereastra de dialog Quick Screen, n fereastra de configurare
vor aprea cmpurile de editare. Ecranul astfel creat poate fi completat cu alte
obiecte de control sau obiecte grafice. Cu ajutorul opiunii Save a submenuilui File
este salvat ecranu! creat, informaiile fiind pstrate n fiierul cu extensia .scx i
numele fiind cel al ecranului (pentru ecranul nostru INTROD.SCX).
o 3 septembrie 2008
o 0 comentarii
o nici o evaluare
Capitolul 6-2.
6.1.4 Generarea programului
Opiuniie pe baza crora se va face generarea programului vor fi indicate n
fereastra de dialog Generate Screen, deschis cu opiunea Generate din submeniul
Program.

Generarea unui program se poate face pe baza unuia sau mai multor ecrane, ale
cror nume sunt afiate n lista Screen Set. Ordinea n care numele apare n list,
coincide cu ordinea n care sunt preluate ecranele n scopul generrii.
Modificarea n cadrul listei se face aa cum s-a prezentat n paragraful anterior la
ordinea de accesare a obiectelor. n acest list pot fi adugate sau eliminate
obiecte folosind dec!anatoare!e Add i Remove.
Vizualizarea pe ecran a obiecteior poate fi fcui n vederea unor modificri prin
selectarea din lista Screen Set a unui nume dup care se actioneaz declanatorul
Edit.
Utiliznd declanatorul Arrange se poate realiza o rearanjare a obiectelor pe baza
crora se face generarea programului. Modiflcarea se ia n considerare la generarea
programului i nu afecteaz forma ecranului aa cum a fost salvat, caracteristicile
lui.
Pe parcursul realizrii ecranelor se pot deschide i nchide baze de date, fiiere
index etc, se pot stabili relatii ntre bazele de date. Dac se selecteaz
comutatoarele Open Files i Close Files, n program vor fi incluse automat
instructiuni care realizeaz aceste operaii. De asemenea n program vor fi incluse
comenzi pentru definirea i dezactivarea ferestrelor dac au fost selectate
comutatoarele Define Windows i Release Windows. Dac este selectat comutatorul
Modal Screen, dup generare numai ferestrele implicate n aceast citire pot fi
activate (pe parcursul citirii obiectelor cu instruciunea READ).
Cmpurile de editare pot fi mrginite de cte un chenar dac a fost selectat
comutatorul Border for GETS. Folosind tasta TAB obiectele citite pot fi accesate n
ordine o singur dat. Pentru ca citirea s devin ciclic (dup citirea ultimului
obiect s se revin la primul) la comanda READ trebuie adugat opiunea CYCLE
prin selectarea comutatorului CYCLE Through Fields.
Se poate lucra concomitent cu mai multe ecrane care sunt incluse n acelai
program care conine o singur instruciune READ, sau poate fi generat o astfel de
instruciune pentru fiecare ecran dac s-a ales comutatorul Execute Multiple
READS.
Dac este activat comutatorul Windows Objects, se va genera un cod program
pentru o singur platform Windows. Specificarea ferestrelor care vor fi accesate
mpreun cu ecranele se face prin intermediu! declanatorului Asociatted Windows.

Operaia de generare se face acionnd declanatorul Generate i programul obiect


poate fi studiat. n cazul nostru va fi generat programui INTROD.SPR, iar execuia lui
se va face cu optiunea Do ... din submeniul Program sau Screen din submeniul Run
sau mai simplu prin comanda:
DO INTROD.SPR
6.2 Generatorul de rapoarte
n procesul de prelucrare este de o mare importan posibilitatea de afiare a
rezultatelor. Acest operaie (care este ultima din procesul de prelucrare care
cuprinde introducerea, prelucrarea, extragerea i prezentarea datelor) poate fi
fcut prin dou metode:
- prin programe - acestea conin instructiuni de afiare a informaiilor coninute n
baze de date i n variabile de memorie, dar au dezavantajul finalizrii grafice mai
laborioase, modificrite n program se fac mai greu i necesit cunoaterea !
imbajului de programare la un nivel superior;
prin utilizarea generatorului de rapoarte, metod mai facil.
6.2.1 Fereastra de configurare a raportului
Folosirea generatorului de rapoarte presupune:
- pornirea generatorului, deschiznd fereastra de configurare; crearea raportului
este mult uurat de faptul c fereastra este mprit n benzi orizontale, de
dimensiune variabil i care poate fi modificat (se pot aduga linii i se pot terge
linii care reprezint seciuni ale raportului;
- n interiorui benzilor se definesc obieciele specifice generatorului (obiecte text,
obiecte grafice, obiecte cmp i obiecte cmp calculate); .
- odat creat, raportul se salveaz i el poate fi tiprit folosind opiunea Report din
subbmeniul Database sau cea cu acelai nume din submeniu! Run, sau prin comenzi
specifice (REPORT FORM).
Cu ajutomlui generatorului de rapoarte pot fi definite foarte uor obiecte n benzile
de configurare. Astfel pentru exemplificare va fi creat un raport avnd la baz
nregistrrile bazei de date NOM.DBF care satisface urmtoarele cerine:

- conine denumirea, pretul, i grupa pentru toate materialele


- pentru fiecare grup, denumirea apare n ordine alfabetic;
- dup ultima denumire va fi afiat un total cu numrul materialelor din grup;
- la sfritu! raportu!ui este afiat numrul tota! de materiale.
Forma tiprit va fi asemntoare celei de mai sus:
Dac se dorete o grupare a datelor dup anumite criterii este necesar ca baza de
date n care se extrag datele, s fie sortat sau indexat dup cheia care d
criteriile de grupare. Cheia poate cuprinde mai multe criterii, fiecare corespunznd

unui nivel de grupare al informaiilor.


n cazul nostru baza de date va fi indexat dup grup+den. Pentru generarea
indexului vom utiliza comenzile:
USE nom
INDEX on grup+den to indnom
lar dup aceasta va fi pornit generatorul de rapoarte cu comanda:
CREATE REPORT nume
unde nume este numele raportului.
Se mai poate folosi pentru crearea raportului opiunea New din submeniul File.

Pornirea raportului ncepe cu pomirea generatomlui cu comanda CREATE REPORT


lista. Astfel pe ecran va fi deschis fereastra de configurare a raportului, iar n bara
meniului sistem vor fi incluse doii optiuni: Object i Report.
Deschiderea ferestrei de configurare n scopul unor modificri asupra unui raport
creat anterior (i salvat) se face cu comanda:
MODIFY REPORT nume
sau cu opiunea Open din submeniui Fiie. Pot fi deschise mai multe ferestre de
configurare (n msura existenei memoriei disponibile) dar numai una este activ
ntr-un anumit moment. Cu optiunile Cut, Copy i Paste din submeniul Edit, obiectele
pot fi mutate sau copiate dintr-o fereastr n alta.
Indiferent de coninutul unui raport, n interiorul lui pot fi puse n eviden: titlul
raportului, titlul de pagin, corpul raportului, totalurile de pagin, totalurile
raportului. Acestor elemente componente le corespund benzile oriontale,
dimensiunile putndu-se modifica dup necesiti. .
Dup pomirea generatorului de rapoarte, n fereastra de configurare se pot observa
trei benzi: Page Header, Detail i Page Footer. n afar de acestea se pot include n
raport urmtoarete benzi: Title, Group Header, Group Footer i Summary. Dac
raportul este structurat pe coloane, n fereastra de configurare vor aprea benzile
Column Header i Column Footer. Dimensiunea vertical a unei benzi poate fi
modificat acionnd cu mouse-ul asupra butonului aflat n marginea stng a
ferestrei de configurare, la nivelul benzii respective.
Caracteristicile benzilor sunt:
- Title - (banda de titlu) coninutul ei apare o singur dat la nceputul raportului
(titlul raportului);
- Page Header - (banda superioar de pagin) - coninirtul ei apare n partea
superioar a fiecrei pagini (antet de pagin);
- Column Header - (band superioar de coloan) - continutul apare la partea
superioar a fiecrei coloane (antet de coloan);
- Group Header - (banda superioar de grup) - obiectele incluse n band apar la
nceputul fiecrui grup (antet de grup);

- Detail - (banda de detalii) - obiectele incluse contin informaii din fiecare


nreqistrare a bazei de date deci contine informatiile importante ale raportu!ui;
- Group Footer - (banda inferioar de grup) - informaiile apar n partea inferioar a
fiecrui grup, de obicei contine totalizri pe grup;
- Column Footer - (banda inferioar de coloan) - coninutul ei este tiprit la sfritul
fiecrei coloane;
- Page Footer - (banda inferioar de pagin) - coninutul benzii este tiprit la partea
inferioar a fiecrei pagini - obinuit conine totaluri la nivel de pagin, numru!
paginii, data etc.
- Summary - (banda rezumat) - coninutul benzii este afiat o singur dat la
sfritul raportului. Conine de obicei totaluri la nivelul ntregului raport, informaii
privind editarea sa etc.
n scopul introducerii n raport a benzii de titiu, se alege optiunea Title/Summary din
submeniul Report, deschiznd asffel fereastra de dialog cu acelai nume. Pentru a
introduce o band de titlu se alege comutatorul Title Band din seciunea Report
Title, iar selectarea comutatorului Summary Band se va aduga banda Summary.
Dac se alege comutatorul New Page se trece la pagin nou i apoi se pot
deschide alte benzi.
Prin intermediul ferestrei de diafog Page Layout se stabilesc caracteristiciie generale
ale raportului i se realizeaz deschiderea acestei ferestre prin alegerea opiunii
Page Layout din submeniul Report.
Cu ajutorul zonelor de editare Columns, Left Margin, Column Width i Space
Between Columns se indic numrul de coloane, distana fa de marginea stng
la prima coloan, ltimea coloanelor i spaiile dintre coloane. Mrimile se msoar
n centimetri sau inches (butonu! radio Cm sau Inches). Dac raportul este
structurat pe coloane, dimensiunea benzii de detalii, a benzii superioare de coloan
i a celei inferioare, ca i a benzilor de grup vor fi micorate dup specificrile
fcute n fereastra Page Layout referitoare la dimensiunea coloanelor.
Riglele afiate la marginea superioar i stng a raportului pot fi gradate n inces
sau centimetri (butoanele radio din seciunea Dimension). Un obiect de tip cmp
poate mai multe elemente (pentru fiecare nregistrare) el fiind n zona de detaliu.
Acestea se dispun n ordine de la stnga la dreapta i de sus n jos sau invers,
ordine specificat folosind butoanele radio din sectiunea Print Order.
Dac este ales butonul Printable Page din seciunea Print Area, aria paginii tiprite
este determinat n mod automtat de sistem, dup tipul imprimantei. Rapotul va
umple ntreaga pagin dac a fost selectat butonul radio Whole Page din aceast
secuine. Caracteristici suplimentare privind imprimanta pot fi specificate prin
acionarea declanatorului Print Setup cnd este deschis o fereastr.
n fereastra de dialog Environment (deschis prin acionarea declanatorului cu
acelai nume din fereastra Page Layout) pot fi salvate, refcute sau terse utiliznd
obiectele de control existente aici. Font-ul implicit al raportului se poate specifica
prin intermediul declanatorului Font.
nchiderea ferestrei de dialog Page Layout se face acionnd declanatorul OK
revenind n fereastra de configurare.
6.2.2. Obiecte generate de rapoarte
n mod similar cu generatorul de ecrane, n generatorul de rapoarte (ferestra de
configurare) se pot defini diverse obiecte:
obiecte text care sunt folosite pentru a da utilizatorului anumite explicaii cu
privire la coninutul raportului:
obiecte cmp care conin vizualizarea datelor cuprinse n baza de date (sau bazele
de date) sau variabile de memorie, sau valoarea obinut prin evaluarea unor
expresii;
oboecte grafice linii, chenare, chenare rotunjite folosite pentru mbuntirea
lizibilitii i a aspectului raportului;

imagini se folosesc pentru mbuntirea aspectului raportului i pentru a oferi


diverse informaii.
OBIECTE TEXT
n fereastra de configurare i n forma fmai a raportuui texteie sunt identice. Deci
introducerea unui text ntr-o anumit band din raport, va duce la apariia acelui
text n zona respectiv a raportului. De exemplu textul LISTA introdus n banda de
titlu, va duce la apariia acestui text la nceputul listei.
Definirea obiectelor se face cu ajutorul butoanelor dispuse vertical n marginea
stng a ecranului de configurare. acionnd butonul al doilea i mutnd cursorul n
dreapta n locul de plasare al oboectului, se apas pe butonul stng i se introduce
textul. Operaia se ncheie apsnd pe butonul stng al mouse-ului.
OBIECTE CMP
Se acioneaz butonul al treilea i se mut cursorul n poziia dorit pentru cmpul
respectiv, dup care se apas din nou butonul stng al mouse-ului. Astfel apare pe
ecran o fereastr de dialog (Report Epresion) unde se specific proprietile
obiectului. Acionnd declanatorul Expresion, se introduce numele cmpului din
baza de date, expresia format cu un cmp al bazei de date, sau o variabil de
memorie. Formatul de ieire se stabilite prin intermediul declasnatorului Format
iar codiiile de tiprire vor fi specificate n fereastra de dialog Print When, ce va fi
deschis prin acionarea declanatorului cu acelai nume. Alinierea obiectului cmp
la partea superioar sau inferioar a benzii n care se afl i modificarea dimensiunii
verticale a acestuia n funcie de volumul de date pe care l cnine, vor fi realizate
prin selectarea butoanelor radio Top-Constant Field-Height, Bottom i Top-Field Can
Strech.
Prin declanatorul Comment se pot face comentarii referitoare la obiect. Utiliznd
declanatorul Calculate poate fi definit un cmp calculat (totaluri la nivel de
obiectele de grup sau total general, numrare, medii etc). Prin nchiderea ferestrei
definirea va fi ncheiat.
OBIECTELE GRAFICE
Se acioneaz butonul corespunztor din marginea stng a ferestrei de configurare
(cte unul pentru linii, chenare i chenare rotunjite) i se mut cursorul ndreapta
unde va fi plasat obiectul. Meninnd butonu! stng apsat, se deplaseaz mouse-ul
pn cnd obiectul grafic ia dimensiunile dorite. Elibernd butonul mouse-ului
operaia va fi ncheiat. Caracteristici suplimentare se pot specifica din submeniul
Object (dup ce obiectul respectiv a fost selectat).
OBIECTE IMAGINI
O facilitate existent n FoxProWo reprezint posibilitatea manipulrii fiierelor de tip
imagine (.bmp) sau a cmpurilor cu coninut general. Pentru a include o imagine
ntr-o list se procedeaz astfel:
- se acioneaz ultimul buton din stnga ferestrei de configurare;
- se mut cursoru! n locul de amplasare pentru obiect;
- cu butonul stng apsat se deplaseaz mouse-ul controlnd astfel o zon n care
va fi plasat obiectul;
- la eliberarea butonului, pe ecran va fi deschis fereatra de dialog Report Picture n
care se stasbilesc proprietile obiectului.
Prin alegerea butonului radio File n cadrul creat va fi inclus o imagine extras
dintr-un fisier cu extensia .bmp. Dac a fost selectat butonul Field, va fi inclus
coninutul unui cmp de tip general.
Utilizatorul poate stabili cum va fi inclus o imagine diferit ca mrime fa de zona
rezervat pentru depunerea ei astfel:
dac imaginea este mai mare, prin selectarea butonului Clip Picture n raport se va
afia doar o poriune din imagine (partea de sus);

selectnd butonu! Scale Picture - Retain Shape, imaginea va fi redus/mrit


proporional la dimensiunile rezervate pentru obiect;
imaginea va umple tot cadrul rezervat dac se selecteaz Scale Picture Fill the
Frame (eventual cu diustorsionarea imaginii).
n cazul includerii unui cmp de tip general, selectnd butonul Center Picture
imaginea va fi depus n centru.
n fereastra de dialog Print When deschis prin acionarea butonului cu acelai
nume, pozitia imaginii va fi raportat la partea superioar a benzii dac este ales
butonul radio Top i la partea inferioar dac este ales butonul Bottom. Comentarii
pot fi specificate prin intermediul declanatorului Comment.
Manipularea obiectelor se face prin selectarea lor iniial aa cum s-a artat la
generatorul de ecrane. Opiunile submeniului Object au aceleai utilizri.
6.2.3 Submeniul REPORT
Pentru a crea raportul nostru (lista alfabetic pe filiale a angajailor) este necesar
gruparea nregistrrilor dup filial. Crearea sau modificarea unei benzi de grup se
face prin intermediul ferestrei de dialog Data Grouping, deschis pe ecran alegnd
opiunea Data Grouping din submeniul Report.

n lista Group din fereastr vor fi afiate cheile de grupare (indexare) de sus n jos.
Numrul lor nu poate depi cifra 20. Schimbarea ordinii de afiare a cheilor se face
selectnd cheia i folosind combinaiiie de taste CTRL+PgUp i CTRL+PgDn sau cu
mouse-ul deplasnd cursorul cu butonul stng apsat dup ce a fost selectat cheia
care se dorete a fi mutat.
Pentru a crea o band de grup se alege declanatorul Add, deschiznd astfel
fereastra de dialog Group Info.
Cheia asociat benzii va fi indicat prin declanatorul Group sau n cmpul de
editare alturat. Operatiile referitoare la schimbarea cheii vor fi indicate utiliznd
comutatoarele When Group Changes, Begin:
- New Column - se trece la o coloan nou
- New Page - salt la pagin nou
- New Page (Page No=1) se trece la pagina nou (cu numr=1) ,
Dac se acioneaz comutatorul Reprint Heder On SubSequent Pages, titlul de grup
va fi tiprit la nceputul fiecrei pagini pe care acesta este afiat (grup pe pagin
nou). Pentru a evita situaiile n care un grup ar putea aprea n partea inferioar a
unei pagini se folosete zona de editare If Less Than ... Below Header, Begin New
Page n care poate fi stabilit o distan minim ntre titlu i marginea superioar a
paginii. Prin nchiderea ferestrei de dialog Group Info se revine n fereastra Data
Grouping numele cheii de grup fiind inclus n lista Group din fereastr.
Pentru modificarea unei chei de grup sau a proprietilor sale se selecteaz numele
cheii i se acioneaz declanatorul Change. n fereastra deschis se fac modificrile
dorite dup care se nchide fereastra cu revenire n fereastra Data Grouping.

tergerea unei benzi de grup se face acionnd declanatorul Delete dup


selectarea cheii ce se dorete a fi tears. nchiderea ferestrei Data Grouping se
face acionnd declanatorul OK.
n raportul nostru (i n general n rapoarte) este necesar s afim totalul unor
cmpuri (la nivel de grup sau pe total nregistrri). Acest lucru se face prin definirea
unui cmp calculat:
- se acioneaz butonul al treilea din fereastra de configurare i se mut cursorul n
zona pentru cmp (n general n banda Group Footer, Column Footer sau
Summary);
- apsnd butonul stng al mouse-ului se deschide fereastra de dialog Report
Expression;
- se folosete dedanatoru! Expression sau cmpu! de editare alturat unde se
introduce cmpul sau expresia pe baza crora se realizeaz operatiile matematice
dorite;
- se deschide fereastra de dialog Calculate Field prin acionarea declanatorului
Calculate;
- n fereastr se specific momentul (locul) reiniializrii valorii din obiectul calculat
care poate fi:
End of Report - la sfritul bazei de date (sfritul raportului);
End of Page - la sfrit de pagin;
End of Group (sau Column) - la sfritul grupului sau al coloanei.
Se va stabili apoi operatia matematic ce va fi efectuat cu valorile coninute n
cmp:
Nothing - nici o operaie
Count - numrare
Sum - nsumare
Average - media aritmetic
Lowest - valoarea minim din cele existente
Highest - valoare maxim din cele existente
Std. Deviation abaterea medie ptratic a valorilor
Variance ptratul abaterii medii ptratice
Acionnd declanatorul OK se revine n fereastra de dialog Report Expression i se
ncheie operaia de creare a cmpului calculat.
ntr-o serie de cazuri sunt necesare operaii care nu se rein n baze de date ci n
variabile de memorie. n acestea se retin rezultate partiale ale calculelor sau
rezultafe finale.
Crearea, tergerea i modificarea vahabilelor de memorie se poate face i prin
intermediul ferestrei de dialog Report Variables deschis prin alegerea opiuni
Variables din submeniul Report.

Pentru a crea o variabil de memorie, din fereastra de dialog Report Variables se


alege declanatorul Add, deschiznd fereastra Variable Definition.
Caracteristicile variabilei pot fi indicate folosind obiectele coninute n aceast
fereastr;
- n zona de editare Variable Name se va trece numele variabilei
- expresia de calcul a valorii variabilei va fi precizat n zona de editare aflat sub
declanatorul Value to Store ... sau cu ajutorut constructorului de expresii pornit prin
acionarea acestui declanator;
- valoarea iniial (n general 0 pentru nsumri sau 1 pentru multiplicri) va
specificat n zona de editare aflat sub decianatoru! Initial Vaiue... Aceast
valoare poate fi specificat i prin intermediul constructorului de expresii;
- variabila creat n acest fel va fi tears din memon'e dup terminarea afirii
raportului n cazu! activrii comutatoruiui Release After Report;
- utiliznd lista ascuns Reset, se poate specifica o condiie de reinitializare a
variabilei (la sfritul raportului, la sfrit de pagin sau la sfrit de grup);
- tipul de operaie matematic se introduce dup ce s-au acionat butoanele radio
din seciunea Calculate; semnificaiile acestor butoane fiind cele prezentate dup
care fereastra se nchide (OK).
Pentru a modifica proprietile unei variabile de memorie, din seciunea Variables sa
ferestrei de dialog Report Variables se selecteaz numele variabilei care va fi
modificat i se alege declanatorul Change. n fereastra Variable Deflnition
deschis pe ecran se fac modificrile dorite. tergerea unei variabile se realizeaz
prin alegerea declanatorului Delete dup ce a fost selectat numele variabilei.
Ordinea de afiare a variabitelor coincide cu ordinea evalurii !or la tiprirea
raportului. Dac o variabil cuprinde n expresia ei o alt variabil, atunci aceasta
trebuie definit naintea celeilalte. Ea trebuie deja s fie calculat la evaluarea
variabilei compuse.
Raportul creat poate fi vizualizat pe ecran folosind opiunea Page Preview din
submeniul Report. Este vizuaiizat iniiai prima pagin a raportului pe ecran, pagina
pate fi mrit sau micorat (Zoom In, Zoom Out), se trece la pagina urmtoare
(Next) sau la cea anterioar (Previous). nchiderea se face acionnd declanatorul
OK.
Afiarea n bara de stare a coordonateior curente a!e cursoruiui depinde de
opiunea Show Position. Alinierea automat la caroiaj se face alegnd opiunea Snap
to Grid.. Proprietile caroiajului se stabilesc prin intermediul opiunii Ruller/Grid din
meniul Report.
Un raport simplificat poate fi creat n mod rapid folosind optiunea Quick Report din
acelai submeniu. La selectarea opiunii se deschide o fereastr de dialog n care

pot fi specificate obiectele cmp ce vor fi introduse n raport i modul de dispunere


Ibr, Realizarea raportului se ncheie folosind optiunea Save din submeniu! File.
Pentru a continua crearea raportului nostru definim benzite de t!t!u i banda
rezumat, alegnd opiunea Title/Summary din submeniul Report. n fereastra de
dialog deschis se vor aciona comutatoarele Title Band, i Summary Band pentru
crearea celor dou benzi dup care se acionaz declanatorul OK.
n scopul crerii benzii superioare i inferioare de grup se va selecta Data Grouping
din submeniul Report, vom aciona declanatorul Add i vom crea n fereastra ce se
deschide prin intermediul constructorului de expresii pornit la acionarea
declanatorului Group grupul GRUPA dup care se nchid ferestrele folosind
declanatoarele OK.
Pentru ca riglele s fie gradate n pixeli, din fereastra de dialog Ruller/Grid
(submeniul Report), se setecteaz butonul radio Pixels.
Coordonatele curente a!e cursorului vor fi vizibile n partea inferioar a ferestrei de
configurare prin alegerea optiunii Show Position (submeniui Report).
Acionnd cu mouse-ul asupra fiecrei benzi se modific mrimile acestora astfel
nct s aib dimensiunile verticale ca exemplu:
Title 75
Pagge Header 40
Group Header 1 (Grupa) 0
Detail 24
Qroup Footer 1 (Grupa) 40
Page Footer 0
Summary 45
Se introduce n banda de titlu fextul:
NOMENCLATOR DE MATERIALE INDUSTRIA LINII
i textele
DEN PRET GRUPA (n banda de titlu pagin)
Numar de materiale (n banda inferioar degrup)
Numar total materiale (n banda rezumat)
Pentru a crea banda de detaliu (cu care eu de obicei ncep crearea unui raport se
acioneaz butonul al treilea din fereastra de configurare, se poziioneaz cursorul
n poziia 220,205 (poziia aleas) i se apas butonul stng al mouse-ului
deschiznd fereastra Report Expression. Prin intermediul constructorului de expresii
(declanatorl Expression) se alege cmpul Den (apoi PRET i GRUPA) i se nchide
fereastra (OK)
n aceei band se vor introduc cmpurile PRET (210,340) i GRUPA (210,480).
Utiliznd mouse-ul, cele trei obiecte vor fi redimensionate astfel nct dimensiunea
vertical s fie egal cu cea a benzii iar cea orizontal se fie de 100 uniti
(pstrnd colul din stnga jos fix).
Se va defini acum obiectul cmp calculat continnd numrul total de materiale. n
scopul crerii acestui obiect se acioneaz butonul al treilea, se poziioneaz
cursorul n poziia dorit (240,500) i se apas butonul stng al mouse-ului folosiind
declanatorul Expression, se introduce cmpu! "den", se actioneaz declanatoru!
Format, iar n fereastra deschis se alege comutatoru! Center i apoi OK.
Pentru a specifica faptul c obiectul respectiv este un obiect cmp calculat, se
activeaz comutatorul Calculate i n fereastra Calculate Field deschis pe ecran, se
alege butonul Count (numrare). Se nchid apoi ferestrele actionnd declanatorels
OK. n mod similar se creaz n banda rezumat a raportului un obiect calcufat n
mod identic (cmpul "den" se introduce pentru a fi contorizat) i din lista ascuns
Reset aflat n fereastra de dialog Calculate Field se alege opiunea End of Report.
Pentru a mbunti aspectul grafic al listei vor fi definite obiecte grafice dup cum
urmeaz:
- un chenar rotunjit va ncadra simetric banda titlu din raport;
- o linie orizontat va fi creat sub obiectele text nume, prenume, filiala (pentru a
detaa explicatiile de continutul listei);

- un chenar va ncadra obiectele din banda inferioar de grup;


- deasupra obiectelor din banda rezumat se poate crea o linie. n banda titlu din
raport poate fi inclus o imagine. Pentru aceasta se alege ultimul buton din
fereastra de configurare (stnga), se mut cursorul n dreapta (48,88) i se apas
butonul stng al mouse-ului, deschiznd astfel fereastra Report Picture. Prin
intermediui declanatorului File se selecteaz fiierul din care va fi extras imaginea
(c:foxprowsampleorganizebmp house.bmp) dup care se acioneaz butonul radio
Scale Picture Fill the Frame. Se nchide fereastra de dialog Report Picture
actionnd declanatorul OK iar obiectul va fi redimensionat astfel nct cadrul
imaginii s fie un ptrat cu aceeai dimensiune ca banda n care se afl.
Raportul poate fi previzualizat pe ecran folosind opiunea Page Preview din
submeniul Report.
6.2.4 Salvarea i afiarea rapoartelor
Pentru ncheierea construirii unui raport este obligatorie salvarea lui (n mod contrar
raportul este pierdut). Pentru salvarea raportului se utilizeaz opiunea Save din
submeniul File i se va salva raportul sub numele LISTA.FRX sau se va tasta
simuitan CTRL+W ceea ce are acelai efect.
Numele raportului (n cazul nu s-a specificat la deschiderea ferestrei de cunfigurare)
se va specifica prin intermediul declanatorului Form sau n cmpul de editare
alturat.
Pentru ca n momentul afirii listei s fie refcut starea mediului din momentul
salvrii raportului, trebuie ca la salvare s fie ales comutatorul Environment. Dac
nu este ales acesta, atunci lista creat va putea lista i alte baze de date (care au
structur identic) pentru c lista nu este legat nemijlocit de baza de date
deschis la crearea sa.
Un raport simplificat poate fi creat adhoc prin intermediul declanatorului Quick
Report.
La selectarea comutatorului Console On va fi afiat pe ecran lista, To Printer unde
va fi specificat imprimanta sistemului. Dac este ales obiectul de control Page
Preview se va face o vizualizare a raportului pe ecran. Prin nchiderea ferestrei de
dialog Report operaia de tiprire a listei va fi declanat.
Tiprirea unui raport (a unei liste) se poate face i prin comenzi ale sistemului:
REPORT [FORM file | ? ]
[ENVIRONMENT]
[scope] [FOR expl1] [WH!LE expl2]
[HEADING expc]
[NOEJECT]
[NOCONSOLE]
[NOOPTIMiZE]
[PLAIN]
[PREVIEW]
[TO PRINTER | TO FILE file]
[SUMMARY]
[PDSETUP]
Acest comand realizeaz listarea unui raport creat anterior. Opiunile fotosite n
comand sunt:
FROM file specific numele fiierului raport;
? afieaz numele tuturor rapoartelor;
ENVIROMNENT - contextul salvat la crearea fiierului va fi restaurat (bazele de date,
indexii, relaiile create la crearea raportului).
scope
FOR exp!1
WHILE expl2 - aceste clauze stabilesc setul de articole pentru care se construiete
lista

HEADING - permite specificarea unui titlu suplimentar ce va aprea pe fiecare


pagin a raportului. Dac este specificat i optiunea PLAIN aceasta are preceden
NOEJECT - suprim caracterul "form feed" nainte de nceputul raportului (are ca
efect neavansarea hrtiei la nceput de pagin la nceputul unei noi liste).
NOCONSOLE - interzice afiarea raportului pe ecran
NOOPTIMIZE - sunt foarte puine cazuri n care trebuie dezactivat Rushmore - de
exemplu cnd o comand modific cheia index refereniat n clauza FOR utilizat
de rushmore
PLAIN - permite tiprirea benzii page heading o singur dat, la nceputul listei,
suprim tiprirea numrului de pagin la nceputul fiecrei pagini.
PREVIEW- face trimiterea listei numai pe ecran (n vederea verificrii)
TO PRINTER | TO FILE file - trimite raportul ntr-un fiier (to file) sau la imprimant
SUMMARY - nu tiprete liniile din banda deta!iu ci doar ce!e de tota! i subtotal
PDSETUP - folosete o setare a imprimantei salvat mpreun cu fiierul de definire
raport.
Exemplu:
REPORT FORM ANGAJATI TO PRINT NOEJECT
sau
REPORT FORM ANGAJATI TO PRINT NOEJE SUMMARY
6.2.5 Folosirea rapoartelor create cu alte aplicaii
Transferul rapoartelor create sub DOS n varianta sub Windows se face ca i n cazul
ecranelor prin intermediui ferestrei de dialog Transporter. Varianta 2.6 a Fox-ului
este compatibil cu toate versiunile anterioare, chiar i cu variantete create DBASE
III, DBASE III+ i DBASE IV eventual cu recrearea rapoartelor respective care este
realizat automat. Dac se dorete o variant mbuntit a acestor rapoarte ca s
includ i posibilitile specifice variantei FoxProW, este necesar modificarea
acestor liste dup preluarea lor n FoxProW care se realizeaz prin utiliznd
comanda:
MODIFY REPORT nume
prin care se deschide fereastra de configurare i se introduc elementele specifice
dorite, dup care este salvat lista cu respectivele modificri.
Fereastra Transporter va fi deschis pe ecran la deschiderea unui fiier de tip ecran,
raport sau etichet, creat n versiunea sub DOS a FoxProului (sau ntr-o versine mai
veche).

Platforma (sistemul de operare) sub care s-a creat lista va fi ales din lista ascuns
Transport Objects From. Un font implicit pentru raport poate fi specificat prin
intermediul declanatorului Font. Acionnd declanatorul Transport and Open
fiierul va fi transformat i deschis n generatorul de rapoarte (generatorul de
ecrane sau de etichete) al variantei sub Windows.
6.3 Componenta grafic FOXGRAPH
n variantele sub DOS ale FoxPro exist o component care poart numele
FOXGRAPH i care permite reprezentri grafice pornind de la o baz de date.
n varianta sub Windows nu exist necesitatea completrii Fox-ului cu o extensie

deoarece exist posibilitatea comunicrii ntre FoxProW i graficele specifice


Windows-ului fiind prezent utilitarul Microsoft Graph.
n generaf, dat fiind multitudinea dafelor n bazele de date Fox este necesar
costruirea unor baze de date sintetice obinute prin filtrarea i gruparea datelor,
rezultatul fiind un volum mai mic de date, dar care aproximeaz fenomenul destul
de bine, pentru a obine un grafic explicit.
De exemplu dac avem ntr-o baz de date cheltuielile zilnice ale unei societi
comerciale n cursul unui an, analiza grafic a acestor date ar fi extrem de dificil.
Se poate ns (prin totalizare) construi o baz de date cu cheltuielile lunare, care pot
fi analizate perfect.
Vom considera baza de date COM.DBF care conine totalurile cheltuielilor i
veniturilor lunare pe timpul unui an (1998). Structura bazei de date va fi:
LUNA C 10
CHELT N 10
VENIT N 10
...........
- n figura "Reprezentare grafic" este prezentat reprezentarea obinut prin
modulul de reprezentri grafice.
Crearea unei reprezentri grafice n FoxProW presupune efectuarea operaiilor:
- deschiderea bazei de date din care sunt preluate datele pe baza crora se
construiete graficul (COM.DBF). Lansarea n executie a Asistentului pentru grafice
(aplicaia GENGRAPH.APP din directorul n care este instalat FoxProW-ul) obinnd
astfel pe ecran prima din cele patru ferestre ale Asistentului (GraphWizard), prin
intermediul cruia se pot specifica principalele caracteristici ale graficului;
- salvarea graficului ntr-un fiier pe disc, n vederea unei viitoare utilizri.
n scopul rezolvrii problemei pe care ne-am propus-o prima operaie ce trebuie
efectuat este deschiderea bazei de date COM.DBF.
Baza de date din care sunt preluate pentru grafic datele poate avea n structura sa
cel mult un cmp al crui tip nu este numeric.
Aplicaia GENGRAPH.APP: se alege opiunea Application din submeniul Run i din
fereastra de dialog ce se deschide pe ecran se alege numele aplicaiei
(Gengraph.app).
Pe ecran va fi afiat prima ferestr a asistentului pentru grafice. Acionnd asupra
unuia din butoanele radio poate fi selectat un tip de grafic (linie, bare verticale sau
orizontate, suprafete etc). Parcurgerea ce!or patru ferestre GraphWizard se face prin
intermediul declanatoarelor aflate n partea inferioar a acestora:
- |<< - se activeaz prima fereastr;
- >>| - se trece la ultima ferestr;

- Next > - se activeaz ferestra urmtoare;


- <Back se trece la fereastra anterioar;
- Cancel - operaiile sunt anulate, pstrndu-se asistentul,
n ultima fereastr declanatoru Next > este nlocuit cu OK, care ncheie execuia
asistentului pentru grafice.
Acionnd declanatoru! Next> din prima fereastr, va fi activat a doua care
stabilete modul n care vor fi asociate irurile de valori coninute n cmpurile bazei
de date axelor de coordonate n reprezentarea grafic. n fereastra a treia poate fi
specificat un titlu pentru grafic acesta aprnd deasupra sistemului de coordonate.
Prin intermediul ultimei ferestre pot fi realizate trei operaii: salvarea graficului,
tiprirea acestuia la imprimant, apelarea utilitarului Microsoft Graph prin care pot fi
schimbate anumite caracteristici ale graficului.
Tiprirea se face prin declanatorul Print aflat n ultima fereastr. Pentru salvarea
graficului se acioneaz declanatorul Save As, iar n fereastra deschis se
precizeaz numele unei baze de date n care se va face salvarea (un grafic va fi
pstrat ntr-o nregistrare a bazei de date). Dac numele bazei de date specificate
este deja existent, pe ecran va fi afiat o alt fereastr. Acionnd declanatorul
Append, la baza de date va fi adugat o nregistrare nou care va contine graficu!
salvat, iar n cazul acionrii declanatorului Owerwrite, graficul va fi suprascris
peste cel din nregistrarea curent.
Structura bazei de date n care se face salvarea graficului este:
--------------------------------------------------- ------------------------------------------Numele si tipul_____________________CONTINUT
--------------------------------------------------- ------------------------------------------graphname________numele graficului
graphid___________identificatorul graficului
Graphtitle_________titlul graficului
xaxis____________Numele cmpului care contine date pt. axa X
flist______________Numele cmpuiui care contine date pt. axa Y
olegraph__________reprezentarea grafic ca un obiect ncorporat
--------------------------------------------------- ---------------------------------------------Execuia graficului se ncheie prin selectarea declanatorului OK n cazul n care s-a
obinut graficul dorit. Dac se doresc modificarea unor carecteristici, pentru a porni
utilitarul Microsoft Graph se procedeaz astfel:

- se acionez declanatorul Zoom, deschiznd o ferestr care contine


reprezentarea grafic curent;
- se pornete utilitarul Microsoft Graph realiznd un dublu click pe graficul afiat n
acest fereastr.
Vor fi vizibile acum (parial) dou ferestre: Prima reprezint un tabel care . conine
datele pe baza crora se construiete graficul, iar a doua conine graficul n forma
sa curent. n partea superioar a ferestrei este vizibil meniul aplicaiei.
Realizarea (modificarea) graficului se realizeaz astfel:
- se stabilete formatul n care se afieaz datele n celulele tabelului;
- se alege tipul de grafic;
- se. adaug text la grafic (titlu i textele explicative asociate axelor de
coordonate);
- se realizeaz anumite modificri dorite;
- se actualizeaz graficul conform cu Microsoft Graph.
Trecerea din tabel la grafic i invers se face cu ajutorul opiunilor Chart i Datasheet
din submeniul Window sau realiznd un click pe fereastra care intereseaz.
Folosind opiunea Import Data din submeniul File pot fi importate n tabel date din
alte fiiere dect baze de date. De asemenea prin intermediul opiunii Open
Microsoft Chart, poate fi deschis n Microsoft Graph un grafic creat n Excel. n acest
caz datele i opiunile n care este construit graficul le vor substitui pe cele vechi
preexistente.
Cu opiunea Include Row/Col se poate include o linie sau o coloan n grafic (Insert
Row/Col din submeniul Edit). Graficul se va actualiza automat n momentul
modificrii (adugrii sau tergerii) datelor din tabel.
n mod implicit graficul este creat pe baza tuturor datelor din tabel. Pentru a
exclude din grafic datete dintr-o linie sau coloan, se selecteaz o csu (click pe o
csut) i se alege optiunea Exclude Row/Col din submeniul DataSeries. n fereastra
deschis se specific faptu! c este vorba despre o linie sau o coloan.
Datete vor fi preluate din tabe! pe !inii (Series in Row n submeniu! DataSeries) sau
pe coloane (Series in Columns). Prin opiunea Number din submeniul Format este
ales formatul n care sunt afiate datele din tabel. Limea unei coloane va fi
stabilit (dup selectare) cu opiunea Column Width din submeniul Format. Font-ul
folosit pentru text n tabel poate fi precizat pnn opiunea Font.
Calitatea graficului poate fi influenat de tipul graficului. Sunt posibile apte tipuri
de grafice bidimensionale i cinci tipuri tridimensionale, pentru fiecare existnd mai
multe variante. Selectatea tipului se face cu opiunea Gallery;
- Area - arie
- Bar - bare orizontale
- Column - bare verticale
- Line - linii
- Pie - cerc,elips (plcint)
- XY Scatter - Grafic creat numai pe baz de valori numerice
- Combination - combinaie de dou tipuri de grafic.
Pentru graficele tridimensionale pot fi selectate: Area, Bar, Column, Line, Pie.
Vaciantele se aleg dip alegerea tipului din fereastra Chart Gallery. Prin acionarea
declanatrului Custom din fereastra Chart Gallery se pot alege caracteristici
suplimentare pentru grafic. Prin alegerea unei opiuni din submeniul Gallery,
eventualele specificri suplimentare fcute anterior de utilizator vor fi pierdute.
Pentru a evita acest lucru, se utilizeaz opiunea Chart din submeniul Format.
Este posibil rotirea graficului n jurul axelor, precum i modificarea distanei (dintre
grafic i punctul de observare a lui. Aceste operaii se realizeaz n fereastra de
dialog Format 3-D View deschis prin alegerea optiunii 3-D View din submeniul
Format.
Un grafic XY Scatter este creat pe baza a cel mult dou iruri de valori numerice,
fiecare punct din grafic corespunznd unei perechi de valori, n mod implicit, prima
serie va fi asociat axei X. Pentru a modifica aceast asociere se folosete opiunea

PlotOnXAxis din submeniul DataSeries. Aceast opiune va fi aleas dup selectarea


anterioar a unei csue din coloana care va fi asociat axei X.
Optiunea Combination permite includerea n aceeai reprezentare grafic a dou
grafice distincte, unul de baz peste care va fi suprapus un grafic de acoperire.
Seriile de date vor fi mprtite n mod egal ntre graficul de baz i cel de acoperire.
Pentru un numr impar, jumtate plus unu din numrul seriilor va fi inclus n graficul
de baz. Pentru a transfera o serie din graficul de baz n cel de acoperire, se alege
opiunea Move To Overlay. n md similar cu opiunea Move To Chart se poate
transfera o serie din graficul de acoperire n cel de baz.
Prin alegerea opiunilor Chart i Overlay din submeniul Format (i alegerea unor
opiuni suplimentare) se poate evita pierderea unor opiuni referitoare !a grafic.
Prin submeniu) Chart se pot stabili o serie de opiuni. Cu opiunea Titles se pot
stabili titlul, i identificatori pentru axele de coordonate. Pentru a putea edita un
identificaior se rea!izeaz dou click-uri (nu unul dublu) pe acesta. ncheierea
editrii se face printr-un click n afara identificatorului.
Pentru afiarea valorilor graficului pe ecran se utilizeaz opiunea DataLabels din
submeniul Chart.
Pentru punerea n evident a unor elemente din grafic (care n Microsoft Graph se
face printr-o sgeat ndreptat spre elementul respectiv), se alege opiunea Add
Arrow din submeniul Chart. Va fi creat o sgeat care poate fi ndreptat spre orice
element cu ajutorul mouse-ului. Se pot crea astfel mai multe sgei (care la nceput
sunt suprapuse i nu se disting dect prin selectare i mutare cu mouse-u!}.
Cu Delete Arrow dup selectarea unei sgeti aceasta poat fi tears.
Cu opiunea Add Legend se adaug legenda n grafic iar cu Delete Legend ea este
tears. Poziia i alte proprieti ale legendei se pot specifica prin opiunea Legend
din submeniul Format.
Prin opiunea Axes din submeniul Chart se deschide o fereastr de dialog i prin
intermediul comutatoarelor din aceast fereastr se poate introduce sau elimina din
eprezentarea grafic valorile asociate diviziunilor axelor de coordonate. Densitatea
caroiajelor corespunztoare axelor se stabilete prin intermediu! ferestrei de dialog
Gridlines deschis la alegerea opiunii cu acelai nume din submeniul Chart.
Caracteristici suplimentare pot fi stabilite cu opiunile din submeniul Format (titlu,
legenda, axele de coordonate, sgei) iar grosiumea liniilor i fondul unui obiect
selectat se pot stabili cu ajutorul opiunii Patterns. Cu opiunea Font se pot stabili
dimensiunile, stilul, culoarea i fondul pentru textul selectat. Alinierea i orientarea
acestuia se stabilesc folosind opiunea Text, iar proprieti referitoare la axele de
coordonate prin intermediul opiunii Scale. Paleta de culori poate fi modificat cu
opiunea Color Palette din submeniul Format.
Caracteristicile oricrui element al graficului se pot specifica n fereastra deschis
prin reaiizarea unui ciick dublu pe elementui respectiv.
Graficul se poate depune ntr-un cmp de tip general folosind opiunea Copy Chart
din submeniul Edit. Inserarea graficului n cmp, ulterior se poate face prin opiunea
Paste Special.
Salvarea graficului creat n Microsoft Graph se face prin alegerea opiunii Update din
submeniul File. Dup prsirea Microssoft Graph folosind opiunea Exit and Return
din submeniul File i revenirea n fereastra asistentului pentru grafice se poate face
cu declanatorul Save As pentru salvarea graficului ntr-o baz de date.
Realiznd un click n afara ferestrei ce conine graficul aceasta va fi nchis
revenindu-se n cea de a patra fereastr GraphWizard.
6.4 Generatorul de etichete
Etichetefe sunt forme simplificate de prezentare a datelor existente n baza de date.
n general o etichet se constituie cu datele existente ntr-o nregistrare a bazei de
date (existnd cte o etichet pentru fiecare nregistrare). , .
Pentru crearea etichetelor se pomete generatorul de etichete care este

asemntor cu generatorul de rapoarte. Utilizatorul are posibilitatea s aleag dintro mulime de forme predefinite de etichete. Dup alegere se pornete geberatorul
de etichete n modul urmtor:
se alege opiunea New din submeniul File sau se tasteaz comanda:
CREATE LABEL nume_etichet
pentru modificarea unei etichete se folosete opiunea Open din submeniul File sau
comanda:
MODIFY LABEL nume_etichet
Pe ecran va fi afiat o fereastr din care se va alege o form predefinit de
etichet. Forma se refer la dimensiunile benzii de detaliu i la numrul de etichete
care vor fi tiprite pe aceeai linie. Apoi pe ecran se va deschide o fereastr de
configurare a raportului n care banda de detalii va avea caracteristicile etichetei.
Crearea etichetei se face ca n cazul raportelor. Etichetete pot conine de exemplu
numele persoanei i adresa (o carte de vizit).

Pentru crearea unor etichete se procedeaz n felul urmtor;


- se deschide baza de date;
- se introduce comanda: CREATE LABEL etich
- din lista aflat n fereastra de dialog New Label se selectez forma dorit a
etichetei i apoi se acioneaz declanatorul OK.
- prin intermediul declanatorului Expression se aleg cmpurile ce trebuie introduse
n etichet, revenindu-se apoi n fereastr;
- se actioneaz declanatorul Format, i n fereastra deschis se activeaz
comutatoarele To Upper Case i Center (dac se dorete acest lucru pentru
schimbarea modilui de scriere, cu litere mari/mici i centrat).
- se nchid ferestrele acionndu-se OK.
- n mod simiiar se definesc celelalte cmpuri (adresa, funcia);
- pentru centrarea obiectelor se poate alege opiunea Center din submeniu! Object;
- se poate alege opiunea Font pentru alegerea fontului (bold) dup selectarea
obiectului;
- tot n banda de detalii se poate construi un chenar cu care se ncadreaz
obiectele;
- pentru safvarea informaiilor se aleg succesiv opiunile Page Layout din submeniul
Report i declanatorul Save, dup care se revine n ferestra de configurare;
- cu Page Preview poate fi vizualizat eticheta (Report);
- se salveaz eticheta cu opiunea Save din submeniul File.
Afiarea eticheteior se face prin intermediu! opiunii Label din submeniul Database
sau Run. Dac se folosete submeniu! Database, pe ecran se va deschide o
fereastr de dialog identic cu cea din fereastra Report utilizat la afiarea
rapoartelor.
6.5 Generatorul de filtre
Un filtru reprezint un procedeu de selectare a unor nregistrri din numrul total al
nregistrrilor unei baze de date (sau din mai multe baze de date puse n relaie).
De exemplu din toi angajaii prezeni n baza de date personal.dbf ne intereseaz
doar cei care au fost angajai ncepnd cu 1998. Un filtru rezolv aceast problem
i furnizeaz doar datele cerute unei proceduri nde vizualizare (browse, list, raport
etc).

Realizarea unui filtru se poate face n afar de comenzi FoxPro prin generatorul de
filtre n felul urmtor:
- se deschide fereastra de configurare a filtrului (fereastra RQBE - Relational By
Query by Example - cerere relaional prin exemple);
- se specific bazele de date din care vor fi extrase datele;
- se stabilesc condiiile de legtur ntre bazele de date (dac avem mai multe baze
de date n general este vorba de un cmpo comun);
- se specific cmpurile din care vor fi extrase datele;
- se stabilete succesiunea n care vor fi prezentate rezultatele;
- se grupeaz datele extrase (dac este necesar);
- se stabilete modui de prezentare a datelor rezultate;
- se specific un criteriu de selecie a datelor;
- se salveaz filtrul;

- se poate trece la execuia filtrrii.


Vom lua ca exemplu crearea unui filtru avnd ca problem extragerea din baza de
date personal.dbf a numelui, prenumelui i a telefonului angajailor nscui dup
anul 1980.
Pomirea generatorului de filtre se realizeaz prin intermediul opiunilor New (pentru
creare) i Open (pentru modificare) sau cu comenzile:
CREATE QUERY nume_filtru
MODIFY QUERY nume_filtru
La pomirea generatorului pe ecran va aprea fereastra: RQBE. Dac n momentul
deschiderii ferestrei n zona de lucru exist o baz de date deschis, numele ei va fi
afiat n seciunea Database a ferestrei. Altfe! utilizatorul va trebui s specifice ntro ferestr de dialog deschis anterior ferestrei RQBE, numele bazei de date (bazelor
de date) din care vor fi extrase datele.
Dac se dorete adugarea unei baze de date pentru extragerea datelor, se
acionaez declanatorul Add din fereastra RQBE.
La deschiderea unei baze de date n cazul n care exist i alte baze de date, pe
ecran va fi deschis fereastra RQBE Join Condition, n care se pot specifica
eventualele legturi ntre bazele de date. Pentru a deschide o baz de date dup ce
a fost selectat numele acesteia n seciunea Databases, se acioneaz declanatorul
Clear.
Dac filtrul lucreaz mai mult dect cu o baz de date, pentru fiecare baz de
suplimentar se poate preciza o condiie de legtur.
De exemplu s presupunem c datele despre angajaii unei intreprinderi sunt

pstrate n dou baze de date. Pentru a extrage toate datele despre o persoan
trebuie consultate ambele baze de date. Acest lucru este posibil dac exist un
cmp comun (de exemplu marca) n ambele baze de date, identic iar una din baze
este sortat sau indexat (condiiile stabilirii unei relaii ntre dou baze de date).

La fiecare deschidere a unei baze de date suplimentare, pe ecran se va deschide o


fereastr (RQBE Join Condition) pentru stabilirea condiiilor de legtur ntre cele
dou baze de date.
Din iista ascuns aflat n partea stng a ferestrei se seiecteaz un cmp pe baza
cruia se va face legtura cu alt baz de date (un cmp comun bazelor de date).
Tipul comparaiei care va fi fcut ntre cmpuri se selecteaz din lista ascuns
aflat n centrul ferestrei, astfel:
- Like - se verific dac vatoarea coninut n cmpul al doilea este inclus n
primulo cmp;
- Exactly Like - se verific dac cele dou cmpuri sunt absolut identice;
- More Than - se verific dac valoarea continut n cmpul ales n prima list
ascuns este mai mare dect cea din a doua list ascuns;
- Less Than - se verific dac prima valoare este mai mic. Din a doua list ascuns
se alege un cmp din ait baz de date. Dac se urmrete ca la comparare s nu
se fac diferene ntre majuscule i minuscule, se activeaz comutatorul Ignore
Upper/Lower Case, se nchide fereastra acionnd declanatorul OK.
Pentru a modifica o condiie de legtur se poziioneaz cursorul mouse-ului pe
numele cmpului de legtur, dup care se relizeaz un click dublu pe butonul
stng,. iar n fereastra deschis se fac modificrile dorite. Pentru tergerea unei
condiii se selecteaz numele cmpului de legtur dup care se acioneaz
declanatorul Remove.
Prin intermediul ferestrei de dialog RQBE Select Fields care se deschide la
acionarea comutatorului Fields, se pot specifica cmpurile bazei de date care sunt
incluse n filtru.

n seciunea Table Fields sunt afiate numele cmpurilor disponibile prin alegerea
crora acestea vor fi mutate n seciunea Selected Output. Aceasta conine numele

cmpurilor i a expresiilor care sunt incluse n rezultatele fumizate de filtru,


Mutarea numelor de cmpuri ntre ceie dou seciuni se face pnn intermediul
declanatoarelor Move (mutare din seciunea Table Fields n Selected Output), All
(care se refer la toate cmpurile care sunt la fel mutate), Remove (sunt mutate
cmpurile selectate din Selected Output n Table Field) i Remove All (mut la fel dar
toate cmpurile). Mutarea se poate face i print-un click dublu dup ce cursorul a
fost pozitionat pe cmpul de mutat. Specificarea unei expresii care va fi inclus n
rezultatele filtrului se face prin intermediul listei ascunse Functions.
Dac este activat comutatorul No Duplicates, n cazul nregistrrilor identice numai
una va fi inclus n rezultatele filtrului. n cazui n care rezultatele sunt reprezentri
grafice, se activeaz comutatorul Cross Tabulate. nchiderea ferestrei de dialog se
face acionnd declanatorul OK.
Informaiile rezultate datorit unui filtru pot fi ordonate funcie de criteriile
utilizatorului. Prin activarea comutatorului RQBE Order By se deschide fereastra
RQBE Order By unde se fac aceste precizri.
n lista Selected Output a ferestrei sunt afiate numete cmpurilor din care au fost
extrase date, iar lista Ordering Criteria va conine numele cmpurilor dup care se
face ordonarea. Mutarea cmpurilor dintr-o seciune n alta se face ca i n fereastra
Selected Fields prezentat anterior. Dup ce s-a selectat un nume din seciunea
Ordering Criteria, folosind butoanele radio din seciunea Order Option, se stabilete
modul de ordonare: Ascending - n ordine cresctoare, Descending - n ordine
descresctoare.
La execuia filtrului se realizeaz:
- dac !ista Ordering Criteria conine ce! putin un cmp, datele exfrase vor fi
ordonate n ordinea acestuia;
- dac aceast list contine mai multe cmpuri i n primul cmp mai multe
nregistrri contin aceeai valoare, atunci acestea vor fi ordonate dup cel de al
doilea cm din lista Ordering Criteria.
nchiderea ferestrei se face prin acionarea declanatorului OK.

Dac este necesar ca n rezultatele date de filtru s nu apar nregistrri care conin
ntr-unul din cmpuri valori identice, se poate face o grupare a nregistrrilor dup
anumite criterii precizate de utilizator. Gruparea se face prin intermediul ferestrei
deschise !a activarea comutatorului Group By.
Specificarea cmpurilor dup care se face gruparea se realizeaz prin selectarea
numelor acestora din seciunea Fields in Table urmat de acionarea declanatorului
Move. Numele cmpurilor care au fost mutate apare n sectiunea Group By Fields
realizndu-se gruparea dup aceste cmpuri. (Acionnd declanatorul Remove se
realizeaz mutarea invers). Actionnd declanatorul OK fereastra va fi nchis.
Stabilirea condiiilor ce trebuie ndeplinite de grup pentru ca el s fie inclus n

rezultatele furnizate de filtru, se face n fereastra de dialog RQBE Search Condition


ce va fi deschis la actionarea declanatorului Having.
Condiiile pe baza crora se face selectia nregistrrilor care sunt fumizatede filtru
se stabilesc cu ajutorul obiectelor de control aflate n partea inferioar a ferestrei
RQBE. Din lista ascuns Field Name se alege un nume de cmp sau o expresie
(opiunea expression ... pornete constructorul de expresii) ce va fi un termen al
condiiei.

Pentru a alege tipul comparatiei se alege una dintre opiunile Like (grupul de
caractere trebuie s fie inclus n cmp), Exactiy Liks (identic), Mors Than (mai
mare), Less Than (mai mic), Between (ntre) sau in (n) din lista ascuns alturat.
Dac este activat comutatorul Not se obine inversarea (negarea) condiiilor
respective.
n cmpul de editare Example se completeaz partea a doua a condiiei n acelai
mod pot fi create mai multe condiii. Dac este necesar inserarea unor condiii
peste altele create anterior se procedeaz dup cum urmeaz:
- se selecteaz conditia deasupra creia va fi inserat o alta;
- se acioneaz declanatorul Insert;
- se introduce noua condiie.
tergerea unei condiii se realizeaz prin selectarea acesteia i apoi declanatorului
Remove.
n mod implicit o nregistrare este furnizat de filtru numai dac sunt ndeplinite
cumulativ toate condiiile impuse. n acest caz condiiile sunt combinate cu
operatorul logic AND (i). Pentru ca acestea s fie combinate cu operatorul OR
(sau), se procedeaz astfel:
se acioneaz declanatorul Or din fereastra RQBE sau se alege opiunea cu acelai
nume din submeniul RQBE; o band care conine textul OR va fi afiat sub ultima
opiune selectat; aceast band mparte grupul n dou, combinate ntre ele cu
operatorul logic OR; deci o nregistrare va fi selectat de filtru dac ndeplinete
condiiile din prima sau a doua parte (separate ntre ele prin banda OR);
acest linie poate fi mutat utiliznd tastele direcionale sau mouse-ul.
Modul n care sunt extrase rezultatele filtrului pot fi precizate printr-o serie de
opiuni prezente n lista ascuns Output din fereastra RQBE:
Browse - Informatiile sunt prezentate ntr-o fereastr BROWSE
Report/Label -... sunt prezentate ca raport sau etichete;
Table/DBF -... sunt prezentate ca o baz de date;
Cursor -... sunt introduse ntr-o baz de date temporar;
Graph - datele sunt prezentate grafic. La executie este apelat generatorul de
grafice.
n cazul prezentrii sub forma unui raport sau a unei etichete, activnd comutatorul
Options pe ecran va fi deschis fereastra de dialog RQBE Display Options prin
intermediu! creia se poate preciza:
- Screen Display - rezultatele sunt afiate pe ecran;

- Report - se afiaz un raport;


- Label - se afiaz o etichet;
- numele raportului (sau etichetei) va fi precizat prin declanatorul Form Name;
- o form simplificat de raport - declanatorul Quick Report;
- vizualizarea datelor pe ecran - comutatom! Page Preview;
- prezentarea unor rezultate sumare (banda summary) - declanatorul Summary
Information Only;
- salt la pagin nou - comutatorul Eject Page Before Report;
- un titlu de raport - dedanatoru! Report Heading sau n cmpul de editare alturat
ncadrat ntre apostroafe;
- titluri de coloane - comutatorul Suppress Column Headings;
- tiprirea i la imprimant - comutatorul Console On;
- pauz !a umplerea ecranulu! - comutatoru! Pause Between Screens;
- trimiterea datelor la imprimant - comutatorul To Printer;
- trimiterea datelor ntr-un fiier - comutatorul To File;
- rezultatele filtrului vor fi suprascrise peste vechiul coninut dac este activat
comutatorul Owerwrite File i vor fi adugate n caz contrar.
Comanda SELECT pe baza specificrilor fcute n fereastra RQBE, poate fi
vizualizat n orice moment prin actionarea declanatorului See SQL, Execuia
filtrului a fi realizat prin acionarea declanatorului Do Query. Dup ce a fost fcut
salvarea (folosind opiunea Save din submeniul File) i a fost nchis fereastra RQBE,
filtrul poate fi executat ca orice alt program prin comanda:
DO nume_filtru
n urma crerii unui filtru este creat un fiier (care poate fi vizualizat cu comanda
MODlFY COMM) cu numele su i extensia .qpr.
Problema propus se rezoiv n felul urmtor:
se deschide fereastra RQBE (CREATE QUERRY filtru)
se alege baza de date personal.dbf
- se activeaz fereastra RQBE Select Fields pentru a selecta cmpurile ce vor fi
incluse n rezultat;
- se aleg n ordine cmpurile: nume, prenume, telefon;
- innd cont c numele selectate n filtru trebuie s fie prezentate n ordine
alfabetic, se alege comutatorul Order By i n fereastra deschis se aleg cmpul
nume i apoi butonui radio Ascending; la fel se procedeaz i pentru cmpul
prenume, dup care se nchide fereastra.
- pentru a stabili condiia de selecie a nregistrrilor se alege cmpul D_NAST din
lista ascuns aflat n partea inferioar a ferestrei RQBE i opiunea More Than din
lista ascuns alturat; n cmpui de editare alturat se scrie 01.01.1980
- se salveaz filtrul i se nchide fereastra RQBE. Filtrul poate fi executat cu
comanda:
DO filtru.qpr
o 2 septembrie 2008
o 0 comentarii
o nici o evaluare
Capitolul 6-3.
6.6 Generatorul de meniuri
Operaiile ce se efectueaz n cadrul unei aplicaii mai complexe prin gruparea lor i
utilizarea unui program monitor, pot fi mai bine coordonate i utilizate. De
asemenea utilizarea unui program monitor (numit n acest paragraf "meniu" )
pemite operarea n program de ctre persoane care nu cunosc programul n
complexitatea sa,.pe baza unui minim de instruciuni de operare.
n general un program monitor este construit n jurul unui meniu principal. Pentru a
introduce o comand, utilizatorul va alege opiunea corespunztoare din meniu. n
acest fel se face o comunicare eficient ntre aplicaie i utilizator. Crearea
meniurilor utilizatoruiui se face priri dou metode;

- prin scrierea linie cu linie a programelor;


- prin intermediu! generatorului de meniuri.
Generatorul de meniuri creaz un program, pe baza opiunilor date de uitliizator,
prin a crui execuie se definete i se activeaz meniul creat. Pentru crearea unui
meniu trebuie parcurse urmtoarele etape:
- pornirea generatorului de meniuri;
- n fereastra afiat pe ecran, se stabilesc numele opiunilor, operaiile declanate
prin alegerea acestora i caractristicile generale ale meniului;
- pe baza celor specificate se genereaz meniul.
Ca exemplu va fi generat un meniu prin intermediul cruia se vor lansa programele
generate anterior (cu generatoarele): introd.spr, raport.frx, eticheta.lbx i filtru.qpr;
schema meniului fiind prezentat n cele ce urmeaz:

Mai nti trebuie pornit generatorul cu comanda:


CREATE MENU nume_meniu
sau utilznd opiunea New din submeniul File.
Pentru a modifica un meniu se poate utiliza comanda MODIFY MENU nume_meniu
sau opiunea Open din submeniul File.
Pe ecran va aprea astfel fereastra de configurare a meniului iar la meniul sistem va
fi adugat submeniul Menu.

Pentru a specifica tipul de aciune care va fi declanat, se alege una din opiunile
listei ascunse Result:
- Submenu - se va afia un submeniu; pentru a crea sau modifica submeniul se
alege declanatorul alturat (Create sau Modify), trecnd la definirea nivelului
urmtor al meniului;
- Command - comanda ce va fi scris n cmpul alturat va fi executat la alegerea
opiunii (comanda poate fi DO program); :
- Pad Name/Bar - n cmpui de editare aiturat se va introduce o opiune bar;

- Procedure - corpul procedurii care va fi asociat opiunii bar va fi scris n


fereastra deschis prin acionarea declanatorului Create.
Caracteristici suplimentare pentru opiunea bar pot fi specificate prin intermediui
ferestrei de dialog Prompt Options, deschis pe ecran prin actionarea
declanatorului Options din fereastra de configurare a meniului.

n csua text Comment a acestei ferestre pot fi descrise comeritarii. Acestea nu vor
fi luate n considerare la execuia programului generat,
O cale direct (tastele de alegere direct) poate fi specificat prin intermediul
ferestrei de diaiog Shortcut. Dup ce aceasta a fost deschis prin activarea
comutatorului cu acelai nume, calea direct va fi specificat prin apsarea unei
combinaii de taste. nchiderea ferestrei Shortcut se va face prin selectarea
declanatorului OK.
O condiie de accesare a opiunilor poate fi fcut prin intermediul Skip For. Cnd
este selectat o opiune, n partea inferioar a ecranului poate fi afiat un mesaj,
indicnd semnificaia opiunii respective. Acest mesaj este inclus introdus
intermediul comutatorului Message.
Un nume pentru opiunea bar poate fi scris n ferestra de dialog deschis prin
acionarea declanatorului Pad Name. nchiderea ferestrei Prompt Options se face
prin alegerea declanatorului OK.
Ordinea n care sunt definite opiuniie bar n fereastra de configurare a meniului
(de sus n jos) coincide cu ordinea n care acestea sunt afiate n bara meniului (de !
a stnga la dreapta). Dup ce au fost definite opiunite de nivel zero, se trece la
definirea opiunilor din nivelurile urmtoare.
Trecerea de la un nivel la altul se face prin intermediul listei ascunse Menu Level.
Definirea opiunilor de submeniu se face n mod similar cu definirea opiuilor bar,
existnd i deosebiri. ntre opiunile unui submeniu pot fi interpuse linii separatoare.
Pentru ca n partea inferioar a unei opiuni de submeniu s fie afiat o linie
separatoare, n fereastra de configurare, n csua text aflat sub numele opiunii se
introduce irul de caractere "-".
La definirea opiunilor de submeniu, n lista ascuns Result opiunea Pad este
nocuit cu optiunea Bar #. Dup alegerea acestei opiuni n zona de editare
alturat se poate scrie un nume de opiune. Inserarea unei opiuni se face cu
.ajutorul declanatorului Insert. Alegerea acestuia permite definirea unei optiuni noi
deasupra ceiei selectate anterior. Pentru a terge o opiune dup selectarea ei se
acioneaz declanatorul Delete. Aceste operaii pot fi realizate i cu ajutorul
opiunilor lnsert i Delete din submeniul Menu. O testare parial a meniului creat n
fereastra de configurare se poate realiza prin declanatorul Try It.
Poate fi utilizat un cod de iniializare i unul de finalizare pentru meniu, aceste
operaii fiind realizate nainte i dup activarea meniului.
Meniul creat poate nlocui meniul activ sau poate fi adugat celui activ. Aceste
caracteristici pot fi specificate prin intermediul ferestrei de dialog General Options,

care se deschide cu aceeai opiune din submeniul Menu.


Acionnd declanatorul Setup sau Cleanup sau declanatorul Edit, poate fi
spcificat o procedur care va fi executat la alegerea oricrei opiuni bar a
meniuiui, pentru care nu a fost specificat o aciune anumit. Poziia meniuiui nou
creat n raport meniu! activ va fi stabilit fotosind butoanete radio din seclunea
Locatiors.
Replace - meniul activ va fi nlocuit de cel creat;
Append - meniul va fi adugat coexistnd cu cel activ (n dreapta)
Before - meniul va fi inclus in ce! activ, naintea optiunii alese din lista ascuns
After - meniul va fi la fel inclus dup opiunea bar selectat din lista ascuns
alturat
nchiderea ferestrei se reaiizeaz prin acionarea declanatorului OK. .
Pentru definirea unei proceduri asociate unei opiuni bar sau unui submeniu se
poate folosi a doua opiune din submeniul Menu. Prin alegerea acesteia, n zona de
editare a ferestrei deschise pe ecran (sau prin intermediul declanatorului Edit
poate fi specificat o procedur asociat submeniului. Aceasta va fi executat n
cazul alegerii din suibmeniu a unei opiuni, pentru care nu a fost stabilit actiunea
ce va fi executat prin alegerea acesteia.
n cazul n care meniul are o structur asemntoare cu cea a meniului sistem,
devine foarte eficient folosirea opiunii Quick Menu din submeniul Menu (sub
opiunea General Options). Prin alegerea acestei opiuni n zona de editare a
erestrei sau prin intermediul declanatorului Edit, poate fi specificat o procedur
asociat meniului. Aceasta va fi executat n cazul alegerii unei opiuni, pentru care
nu a fost stabilit aciunea ce va fi executat prin ategerea acesteia.
Dup precizarea structurii meniulu!, acesta va fi salvat folosind opiunea Save din
submeniul File. Pentru generarea programului se atege opiunea Generate din
submeniul Program, deschiznd astfel o fereastr (Generate Menu) pe ecran.
Numele.programului generat se va specifica prin declanatorul Output File.
n fereastra de dialog Options deschis prin acionarea declanatorului Comment
Options pot fi precizate caracteristici suplimentare pentru meniu. Operaia de
generare va fi declanat la alegerea declanatorului Generate. Programul generat
poate fi executat prin comanda DO ca orice alt program FoxPro.
Pentru a realiza meniul propus ca exemplu se va proceda astfel:
- n fereastra de configurare se scriu textele opiuniior una sub alta:
Proceduri
Terminare
Informatii
- pentru a treia opiune (Text), din lista ascuns Result se alege optiunea Procedure
i se acioneaz declanatorul Create, iar n fereastra de editare alturat se
introduc comenzile:
Clear
text
Program meniu ca exemplu! Orice text
endtext
- pentru a doua opiune, din lista ascuns Result se alege optiunea Procedure i se
acioneaz decianatorul Create, iar n fereastra de editare atturat se infroduc
comenzile:
SET SYSMENU TO DEFAULT
CLOSE ALL
CLEAR
- pentru prima opiune din lista ascuns Result se alege optiunea Submenu apoi se
declaneaz Create, trecndu-se astfel la definirea submeniului Operaii:
- se scriu unele sub altele textele asociate opiunilor submeniului:
l<ntroducere
<Fi(tru
<Lista

<Etichet
- pentru opiunea "Introducere" din lista ascuns Result se alege opiunea
Command, iar n cmpul alturat se introduce:
DO introd.spr
- pentru opiunea filtru se procedez la fel:
DO filtru.qpr
- din lista ascuns asociat opiunii Raport se alege Procedure, dup care se
acioneaz declanatorul Create i n ferestra deschis se introduc comenzile:
CLEAR
REPORT FORM lista ENVIRONMENT
- la fel se procedeaz pentru opiunea "Eticheta" dup ce a fost ales opiunea
Procedure i declanatorul Edit:
CLEAR
LABEL FORM eticheta.lbx ENVIRONMENT
- pentru a specifica codul de iniializare al meniului se alege opiunea General
Options din submeniul Menu, iar din fereastra deschis se selecteaz comutatorul
Setup iar n aceast ferestr se scrie comanda:
CLEAR
- se revine n fereastra de configurare, acionnd butonul mouse-ului dup ce
cursorul a fost poziionat n acest fereastr;
- se salveaz meniul cu opiunea Save din submeniul File.
- se alege opiunea Generate din submeniul Program iar n fereastra deschis se
actioneaz declanatorul Generate.
Programul obinut, MENIU.MPR poate fi executat cu comanda:
DO meniu.mpr
o 1 septembrie 2008
o 0 comentarii
o nici o evaluare

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