Documente Academic
Documente Profesional
Documente Cultură
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
- 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+
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).
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;
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.
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.
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.
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 ] ]
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" . 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
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
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
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
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:
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
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
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
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:
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.
- declanatoarele - apar pe ecran sub forma unor butoane i sunt utilizate pentru a
declana anumite aciuni. Operaia declanat este afiat pe ecran:
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
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
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.
2
3
4
5
6
7
Cu linii orizontale
Cu linii verticale
Cu diagonale spre nainte
Cu diagonale spre napoi
Model special
Model special
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
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:
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
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.
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
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.
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);
- 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:
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
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.
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.
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
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).
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;
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).
n seciunea Table Fields sunt afiate numele cmpurilor disponibile prin alegerea
crora acestea vor fi mutate n seciunea Selected Output. Aceasta conine numele
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
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;
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;
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,
<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