Sunteți pe pagina 1din 34

Limbajul Visual FoxPro.

11.1 ConsideraŃii generale asupra limbajului


11.1.1 ConsideraŃii generale
Toate limbajele de programare au în general aceeaşi structură de
principiu a instrucŃiunilor. Sunt unele limbaje de programare care sunt
dedicate unui anumit tip de prelucrări de date, motiv pentru care dispun de
biblioteci de subprograme care asigură automatizarea anumitor faze de
prelucrarea datelor. De exemplu programele dedicate prelucrării matematice a
datelor de tip Matcad sau Matematica. Altele sunt pentru prelucrarea
informaŃiilor care sunt sub formă de baze de date, de tip FoxPro, Dbase,
Paradox sau SQL, etc. Alte programe sunt de tip general dispunând de
biblioteci de funcŃii şi asigurând o flexibilitate mare de prelucrare a
informaŃiei atât pe ecran pentru jocuri de exemplu C/C++ sau Cod maşină,
precum şi altele mai puŃin flexibile dar cu biblioteci de programe care
automatizează procesul de prelucrarea datelor de tip Pascal, Visual Basic,
Basic4GL, etc.

11.1.2 Alegerea limbajului de programare


DiferenŃa între programul sursă şi cel executabil este că în cazul
primului este necesară mai întâi instalarea şi pornirea programului în care se
scrie codul sursă, în timp ce pentru programul executabil acest lucru nu mai
este necesar el rulând direct fără a mai fi necesară lansarea programului sursă.
Acest lucru înseamnă că utilizatorul nu trebuie să deŃină licenŃă şi pentru
programul în care a fost realizat programul executabil el trebuind să deŃină
numai licenŃă pentru programul executabil pe care de fapt l-a achiziŃionat.
Alegerea între aceste tipuri de programe se face în faza de temă de
proiectare sau cel mai târziu la caietul de sarcini deoarece ulterior este foarte
greu de a se reveni în alegerea altui limbaj de programare acestea ne fiind
compatibile unul cu celălalt.
Datorită faptului că în domeniul economic se lucrează mult cu şiruri
de date organizate tabelar numite şi baze de date vom analiza numai
programele de acest tip şi anume FoxPro şi Visual Basic. Dacă primul este
specific bazelor de date, al doilea este de tip general putând fi folosite şi în
alte domenii decât prelucrarea bazelor de date.

11.2 Baze de date, mod de realizare a unui program tip


11.2.1 ConsideraŃii generale
Prin Baze de date se înŃelege un ansamblu de informaŃii organizate
tabelar care are următoarele proprietăŃi:
- este organizat, pe mai multe niveluri ale informaŃiei pe suportul
de informaŃie extern uzual hard disc;
- este coerent, corespunzând unor proprietăŃi restrictive specifice
de integritatea informaŃiei;
- este structurat, astfel încât să corespundă unui model de tip bază
de date;
- este accesibil, putând fi folosit de mai mulŃi operatori simultan
sau succesiv.
Realizarea unei baze de date urmăreşte aceeaşi paşi pe care i-am
prezentat la subcapitolul anterior. În acelaşi timp multe dintre elementele de
definire şi structură a elementelor de tip baze de date sunt similare cu cele de
la Capitolul 6.2 nu vom mai insista asupra lor. Şi în programul Visual FoxPro
sau FoxPro sunt folosite ca elemente de bază tabelele, relaŃiile dintre tabele,
formularele, rapoartele şi interogările. În acelaşi timp tipurile de date şi
variabile cu mici diferenŃe sunt identice cu cele de la Capitolul 9.1, motiv
pentru care nu vom mai insista asupra acestora. DiferenŃa provine din modul
de definire specific bazelor de date pentru acestea.

11.2.2 Program sursă


Pentru o mai bună înŃelegere a modului de folosire şi utilizare a
programului Visual FoxPro vom porni de la o aplicaŃie economică legată de
desfacerea produselor unei firme de producŃie. Pentru aceasta trebuie să avem
în vedere care sunt elementele economice folosite în această fază:
- primul şi cel mai important este factura de vânzare a produselor,
- al doilea avizul de transport al produselor,
- al treilea este bonul de livrare a produselor,
- în final pentru stingerea obligaŃiei create elementele de plată a
produselor comercializate chitanŃa, fila de CEC sau ordinul de
plată.
Circuitul economic este următorul: pe baza bonului de livrare a mărfii
produsele sunt eliberate din magazia de produse finite, după care cel care
efectuează transportul merge la departamentul economic de livrare marfă şi
ridică avizul de expediere a mărfii şi factura corespunzătoare. Transportă
marfa la client unde o descarcă şi se semnează exemplarul roşu şi verde de
către client, se stampilează, se întocmesc formalităŃile de plată a mărfii şi se
eliberează chitanŃa pentru suma de bani primită sau se primeşte ordinul de
plata sau fila CEC pentru suma de bani corespunzătoare valorii produselor
livrate semnată şi ştampilată de client pentru a fi încasată suma prin bancă.
Din analiza acestora pe fiecare element în parte distingem tipuri de
date şir similare pentru fiecare element în parte. Astfel pe factură avem un şir
de date care sunt tipărite iniŃial pe factură, aviz şi chitanŃă de identificare a
furnizorului produselor. Un al doilea şir de date sunt cele de identificare a
clientului. Se poate structura informaŃia pentru utilizare într-un tabel din care
de fiecare când este necesară aceasta să poată fi apelată. Tabelul are structura
din figura 11.1 În tabel pe prima linie cu culoare gri am trecut tipul de celulă
corespunzătoare informaŃiei şi lungimea acestei celule. Este foarte importantă
o alegere optimă pentru aceste celule pentru a fi satisfăcute cele două cerinŃe
importante, definirea cât mai clară şi exactă a elementului cât şi o lungime cât
mai mică şi egală pentru celule astfel încât să fie utilizată la maxim aceasta iar
mărimea bazei de date să fie cât mai mică. O lungime mare măreşte
dimensiunile bazei de date nejustificat de mult iar o lungime prea mică face ca
elementele să nu poată fi diferenŃiate între ele.
În partea centrală fiecare factură are un al doilea şir de date care pot fi
organizate în tabelul din figura 11.2. Se observă că elementul de legătură între
tabelul de clienŃi şi cel de facturi/avize este câmpul nume client. Aşa după
cum se poate presupune aceste celule trebuie să aibă obligatoriu aceeaşi
lungime şi să fie de acelaşi tip.
ClienŃi
Nr_f Nume_cl Localit Cod Adresa Telef Banca Cont
Num7 Text20 Text32 Num6 Text64 Num16 Text32 Text32
1234567 Popescu Timisoara 334561 Negrutzi, 0741122334 BCR 2511.1/ROL
nr.1 Timisoara

Figura 11.1 Structură tabel clienŃi


Facturi/Avize/Bon expediŃie
Nr_f Nr_av Nr_bon Data Nume_cl Valoare_ Valoare_ Valoare_
Totala Neta TVA
Num7 Num7 Num7 Dat zz/mm Text20 Num16 Num16 Num16
1234567 1234567 1234567 22/04 Popescu 1.190.000 1.000.000 190.000

Figura 11.2 Structură tabel facturi/avize/bon consum


Produse
Nr_pr Nume_p UM Cantitate Valoare TVA Nr_f
Num7 Text20 Text6 Num12 Num16 Num16 Num7
1234567 Furtun M 10 1.000.000 190.000 1234567

Figura 11.3 Structură tabel produse


Date transport
Nume Localitate Bulet Numar_m Nr_f Ora
Text32 Text20 Text10 Text12 Num7 Orahh/mm
Pop Ion Timisoara TM345689 TM08XXL 1234567 10/30

Figura 11.4 Structură tabel mijloc de transport


Stoc produse
Nume_p Valoare_Neta Cantitate_int Cantitate_ies Nr_bon Sold_n
Text20 Num16 Num16 Num16 Num7
Furtun 50 50
Furtun 100.000 10 1234567 40

Figura 11.5 Structură fişă magazie

Elementul central al facturii este cel care cuprinde elementele de


identificare fizică şi cantitativ valorică a acestora. În figura. 11.3 sunt
centralizate aceste elemente pentru fiecare produs în parte. Elementul de
legătură este câmpul număr factură.
În partea inferioară se găsesc elementele de identificare ale persoanei
şi mijlocului de transport cu care s-a efectuat transportul produselor. Acestea
vor fi centralizate în tabelul din figura 11.4 unde se observă că elementul de
legătură este tot câmpul număr factură.
Pe baza bonului de consum se descarcă la magazie fişa de magazie pe
produs care se debitează pe baza stocului din luna anterioară sau a bonului de
transfer din secŃia de producŃie. În figura 11.5 este prezentată structura unei
fişe de magazie unde se observă că câmpul de legătură este bonul de
expediŃie.
Din cele prezentate se observă că tabelul din figura 11.5 trebuie să fie
individualizat pe fiecare tip de act în parte. Acesta este şi rolul acestei faze
care de fapt face parte din schema logică fiind faza de definire a mărimilor
care intră în program.
Un pas important în această fază de realizare a schemei logice o
constituie definirea modului de interconectare a tabelelor mai sus definite şi
succesiunea de etape care asigură funcŃionarea programului. Pentru aceasta
vom reveni la începutul exemplului şi vom încerca organizarea fluxului
informaŃiilor astfel încât să se poată lucra cât mai uşor cu acest program.
O primă decizie care trebuie luată este cea de a crea la fiecare început
de lună fişele de magazie sau o dată pe an sau la începutul lucrului cu
programul dacă am început activitatea în mijlocul perioadei calendaristice a
anului.
Aceeaşi decizie trebuie luată şi în ce priveşte evidenŃa livrărilor de
produse şi a situaŃie livrărilor şi încasărilor pe clienŃi.
Din ambele puncte de vedere este cel mai bine ca să existe opŃiunea
de a avea evoluŃia stocurilor de produse zilnic, lunar sau pe o anumită
perioadă de timp, în timp ce pentru situaŃia clienŃilor este necesar ca să se
poată obŃine situaŃia la finele unei perioade calendaristice, iar situaŃia
livrărilor de produse pe produs sau pe facturi pe client într-o anumită perioadă
de timp. Cel care va lua decizia este beneficiarul de comun acord cu cel care
realizează programul. Aceste opŃiuni sunt cele de tipărire pe ecran şi respectiv
la imprimantă a acestor rapoarte. Pe baza acestor observaŃii a fost realizată
schema bloc cu legăturile dintre toate tabelele care fac obiectul bazei de date.
În figura 11.6 este prezentată schema relaŃională.
11.2.3 Depanarea şi finalizarea programului
Faza de terminare a programului se încheie cu închiderea tuturor
bazelor de date deschise, finalizarea rapoartelor la care se lucrează şi
închiderea lor şi oprirea funcŃionării programului.
ClienŃi Factură Aviz Bon exped
Nr_f Nr_f Nr_f Nr_av
Nume_cl Nr_av Nr_av Nr_bon
Localit Data Nr_bon Data
Cod Nume_cl Data Nume_cl
Adresa Val_Tot Nume_cl Val_net
Telef Val_net Val_net
Banca Val_TVA
Cont Produse Stoc_prod
Date_trans Nr_f Nr_pr
Nr_f Nr_bon Nume_pr
Nume Nr_pr Nr_bon
Bulet_s Nume_pr Data
Localit_s UM Val_net
Numar_m Cantit Cant_int
Ora Val Cant_ies
Val_net Sold_p
Val_TVA

Figura 11.6 Schema tabelară cu legăturile dintre tabele

11.3 Limbajul de programare Visual FoxPro


11.3.1 InterfaŃa generală cu Visual FoxPro
În cazul acestui program utilizatorul poate lucra în două variante
distincte:
- prima cu ajutorul meniului sistem pe bază de comenzi,
- a doua prin comenzi într-o fereastră separată.
Dacă prima dintre acestea este cea standard pentru sistemul
WINDOWS figura 11.8 permiŃând numai modificări ale ecranului de lucru de
tip restaurare, mutare, dimensiune, micşorare, mărire şi în final închidere
fereastră, a doua bară cea de meniu este mai complexă figura 11.9 fiind
prezentată pe etape funcŃie de rolul fiecărui element al meniului principal.
11.3.2 FuncŃiile meniului principal ale Visual FoxPro
Prima dintre acestea este cea denumită File, ea se poate lansa cu
grupul de taste Alt + F, moment în care se activează bara verticală cu
instrumentele specifice grupate pe 5 blocuri prezentate în figura 11.9:
- primul este cel specific operaŃiilor de lucru cu fişierele (fişier nou,
deschidere fişier existent, închidere fişier deschis),
- al doilea este cel de salvarea fişierelor,
- al treilea de import şi export de fişiere,
- al patrulea de tipărire şi expediere fişier către alte surse de salvare
diferite de cea a hard discului,
- al cincilea de ieşire din program şi închiderea ecranului de lucru.
În figura 11.7 se prezintă ecranul de lucru care apare la lansarea
programului de bază cu cele două ferestre cea de comandă mai mică dispusă
în partea dreaptă şi cea mare care este prevăzută la rândul ei cu o bară de titlu,
o bară de meniu şi o bară de unelte.

Figura 11.7 Ecranul principal Visual FoxPro


La apăsarea butonului New, sau a tastei N se va închide fereastra File
şi se va deschie o fereastră nouă cea din mijloc din figura 11.9 care se observă
că este împărŃită în două coloane, dintre care prima este la rândul ei împărŃită
în 5 blocuri orizontale structurate funcŃie de tipul acestora care sunt:
- proiect nou primul bloc,
- elemente noi de tip Bază de date, Tabel, RelaŃii, Legături,
Vizualizare, etc,
- blocul trei se referă la modul de introducere şi afişarea
rezultatelor de tip: Format, Raport şi Label,
- al patrulea se referă la programe şi clase,
- iar ultimul la fişiere text şi meniuri.

Figura 11.8 Comenzi ale barei de titlu Visual FoxPro


11.3.3 FuncŃia meniu File a Visual FoxPro

Figura 11.9 Comenzi ale barei de meniu funcŃiile FILE ale Visual FoxPro

Figura 11.10 Ecran principal creare tabel în Visual FoxPro


În figura 11.10 se observă ce se întâmplă la acŃionarea butonului fişier
nou tabelă. În partea stângă se deschide o fereastră care în partea de sus
permite alegerea locului în care să se salveze tabela bază de date cerată, în
partea de jos se introduce numele tabelei pentru cazul nostru client iar în
partea dreaptă se găsesc trei butoane de validare care asigură primul salvarea
tabelei, al doilea părăsirea acestei ferestre deoarece se dorea deschiderea altui
tip de fereastră, al treilea este cel de ajutor şi ultimul este un buton special
inactiv. În fereastra de comandă apare introdusă instrucŃiunea CREATE . La
apăsarea butonului salvare se deschide o nouă fereastră prezentată în figura
11.11 în care se poate introduce datele pentru tabelul client.

Figura 11.11 Ecran principal desenare tabel în Visual FoxPro iniŃial

Figura 11.12 Ecran principal desenare tabel în Visual FoxPro după introducere date

În figura 11.12 se vede cum arată tabelul complectat cu datele


preluate din schema logică. Se observă că s-a ales indexarea tabelului după
numărul de factură, lucru vizibil prin acŃionarea tabelului Indexes. Validarea
finală se ace prin apăsarea butonului OK.

Figura 11.13 Ecran principal şi de comandă pentru apelarea unui tabel proiectat

În figura 11.13 se observă cum se poate apela un tabel creat pentru a


fi vizualizat sau modificat atît pe varianta meniu căt şi pe cea a ferestrei de
comandă. Vom insista de această dată pe cea de-a doua variantă deoarece
prima este deja intuită.
Se observă că pentru apelarea unei tabele:
- mai întâi trebuie să se introducă comanda de creare iniŃială
generală CREATE,
- urmează instrucŃiunea de folosire USE urmată de calea pe care
trebuie să o urmeze programul pentru a găsi fişierul (OBS. Este
de dorit ca aceasta să fie scurtă şi pentru un program dat unică,
deoarece se vor tasta al fiecare apelare multe taste) şi
instrucŃiunea SHARED,
- urmează instrucŃiunea BROWSE LAST, care are rolul de a arăta
ultima structură a tabelei selectate,
- iar în final se activează instrucŃiune MODIFY STRUCTURE,
care are rolul de a activa comanda de modificare a structurii
iniŃial create.

11.3.4 FuncŃia meniu Edit şi Format a Visual FoxPro


FuncŃia meniu Edit se apelează direct cu succesiunea de taste Alt + E
este o funcŃie prezentată în figura 11.14 care asigură efectuarea a 6 blocuri de
instrucŃiuni de lucru în general în modul text:
- primul bloc cuprinde comenzile de ştergere sau revenire în cazul
unor operaŃii nedorite de ştergere,
- al doilea bloc se ocupă cu tipurile de instrucŃiuni de tăiere,
copiere, trecere normală sau specială şi ştergere,
- al treilea se ocupă cu selectarea tuturor elementelor,
- al patrulea bloc se ocupă cu căutarea în cadrul unui program a
unei lini, a căutării unice sau repetitive şi a înlocuiri unei comenzi
din program,
- al cincilea bloc grupează funcŃiile de inserare obiect şi legături,
- ultimul este cel de editare a proprietăŃilor.
Figura 11.14 Comenzi ale barei de meniu Edit şi Format din Visual FoxPro

FuncŃia meniu Format se apelează direct cu succesiunea de taste Alt


+ F este o funcŃie prezentată în figura 11.14 care asigură efectuarea a 3
blocuri de instrucŃiuni de lucru în general în modul text:
- primul bloc cuprinde comenzile de alegerea caracterului şi a
dimensiunilor acestuia,
- al doilea se referă la spaŃiul dintre linii fiind de tip selecŃie,
- ultimul fiind un set de instrucŃiuni speciale.

11.3.5 FuncŃia meniu Tools şi Program a Visual FoxPro


FuncŃia meniu Tools se apelează direct cu succesiunea de taste Alt +
T este o funcŃie prezentată în figura 11.15 care asigură efectuarea a 4 blocuri
de instrucŃiuni de apelare a interfeŃelor şi instrumentelor specifice:
- primul bloc cuprinde comanda de ajutor care este structurată pe
tipurile de fişiere prezentate în partea de definire a unui fişier nou
subcapitolul 3,
- al doilea bloc este cel care se referă la automatizarea procesului
de lucru cu programe prin crearea de macrouri, galerii de
componente şi în final rularea documentului activ,
- al treilea bloc care este unic se ocupă de faza de verificare a unui
program scris în Visual FoxPro din punct de vedere al
programului sursă,
- ultimul bloc care este de asemenea singular este cel care se ocupă
de setările implicite ale elementelor care constituie comenzile de
lucru şi lansare salvare ale interfeŃei.

Figura 11.15 Comenzi ale barei de meniu Tools şi Program din Visual FoxPro

FuncŃia meniu Program se apelează direct cu succesiunea de taste


Alt + P este o funcŃie prezentată în figura 11.15 care asigură efectuarea a 2
blocuri de instrucŃiuni de lansare şi oprire:
- primul bloc cuprinde funcŃiile care permit lansarea în execuŃie a
unui program, părăsirea, suspendarea execuŃiei acestuia sau
rezumarea execuŃiei lui,
- al doilea bloc unic este cel care are rolul de a verifica funcŃionare
programului.
Un rol aparte îl are aşa după cum am arătat sub funcŃia Options din
funcŃia meniu Tools. În figura 11.15.a se prezintă ecranul care apare ca
urmare a accesării acestei opŃiuni. Primul lucru se selectează tabela File
Locations după care va apărea o înşiruirea de instrucŃiuni şi locaŃii. Se va face
dublu clic cu mausul pe Default Directory moment în care se activează
următoarea fereastră Change File Location în care se bifează butonul
radio Use default directory după care prin apăsarea cu mausul a butonului de
căutare se activează o nouă fereastră cea numită Select Directory în care se
selectează calea în care se găsesc fişierele de lucru ale programului. După
validarea butoanelor Select, Ok, Set As Default, Ok se va realiza încărcarea
căii în care sunt salvate fişierele de lucru.

Figura 11.15.a Comanda barei de meniu Tools sub comanda Options


11.3.6 FuncŃia meniu Window şi Help a Visual FoxPro
FuncŃia meniu Window se apelează direct cu succesiunea de taste Alt
+ W este o funcŃie prezentată în figura 11.16 care asigură efectuarea a 3
blocuri de instrucŃiuni de setare a parametrilor ferestrelor de lucru:
- primul bloc cuprinde comanda de unică de aranjare a tuturor
ferestrelor într-o anumită ordine verticală, orizontală, etc.,
- al doilea bloc se ocupă de ascunderea, ştergerea sau succesiunea
ferestrelor,
- ultimul se ocupă de comanda ferestrelor şi sesiunea de date.
FuncŃia meniu Help se apelează direct cu succesiunea de taste Alt +
H este o funcŃie prezentată în figura 11.16 care asigură generarea
instrucŃiunilor specifice oricărui program WINDOWS.

Figura 11.16 Comenzi ale barei de meniu Windows şi Help din Visual FoxPro

11.3.7 Modul de lucru prin comenzi în Visual FoxPro


Acest mod de lucru este diferit de cel anterior permiŃând realizarea a
metode de abordare a utilizării programului total diferite:
- prima este de tip interpretare care asigură posibilitatea de a
introduce o comenzi şi prin validarea cu tasta Enter se verifică
corectitudinea acesteia. Acest mod de lucru permite:
o verificarea unor idei de program,
o efectuarea unor operaŃiuni manuale în baza de date,
o folosirea comenzilor SQL,
o apelarea unor comenzi necuprinse iniŃial în program
pentru generarea de rapoarte sau formulare,
o întreŃinerea structurii bazei de date,
o relansarea în execuŃie a unei comenzi anterioare prin
selectarea ei şi apăsarea tastei Enter.
o a doua este cea de a verifica programele scrise în cod
sursă deci un lucru de compilare a unui program,
subprogram sau funcŃie care se va utiliza ulterior într-un
program executabil. Succesiunea etapelor parcurse la
realizarea unui program este prezentată în figura 11.17
unde prima fază este cea de scriere a programului ( se
poate realiza prin scriere în Notpad sau cu editorul de
texte încorporat în program care asigură printr-o fereastră
specifică scrierea programului, lansarea acestuia se
realizează prin tastarea în fereastra de comanda a
comenzii MODI COMM ) şi salvarea acestuia cu
extensia .prg, după care urmează faza de compilare a
programului care se lansează din meniul sistem (DO)fiind
generat fişierul cu extensia .fxp pentru ca în final se
realizează fişierul cu extensia .exe, ( el se obŃine prin
lansarea din fereastra de comandă a instrucŃiunii RUN
TIME (BULID EXE)) acest stil permite:
o dezvoltarea programelor în vederea realizării unor
aplicaŃii flexibile,
o utilizarea tuturor comenzilor şi funcŃiilor speciale,
o utilizarea comenzilor din nucleul SQL,
o apelarea unor subprograme special create de programator
şi ne introduse în programul iniŃial.
Figura 11.17 Succesiunea fazelor de realizarea unui program în Visual FoxPro

OBS. Din meniul sistemului prin intermediul comenzii DO din


Program se poate lansa în execuŃie un program generându-se fişierul cu
extensia .fxp dar după executarea acestuia fişierul executabil nu se va păstra ci
el va fi şters. NU acelaşi lucru se întâmplă şi cu fişierul compilat.

11.3.8 InstrucŃiuni de crearea şi modificarea unei baze de date


În mod uzual elementul central al unei baze de date este cel al
realizării unui tabel.
El poate fi în primă fază creat pentru ca ulterior să poată fi dacă este
necesar modificat prin adăugare de câmpuri, modificare de câmpuri existente
ca şi dimensiune, tip sau respectiv ştergerea de câmpuri. Este foarte important
însă ca modificările să fie făcute înainte de a lansa în utilizare baza de date
deoarece orice modificare a tabelelor poate produce pierderea de date prin
ştergere sau lipsa unor date din tabele prin adăugare de câmpuri ulterioare.
Comanda pentru crearea unei tabele este:
- tastând CREATE produs prin care se creează o bază de date cu
extensia .dbf intrându-se în faza de editare a tabelei.
Obs. Câmpurile din Table Designer au anumite restricŃii specifice:
- cel de tip Name nu poate fi mai lung de 10 caractere începând cu
o literă,
- pentru cele de tip Type dacă sunt:
o Character nu au voie să fie mai luni de 254 caractere,
o Numeric nu mai lungi de 20 caractere inclusiv +/-,
o Logic maxim un caracter,
o Data maxim 8 caractere cu forma implicita ll/zz/aa,
format care se poate schimba prin lansarea comenzii SET
DATE TO,
o Memo admite implicit 10 caractere dar pot fi introduse
oricâte caractere.
- pentru cele de tip With se introduce valoarea numerică selectată
din schema logică tabelară,
- pentru cele tip Decimal se va introduce numărul de cifre după
zero dorite,
- pentru câmpul Index se poate selecta modalitatea de indexare a
tabelei la introducerea datelor în aceasta, lucru care permite din
start o ordonare a tabelei fără a fin necesară o sortare ulterioară a
acesteia.
Există însă şi alte modalităŃi de a crea o tabelă:
- crearea unei noi tabele cu structura unei tabele existente în
director, bucla de comandă fiind:

USE client
COPY STRUCTURE TO clientn

Varianta completă a instrucŃiunii este:

COPY STRUCTURE TO nume-tabel FIELDS listă-câmpuri


WITH CDX / WITH PRODUCTION DATABASES nume-bază de
date NAME nume-tabelă

unde: - nume-tabel este numele tabelei nou create;


- listă-câmpuri este lista câmpurilor din noua tabelă;
- nume-bază de date este numele bazei de date;
- nume-tabelă este numele tabelei.

Avantajul copierii structuri unei baze de date tabelară în altă bază de


date este dat de faptul că nu se pot face greşeli de dimensiuni de câmpuri sau
tip de caracter care la legarea tabelelor poate să producă erori. De aceea una
dintre metodele pe care le considerăm a fi bine a se utiliza este de a crea o
tabelă iniŃială unică cu toate câmpurile de legătură dintre tabele numită sursă
urmând ca după aceea prin copierea structurii acesteia în celelalte tabele şi
adăugarea câmpurilor ne comune să se evite eventualele erori mai sus
menŃionate.
Comanda pentru crearea unei baze de date este:
- CREATE DATABASE produs prin care se creează o bază de
date cu extensia .dbc
Comanda pentru modificarea unei baze de date este:
- MODIFY STRUCTURE prin care se deschide o fereastră de
dialog care permite modificarea structurii prin selectarea unei
baze de date tip tabelar. Există două modalităŃi:
o prima prin folosirea buclei program şi alegerea tabelului,

USE
MODIFY STRUCTURE

o a doua pe baza buclei când ştim tabelul,

USE client1
MODIFY STRUCTURE

11.3.9 Deschiderea şi închiderea unei baze de date


Această operaŃie este necesară pe întreg parcursul lucrului cu bazele
de date uzual de tip tabelar. Aceasta face parte din cadrul manevrelor de
manipulare a bazelor de date.
Figura 11.18 Adăugarea unei înregistrări cu comanda APPEND

Prima dintre acestea este cea de adăugare de noi înregistrări într-o


bază de date nou creată sau una în care s-au mai încărcat date, instrucŃiunile
fiind cele de mai jos:

USE client
APPEND

În Acest caz se deschide o nouă fereastră care este prezentată în


figura 11.18 cu activarea primului câmp liber din tabel.
A doua este cea de modificare a unor înregistrări dintr-o tabelă
existentă. Există mai multe instrucŃiuni, fiecare dintre acestea având anumite
caracteristici:
- prima dintre acestea este comanda CHANGE care permite
modificarea unei tabele cu ajutorul unei ferestre figura 11.19 de
editare în interiorul căreia cu ajutorul cursorului luminos şi a
săgeŃilor sus jos se poate ajunge la înregistrarea care se doreşte a
se modifica . Se poate modifica însă şi o anumită înregistrare caz
în care trebuie specificată de exemplu câmpul Nr_f (număr
factură) caz în care instrucŃiunea este următoarea:

CHANGE FIELDS Nr_f


Această variantă are un dezavantaj că trebuie reŃinută denumirea
câmpurilor

Figura 11.19 Modificarea unei înregistrări cu comanda CHANGE

- a doua comandă este cea BROWSE care asigură afişarea şi


editarea înregistrărilor dintr-o tabelă situaŃie prezentată în figura
11.20, în care se observă că informaŃia este organizată pe
orizontală pentru fiecare înregistrare şi nu pe verticală ca în cazul
anterior pentru prima comandă. În capul tabelului se găsesc
denumirile câmpurilor şi succesiv fiecare înregistrare. Cu ajutorul
săgeŃilor se poate realiza deplasarea pe verticală sau orizontală,
iar cu pg_up sau pg_dn între pagini. Şi pentru această comandă
există posibilitatea modificării unui anumit câmp ca şi pentru
cealaltă comandă.
Figura 11.20 Modificare unei înregistrări cu comanda BROWSE

- a treia variantă de înlocuire a datelor este comanda REPLACE


care modifică înregistrările tabelei curente prin înlocuire cu datele
conŃinute în câmpul de înlocuire. În figura 11.21 este prezentată
fereastra de comandă şi la partea superioară prin folosirea
comenzii BROWSE rezultatul înlocuirii numărului de factură
pentru toate înregistrările cu valoarea 1. Liniile de comandă
utilizate sunt cele de mai jos:
Figura 11.21 Modificare prin înlocuire a înregistrărilor cu comanda REPLACE

USE client
REPLACE ALL Nr_f WITH 1

Rezultă că această instrucŃiune poate înlocui datele dintr-un tabel


cu valorile dorite noi.
Din punctul de vedere al comenzilor ca şi structură completă acestea
au următoarea sintaxă:

CHANGE FIELDS listă-câmpuri scope FOR expL1 WHILE


expL2 FONT expC1, expN1 STYLE expC2 FREEZE camp KEY
expr1, expr2 LAST LEDIT REDIT LPARTITION NOAPPEND
NOCLEAR NODELETE NOEDIT NOMODIFY NOLINK NOMENU
NOOPTIMIZE NORMAL NOWAIT PARTITION expN2 PREFERENCE
expC3 REAT SAVE TIMEOUT expN3 TITLE expC4 VALID :F
expL3 ERROR expC3 WHEN expL4 WIDTH expN4 WINDOW
nume-fer1 IN WINDOW nume-fer2 / IN SCREEN COLOR
SCHEME expN5 / COLOR lista-culori

unde: - listă-câmpuri afişează numai câmpurile din listă;


- scope este clauza care defineşte condiŃiile de selecŃie;
- expL1, expL2 sunt condiŃiile pentru care expresiile sunt
adevărate;
- camp permite modificarea la un singur câmp şi afişarea acestuia;
- exp reprezintă expresii sau condiŃii care trebuie îndeplinite;
- nume-fer reprezintă activată în fereastra iniŃială;
- lista-culori stabileşte lista de culori.

BROWSE FIELDS listă-câmpuri FONT expC1, expN1 STYLE


expC2 FOR expL1 FREEZE camp KEY expr1, expr2 LAST
LEDIT REDIT LPARTITION NOAPPEND NOCLEAR NODELETE
NOEDIT NOMODIFY NOLINK NOMENU NOOPTIMIZE NORMAL
NOWAIT PARTITION expN2 RES PREFERENCE expC3 TITLE
expC4 SAVE VALID expL2 ERROR expC5 WHEN expL3 WIDTH
expN5 WINDOW nume-fer1 IN WINDOW nume-fer2 / IN
SCREEN COLOR SCHEME expN5 / COLOR lista-culori
unde: - listă-câmpuri afişează numai câmpurile din listă;
- scope este clauza care defineşte condiŃiile de selecŃie;
- expL1, expL2 sunt condiŃiile pentru care expresiile sunt
adevărate;
- camp permite modificarea la un singur câmp şi afişarea acestuia;
- exp reprezintă expresii sau condiŃii care trebuie îndeplinite;
- nume-fer reprezintă activată în fereastra iniŃială;
- lista-culori stabileşte lista de culori.
Comenzile de închidere sunt de mai multe tipuri:
- închide toate tipurile de fişiere: CLOSE ALL;
- închide fişierele de tipul definit: CLOSE ALTERNATE;
- închide toate tabelele: CLOSE DATABASE;
- închide toate fişierele tip format: CLOSE FORMAT;
- închide toate fişierele index: CLOSE INDEX;
- închidere fişiere de proceduri: CLOSE PROCEDURE.

11.3.10 Comenzi de gestionare a fişierelor în VisualFoxpro


Lucrul cu fişiere se bazează pe mai multe tipuri de operaŃii:
- copiere: Copy file nume to nume1,
- redenumire: Rename nume to nume1,
- ştergere: Erase nume, sau Delete file nume,
- afişarea conŃinutului unui fişier: Type nume to printer,
Type nume to file nume1,
- afişarea conŃinutului unui director: Dir C:/ to printer.
Un set special de lucru este cel de adăugare de înregistrări în tabele.
Sintaxa comenzii este:

APPEND FROM nume-fişier ? FIELDS listă-câmpuri FOR expr-


log TYPE DELIMITED WITH TAB / WITH BLANK / WITH
delimitator DIF

unde:
- nume-fişier este numele fişierului de unde se importă datele;
- ? va determina apariŃia ferestrei de dialog Directory din care se
va alege tabela sursă;
- listă-câmpuri reprezintă câmpurile ale căror valori vor fi
adăugate în tabela nou creată;
- expr-log este condiŃia de realizare a importului;
- TYPE defineşte extensia fişierului sursă care poate fi:
o DIF extensie folosită de Visicalc;
o XLK extensie folosită de Microsoft Excel ver.2.0;
o PDOX extensie folosită de Paradox, etc.
O altă variantă este cea de APPEND GENERAL. Este de următoarea
structură:

APPEND GENERAL câmp-general FROM nume-fişier DATA CEXp


LINK CLASS clasă_OLE

unde:
- câmp-general conŃine numele câmpului de tip general care va fi
memorat;
- nume-fişier este fişierul din care se extrage conŃinutul unui obiect
OLE;
- clasă_OLE specifică în mod explicit clasa de obiecte OLE.

De exemplu importul unei foi de calcul EXCEL într-un câmp de tip general:

APPEND GENERAL OBIECTOLE FROM “FOAIE1.XLC” CLASS


EXCELCHART

O altă comandă de este cea de adăugare a unei noi înregistrări într-o


tabelă care este activă. Dacă lucrează mai mulŃi utilizatori simultan, în
momentul activării introducerii datelor tabela este blocată pentru alŃi
utilizatori, urmând ca aceştia să o poată activa numai după terminarea
înregistrării. Sintaxa este:

APPEND FROM ARRAY var-matrice FOR expr-log FIELDS listă-


câmpuri / FIELDS LIKE şablon / FIELD EXCEPT şablon

unde:
- var-matrice este numele masivului care va alimenta tabela;
- expr-log este condiŃia de realizare a importului;
- listă-câmpuri reprezintă câmpurile ale căror valori vor fi
adăugate în tabela nou creată;
- expr-log este condiŃia de realizare a importului;

11.3.11 Ştergerea datelor dintr-o bază de date


Este o operaŃie importantă ea putând anula o înregistrare greşit
introdusă de exemplu s-a emis un aviz dar pe el s-a greşit o valoare constată la
faza de facturare, în acest moment avizul se restituie integral se anulează prin
barare înregistrarea făcută se şterge. Nu acelaşi lucru se întâmplă dacă o
factură a fost înregistrată în contabilitate într-o anumită zi şi la o altă dată se
constată greşeala. În acest moment se emite o factură în roşu care anulează
factura iniŃială urmând ca apoi să se emită o factură nouă.
Există mai multe variante de ştergere funcŃie de scopul urmărit:
- prima dintre acestea este comanda DELETE. Ea asigură
marcarea articolelor în vederea ştergerii. Dacă cumva se doreşte
recuperarea lor se poate folosi comanda RECALL. Ştergerea
fizică se face după comanda DELETE prin folosirea comenzii
PACK.
- a doua variantă este cea care este dată de comanda ZAP. Aceasta
asigură ştergerea fizică a tuturor articolelor din tabela curentă. Ea
este echivalentă cu comanda DELETE ALL urmată de comanda
PACK dar ca durată de timp este mai scurtă deoarece nu mai
există pasul intermediar de marcare şi pasul de verificare
înregistrare cu înregistrare dacă este marcată sau nu pentru
ştergerea definitivă.
- a treia variantă este cea care asigură ştergerea tuturor tabelelor
care se realizează cu comanda DELETE FILE.
Fişierele şterse cu această comandă nu mai sunt recuperabile!!!.

- a patra variantă este cea dată de comanda SET DELETED


ON/OFF care se foloseşte pentru a arăta dacă comenzile marcate
vor fi şterse sau nu.
11.3.12 Sortarea, ordonarea, indexarea unei baze de date
Una dintre fazele cele mai importante ale lucrului cu o bază de date
este cea de sortare şi ordonare după un anumit criteriu. Această fază poate
uşura foarte mult lucru cu o bază de date în vederea găsirii unei informaŃii sau
grup de informaŃii. Lucrul este cu atât mai necesar deoarece încărcarea datelor
într-o bază de date se face în mare măsură aleatoriu fără a se face o ordonare a
actelor.
Sortarea unei tabele se face cu ajutorul comenzii SORT. Ea se poate
realiza la nivelul unui câmp sau la nivel de tabel. Pentru sortarea la nivelul
unui câmp instrucŃiunile de comandă care sunt necesare sunt:

USE client
SORT ON Nume_cl /A TO client1

La nivel de câmp se observă că după apelarea tabelei care se doreşte


a se sorta se trece la introducerea liniei de comandă care are mai multe
caracteristici. Prima este că după instrucŃiunea tipică SORT ON se va
introduce numele câmpului care se va supune procesului de sortare urmat de
unul din cele două moduri de sortare a câmpului:
- crescător comandă simbolizată cu /A,
- descrescător comandă simbolizată cu /D.
Urmează introducerea numelui nou al tabelei în care se va trece rezultatul
tabelei sortate. Rezultă deci că avem un avantaj că prin folosirea acestei
comenzi se găsesc în calculator ambele tabele. Ştergerea tabelului rezultat
după sortare se poate face cu seria de comenzi:

DELETE FILE client1


PACK

Tabelul iniŃial
Sortarea tabelului după mai multe câmpuri se face prin selectarea
succesivă a ordini după care să se realizeze sortarea în modul dorit. Liniile de
comandă sunt:

USE client
SORT ON Nume_cl /A, Nr_f /A TO client1

În această situaŃie tabelul fiind sortat ascendent după numele


clientului şi pentru acelaşi client în ordinea crescătoare după numărul de
factură.

Figura 11.21 Sortarea tabelului client după câmpul Nume_cl cu comanda SORT

Un alt mod de sortare este cel după o anumită condiŃie. Liniile de


comandă folosite sunt:

USE client
SORT ON Nume_cl /A TO client1 FOR gigi

O altă modalitate de ordonare a unei tabele se poate realiza cu ajutorul


comenzii INDEX care este o comandă de indexare a unui tabel. Pentru un
tabel cu dimensiuni mari comanda de sortare durează mult motiv pentru care
se recomandă sortarea prin indexare. Un alt dezavantaj al sortării este că după
orice introducere de date este necesară o nouă sortare care implică continuu ca
spaŃiul folosit să crească dublu faŃă de dimensiunile iniŃiale. Comanda de
indexare se poate folosi numai pentru un câmp. O modalitate eficientă de
lucru este şi aceea de a defini la începutul lucrului cu tabele la faza de creare a
tabelei o cheie de indexare pe criteriul dorit în acest moment apare un fişier
suplimentar cu extensia .cdx şi acelaşi nume cu cel iniŃial. Acest lucru face ca
baza de date să fie indexată automat la introducerea datelor. Pentru buna
funcŃionare a comenzii INDEX este necesară setarea comenzii SET TALK
la valoarea ON. Linia de comandă este următoarea:

USE client
INDEX ON Nume_cl TO client1.idx

O altă modalitate este cea de indexare după mai multe câmpuri a cărei
linii de comandă sunt prezentate mai jos:

USE client
INDEX ON Nume_cl +Localit TO client1.idx UNIQUE

Indexarea se face după nume client şi localitate simultan fără a admite


înregistrări duble. Deoarece comanda nu ştie să lucreze în paralel cu variabile
text şi numerice pentru a transforma o variabilă numerică în una text se va
folosi instrucŃiunea STR(Nr_f, 7).
O altă modalitate este indexarea după un anumit criteriu dat prin
intermediul comenzii FOR. De exemplu se va face selectarea după criteriul
Localiat Timişoara. Liniile de comandă sunt:

USE client
INDEX ON Nume_cl FOR Localit=Timisoara TO client1.idx
?? NDX(1) && Afişează primul fişier indexat
? RECOUNT() && Afişează numărul de înregistrări indexate
CLOSE ALL

Se observă apariŃia faŃă de variantele anterioare a trei linii


suplimentare. Prima aşa după cum se observă şi în partea dreaptă din mesajul
text de ajutor afişează numele primului fişier indexat, operaŃie necesară pentru
a determina apoi numărul de înregistrări indexate în linia a patra din setul de
instrucŃiuni. În final sunt închise toate tabelele deschise în linia de instrucŃiune
cinci.
OBS.
- Indexarea după câmpuri numerice multiple poate să nu ofere
acelaşi rezultat dorit,
- Probleme pot să apară şi dacă se uită să se activeze un anumit
tabel index şi se folosesc instrucŃiuni care lucrează numai cu
tabelele index active.

11.3.13 InstrucŃiuni de acces la o bază de date


Un alt set de instrucŃiuni importante este cel de acces la date care sunt
cuprinse în tabel. Există comenzi care lucrează numai cu tabele indexate şi
respectiv comenzi care lucrează numai cu tabele indexate.
Prima dintre acestea este comanda GO. Ea poziŃionează punctul de
acces în tabel pe înregistrarea fizică specificată. Liniile de comandă sunt:

USE client
GO 3

În acest caz se poziŃionează cursorul pe înregistrarea a treia din tabelă.


Pentru a vedea pe care înregistrare este poziŃionat cursorul se poate
folosi instrucŃiunea RECON(). Se poate realiza şi poziŃionarea pe prima
înregistrare din tabel cu instrucŃiunea GO RECON(0).
O altă comandă care se poate utiliza este SKIP care permite
poziŃionarea cursorului pe o anumită înregistrare faŃă de cea curentă. Linia de
comandă este:

USE client
SKIP-3 IN client

Cursorul se va poziŃiona pe înregistrarea situată cu trei linii înaintea


celei curente.
O altă comandă este cea LOCATE. Ea permite căutarea într-o tabelă
pentru o anumită condiŃie fără a fi necesară indexarea tabelului. Sistemul
găseşte prima înregistrare care satisface condiŃia impusă şi abandonează
căutarea celorlalte chiar dacă satisfac condiŃia. Liniile de comandă sunt:

USE client
LOCATE FOR Nr_f’=1234
O altă serie de comenzi este cea SEEK şi FIND. Aceste comenzi

USE client
INDEX ON Nr_f TO IDBEN
FIND 1234
DISP
CLOSE ALL

lucrează numai cu fişiere indexate. Liniile de comandă pentru aceste


instrucŃiuni sunt:

USE client
INDEX ON Nr_f TO IDBEN
W=1234
SET INDEX TO INDEN
SEEK W sau SEEK 1234
DISP
CLOSE ALL

11.3.14 InstrucŃiuni de vizualizare a datelor dintr-o bază de date


În afară de crearea, căutarea şi prelucrarea datelor dintr-o tabelă mai
avem şi afişarea înregistrărilor dintr-o tabelă. Există două modalităŃi. Prima
este comanda LIST care permite vizualizarea tuturor înregistrărilor şi nu face
pauză pentru liste mai mari de un ecran şi nu sunt afişate înregistrările
marcate pentru ştergere dacă comanda SET DELETED este setată pe ON.
Comanda specifică este de mai multe tipuri:
- pentru afişarea structurii tabelei:

USE client
LIST STRUCTURE

- pentru

USE client
LIST
11.3.15 Sintaxa comenzilor de configurarea mediului Visual
FoxPro
Există o serie de comenzi care se recomandă să fie setate la începerea
lucrului cu programul de calcul. Rolul acestora este de a asigura funcŃionarea
corespunzătoare a programului.
Primele sunt cele de starea sistemului (cu litere îngroşate este
reprezentată comanda, iar cu On sau Off modul de lucru cuplat sau decuplat):
- sunet: Set Bell On/Off,
- ceasul: Set Clock On/Off,
- bara de stare: Set Status Bar On/Off,
- clipirea ecranului: Set Blink On/Off,
- afişare rezultat comenzi: Set Talk On/Off,
- setare director curent: Set Default to C:/,
- setare afişare ceas pe ecran: Set clock to [x,y],
- setare afişare oră pe ecran: Set Hours to [12/24],
Pentru configurarea tipului de date:
- număr de zecimale: Set Decimals to [2], stabileşte numărul de
zecimale la 2,
Pentru controlul ieşirilor de informaŃii:
- ieşirea către ecran: Set Console On/Off,
- ieşirea către imprimantă: Set Printer On/Off,
- ieşirea spre un fişier: Set Printer to [nume fi;ier]

11.3.16 ModalităŃi de legare a tabelelor dintr-o bază de date


Legăturile servesc la manipularea informaŃiilor între tabelele unei
baze de date. Această manipulare se poate realiza atât la nivelul limbajului de
programare, cât şi la nivelul instrucŃiunilor printr-o comandă specială.
La nivelul programului se face prin scrierea unei proceduri care este
specifică limbajului de programare.

11.3.17 Realizarea programelor în Visual FoxPro


Limbajul de programare specific conŃine comenzi la apelarea cărora
se efectuează realizarea automată a anumitor faze de prelucrare a tabelelor de
date.
Crearea unui program sursă se face prin intermediul instrucŃiunii
MODIFY COMMAND, care apelează editorul de texte propriu al sistemului.

11.3.18 Tipuri de extensii ale limbajului Visual FoxPro


Există câteva extensii standard recunoscute de sistem:
• .dbf – tabele bază de date;
• .dbc – fişier bază de date;
• .prg – fişier de comenzi program;
• .fpt – fişier care conŃin câmpuri memo;
• .idx – fişier care conŃine indecşi;
• .cdx – fişier care conŃine indecşi;

Bibliografie
1. Mirela Munteanu, ş.a. – Dezvoltarea aplicaŃiilor cu baze de
date în Visual FoxPro. Editura BIC ALL, Bucureşti, 2001.
2. Dima Gabriel şi Mihai – Fox 2.7 sub Windows Editura Teora,
Bucureşti, 2002.