ALTE DOCUMENTE
|
|||||
INSTRUCTIUNI SI STRUCTURI DE PROGRAMARE IN FOXPRO
1.1. Crearea bazei de date
Crearea unei baze de date se poate face cu comanda Create database, care are urmatoarea sintaxa:
CREATE DATABASE [<nume_baza_de_date>l?]
unde:
corespunzator bazei de date are extensia .DBC;
va fi creata.
La crearea bazei de date se face automat si deschiderea ei.
Pentru modificarea bazei de date comanda este MODIFY DATABASE
1.2.Crearea tabelelor
Pentru deschiderea si utilizarea unei tabele se utilizeaza comanda:
USE [nume_tabela]
Pentru inchiderea tuturor tabelelor:
USE sau CLOSE ALL
Crearea tabelelor se poate realiza utilizand comanda CREATE, submeniul File, optiunea
New sau prin intermediul comenzii CREATE TABLE din nucleul SQL.
Sintaxa comenzii este:
CREATE [<nume-tabela> I?]
Alte comenzi utilizate in crearea tabelelor
Pentru crearea unei tabele se pot utiliza si comenzile COPY STRUCTURE TO si
CREATEFROM
Comanda COPY STRUCTURE EXTENDED TO permite crearea unei noi tabele, prin copierea structurii sau a anumitor campuri dintr-o tabela activa din zona de lucru curenta.
Sintaxa comenzii este:
COPY STRUCTURE TO <nume-tabela> [FIELDS<lista-campuri>
[WITH] CDX I[WITH] PRODUCTION] DATABASES <nume-baza de date>
[NAME]<nume-tabeIa>
unde;
1.3. Modificarea structurii de date a tabelelor, deschiderea si Inchider 232f54c ea unei tabele
Deschiderea si Inchider 232f54c ea unei tabele
a) Deschiderea unei tabele se face cu comanda USE,care are urmatoarea sintaxa:
USE [[Database Name !]table] SOLViewname I?] [INnWerkArea I CTableAlias]
Ion lina][Admin][Again][NOREOUERYInData Session Number]][NODATA]
[INDEX IndexFilelist] ?[ORDER [nlndexNumber I idx FileName]I [TAG] TagName (Of CDX FileName][ASC I DES][ALIAS CTable-Alias][Exclusive][SHARED][Noupdate]
unde:
aparea fereastra de dialog Open file cu o lista de tabele din care se alege tabela dorita. Daca se foloseste USE fara alte argumente si tabela e deschisa in aria de lucru
selectata, tabela va fi inchisa. O tabela este inchisa daca in aceeasi zona de lucru se
deschide o alta tabela;
tabela. Dad se foloseste USE fara alte argumente, dar incluzand IN <zona-de-Iucru>,
tabela din zona de lucru specificata va fi inchisa;
ordine crescatoare sau descrescatoare;
contine maxim10 caracteresi trebuie sa inceapa cu o litera;
Exemplu
Sa se deschida tabela PRODU In zona A si tabela BENEF In zona B si apoi sa se verifice.
SELECT A
USE PRODU
SELECT B
USE BENEF
? USED (A)
? USED (B)
USE PRODU
USE BENEF in 3
USE ?
USE PRODU ALIAS P
USE PRODU
&& se deschide tabela BENEF zona de lucru 3
&& se atribuie tabelei PRODU alias-ul 'P'
d) Inchiderea unei tabele se face si cu comanda CLOSE. Comanda CLOSE Inchide diferite tipuri de fisiere. Ea are urmatoarea sintaxa:
CLOSE ALL
CLOSE ALTERNATE
CLOSE DATABASE
CLOSE FORMAT
CLOSE INDEX
CLOSE PROCEDURE
unde:
zona de iucru (1);
CLOSE INDEX Inchide fisierele index deschise pentru zona de lucru curenta.
PROCEDURETa <nume.fisier>.
Modificarea structurii logice a unei tabele se poate face cu ajutorul comenzii MODIFY STRUCTURE.
MODIFY STRUCTURE
Vizualizarea structurii logice se poate realiza utilizand comanda DISPLAY STRUCTURE sau LIST STRUCTURE
2. Accesul la date
2.1. Adaugarea de noi inregistrari in tabele
Utilizarea comenzilor de tip APPEND
Adaugarea de noi inregistrari in tabele se poate face prin tastarea directa a datelor sau
preluarea lor din tabele, fisiere, masive si variabile de memorie. Aceasta se realizeaza cu
ajutorul comenzilor APPEND, APPEND FROM si APPEND FROM ARRAY.
Comanda APPEND
Comanda APPEND permite adaugarea la sfarsitul tabelei selectate a unei inregistrari vide
fara posibilitati de editare. De asemenea, permite deschiderea unei ferestre pentru introducerea de inregistrari la sfarsitul tabelei.
Sintaxa comenzii este:
APPEND [BLANK][IN nWorkArea I CTableAlias]
Sintaxa comenzii este:
APPEND FROM <nume-fis> I? [FIELDS <lista-campuri>]I
[FOR<expr-log>][TYPE][DELIMITED][WITH TABIWITHBLANKIWIDTH
<delimitator>
unde:
Exemple
1) Sa se adauge la sfarsitul tabelei CONTR datele din campul CODP al tabelei PRODU. La sfarsit sa se afiseze tabela CONTR.
USE CONTR
APPEND FROM PRODU FIELDS CodP
BROWSE
21Sa se adauge la sfarsitul tabelei CONTR datele din campul CODP al tabelei PRODU
care satisfac conditia CODP <> 1.
USE CONTR : APPEND FROM PRODU FIELDS CODP FOR CODS <> 1
BROWSE
2.2 Modificarea inregistrarilor dintr-o tabela
Modificarea datelor se face cu ajutorul comenzilor si ferestrelor CHANGE. BROWSE si
REPLACE.
Comanda CHANGE permite modificarea datelor unei tabele ptin intermediul ferestrei de
editareChange.
Comanda BROWSE este una dintre cele mai utilizate comenzi pentru afisarea si editarea
inregistrarilor dintr-o tabela.
Comanda REPLACEmodifica inregistrarile tabelei curente prin inlocuirea datelor
in <campl >, <camp2> cu cele din expresia <expr1>, <expr2> REPLACE ctioneaza asupra inregistrarii curente din zona de lucru selectata.
Comanda REPLACEare urmaoarea sintaxa:
REPLACE <camp1> WITH <expr1> [ADDITIVE][<camp2> WITH] [<scape>]
[FOR <expL 1>][WHILE <expL2> IN nWorkArea I CTableAlias] INOOPTIMIZE] [,<camp2> WITH<expr2> [ADDITIVE]].
Unde:
<scope>, FOR<expL1>, WHILE<expL2> definesc conditiile de selectie ale inregistrarilor ce se actualizeaza. Vor fi actualizate inregistrarile care indeplinesc conditia <scope> si pentru care expresiile logice <expL1> si <expL2> din optiunile WHILE si FOR sunt adevarate. Absenta acestor clauze permite actualizarea tuturor inregistrarilor.
<camp1> WITH<expr!> inlocuieste datele din <campl > cu datele din <exprl >. In cazul campurilor numerice pentru care valoarea expresiei din clauza WITH depaseste lungimea campului, partea zecimala va fi trunchiata, dupa care este rotunjita. Daca in continuare valoare expresiei depaseste lungimea campului, in locul continutului campului vor fi introduse notatiile stiinlifice. Daca nici prin aceasta operatie problema nu a fsot rezolvata, continutul campului va fi inlocuit cu (*).
ADDITIVE infiuenteaza inlocuirile numai in campurile memo. Folosirea optiunii
permite adaugarea informatiilor in continuarea celor existente in campul memo.
(privind toate comenzile ce beneficiaza de tehnologia Rushmore) se foloseste
comanda SETOPTIMIZE.
Exemple
USE PRODU
REPLACE ALL CODP WITH 1
2.3. Stergerea inregistrarilor dintr-o tabela
Stergerea inregistrarilor unei tabele se poate face logic sau fizic. Realizarea operatiei de
stergere se face cu ajutorul comenzilor sau al meniului sistem.
Comanda DELETE marcheaza logic articolele pentru stergere. Inregistrarile marcate pentru stergere pot fi recuperate folosind comanda RECALL.
Comanda DELETE are urmatoarea sintaxa:
DELETE [<scope>][FOR<expI1>][WHILE<expI2>] [NOOPTIMIZE]
unde:
cat sunt adevarate aceste expresii. Absenta acestor clauze marcheaza implicit pentru
stergere articolul curent.
1) Sa se stearga logic si fizic inregistrarile ce indeplinesc conditia CODB = 100, din tabela CONTR.
USE CONTR
DELETE FOR CODB = 100
BROWSE
PACK
BROWSE
Utilizarea comenzii PACK
Comanda Pack se foloseste pentru stergerea fizica a inregistrarilor care anterior au fost
marcate logic. Dupa executarea unei comenzi PACK inregistrarile sterse nu mai pot fi recuperate.
Este folosita si pentru reducerea dimensiunii unui fisier memo asociat tabelei.
Cand se executa comanda PACK, toate inregistrarile care nu sunt marcate pentru stergere
sunt copiate intr-un fisier temporar. Executarea comenzii PACK este completa, daca tabela originala este stearsa de pe disc, iar tabela temporara este redenumita cu numele original Prin apasarea tastei Esc se intrerupe executia comenzii PACK. In acest caz, tabela temporara este stearsa, iar tabela originala ramane neschimbata.
Comanda PACK are urmatoarea sintaxa:
PACK[MEMO] [DBF]
unde:
Dupa executarea instructiunii PACK,utilizatorul este informat asupra numarului de articole ce se recopiaza in tabela activa.
Exemple
Sa se stearga fizic primele trei inregistrari din tabela BENEF.
USE BENEF
GO TOP
DELETE NEXT 3
PACK
Comanda ZAP sterge fizic toate articolele din labela curenta. Eaeste echivalenta cu comanda DELETE ALL,urmata de comanda PACK, dar este mult mai rapida.
In cazul in care comanda SET SAFETY este ON, tabela este protejata, utilizatorul fiind
avertizat inaintea executarii unor comenzi care ar putea distruge sau rescrie inregistrarile din tabela. Pentru aplicatiile testate, care functioneaza corect, se recomanda utilizarea optiunii (OFF).Articolele sterse cu ZAP nu pot fi reactivate cu RECALL.
Comanda are urmatoarea sintaxa:
ZAP [IN nWorkArea I CtableAlias]
Exemplu
Sa se stearga fizic continutul tabelei BENEF.
USE BENEF
ZAP
3.2. Ordonarea datelor
Exploatarea unei tabele implica ordonarea datelor continute de aceasta dupa diferite criterii.
In general, incarcarea datelor se realizeaza intr-o maniera aleatorie, iar actualizarea se face dupa necesitati obiective, ce nu coincid intotdeauna cu ordinea din tabele, necesara la exploatare.
Ordonarea inregistrarilor in tabele se realizeaza prin comenzile SORT si INDEX. Rezultatele sunt aceleasi, dar procesul sortarii prezinta o serie de dezavantaje. Sortarea si indexarea se executa la nivel de comanda si mai putin prin intermediul meniului sistem, datorita vitezei de executie si a faptului ca la sortarile si indexarile complexe este mai comoda utilizarea comenzilor.
3.2.1. Sortarea tabelelor
Cand sistemul FoxPro sorteaza inregistrarile unei tabele va fi creata pe disc o tabela noua
cu nume diferit. Aceasta va contine aceleasi inregistrari cu ale tabelei originale, ordonate
dupa un criteriu specificat. Pentru a efectua sortarea este necesar un spatiu disponibil pe disc de minim trei ori dimensiunea tabelei ce va fi sortata.
Sortarea se realizeaza prin intermediul comenzii SORT,
a) Sortarea dupa un camp prin intermediul comenzilor
Secventa de comenzi folosita In mod normal pentru sortare este:
USE <nume_tab.>
SORT ON <nume-camp> [D/A/C] TO <nume-tab-noua>
Daca se specifica optiunea A, fisierul este ordonat ascendent, iar cu optiunea D descenslent. Modul de ordonare implicit este cel ascendent. Campurile de tip memo nu pot fi sortate. Pentru a nu se face diferentiere la sortare Intre literele mari si cele mici se va include optiunea [/C],
Dupa sortare, In zona de lucru curenta ramane deschisa tabela initiala, Pentru utilizarea
tabelei noi se tasteaza comanda:
USE <nume-tab-noua>
b) Sortarea dupa mai multe campuri cu ajutorul comenzilor
De cele mai multe ori in practica este necesara sortarea dupa valorile mai multor campuri.
De exemplu, In tabela CONTR se face o sortare dupa CODB si CODP, Sortarea se poate efectua pentru campuri de natura diferita, In acelasi timp, Sistemul FoxPro are posibilitatea sa efectueze sortarea dupa mai multe campuri cu ajutorul comenzii SORT sau prin intermediul meniului sistem, campul dupa care se face in mod prioritar sortarea va fi introdus pe prima pozitie in lista.
Sintaxa comenziiSORTIn cazul sortarii dupa mai multe campuri este:
[A/C/D] To <nume-tab-sortata>
unde:
3.2.2. Indexarea tabelelor unei baze de date
Sortarea nu este cel mai indicat procedeu pentru ordonarea Inregistrarilor unei tabele.
Aceasta deoarece procesul dureaza mult (mai ales In cazul tabelelor mari) si ocupa mult spatiu pe disc. Un alt dezavantaj este acela ca In momentul actualizarii altor Inregistrari este necesara efectuarea unei noi sortari. De asemenea, In cazul sortarii multiple timpul se mareste considerabil.
Din aceste considerente este mult mai eficient sa se execute ordonarea prin intermediul
indexarii.
Indexarea tabelelor ce compun bazele de date se face prin intermediul comenzilor INDEX si REINDEXsau cu ajutorul meniului sistem.
Un fisier de index se rezuma la cel putin un camp al tabelei de date. Campul va fi indexat
dupa un criteriu alfabetic, numeric sau cronologic.
Ca efect, un fisier index este o sortare virtuala a unei tabele. In timp ce inregistrarile tabelei raman nesortate. Principiul pe baza caruia functioneazi; indexarea tabelelor este asemanator cu indexul unei carti (contine informatii de localizare a Inregistrarilor Intr-o tabela). Cand tabela este deschisa impreuna cu un fisier index aferent ei, inregistrarea ce va fi luata In considerare este prima din fisierul index.
Numarul de fisiere index care se pot deschide este limitat de memoria calculatorului si de
numarul total de fisiere care se pot deschide simultan.
Sunt doua modalitati de a realiza o indexare fisierelor. Prima utilizeaza un fisier index compus (pe baza unor chei multiple) cu extensia (.CDX)(compound index file). Acest fisier va contine informatii privind diferite indexari definite de utilizatori. Sistemul FoxPro permite deschiderea simultana a mai multor fisiere (.CDX) odata cu tabela la care se refera, Insa numai unul singur (cel activ) va controla ordonarea Inregistrarilor.
Optiunea Tag a unei comenzi INDEX Inmagazineaza Intr-un fisier (.CDX) informatiile privind indexarea. Acest fisier (.CDX) este cunoscut sub numele de fisier index structural (structural CDXfile).
A doua metoda este aceea de a crea un fisier individual (.IDX) pentru fiecare indexare
executata. De exemplu, indexarea tabelei BENEFse poate executa dupa valorile campurilor CODB sau DENB, ceea ce implica crearea a doua fisiere (.IDX) separate.
Larandul lor, fisierele(.IDX)pot fi de tipul compact sau necompact. Fata de fisierul compact, cel necompact ocupa mai mult spatiu pe disc.
Orice modificare In tabela va fi urmata de actualizarea corespunzatoare a fisierelor index
active.
Crearea unui fisier index se face cu ajutorul comenzii INDEXsau la crearea tabelei cu
ajutorul comenzii CREATE pt. indecsi de tip .CDX.
Daca comanda SETTALK este ON, sistemul FoxPro afiseaza pe ecran cate Inregislrari au fost indexate In urma executarii comenzii.
Sinlaxa comenzii este:
<expL>][COMPACT][ASCENDINGIDESCENDING] [UNIQUE/CANDIDATE]
[ADDITIVE]
unde:
expresii admise sunt de tip numeric, caracter, data calendaristica. Pentru indecsii de
tip (.CDX) lungimea expresiei index plus lungimea clauzei FOR nu poate depasi 254
caractere. Pentrufisierele de tip (.IDX) lungimea expresiei index nu poate depasi 100
caractere. In cazul In care <expr> este numele unui camp, fisierul index creat va fi
construit pe baza valorilor campului specificat;
specificat;
clauzei COMPACT In comanda INDEXeste inutila.
structural este deschis automat ori de cate ori se deschide tabela si are acelasi nume
ca si aceasta. In cazul In care se alege optiunea <Ignore>, tabela va fi deschisa fara
fisierul index structural asociat ei.
existente.
fisierele index deschise anterior raman deschise.
O comanda cu sintaxa:
va produce un singur fisier index.de tip (.IDX).
Indexarea dupa mai multe campuri este similara sortarii multiple (se utilizeaza operatorul
(+) pentru a concatena campurile utilizate pentru indexare). Nu se poate face indexare multipla pe diferite tipuri de campuri (caracter, numeric etc). Pentru a depasi aceasta situatie exista o serie de functii: STR,VAL,SUSSTR, STRTRAN,STUFF,AT, LEFT,RIGHT, RAT, DTOS, DTO, CTOD.
De exemplu, comanda:
<fis-index> permite indexarea dupa trei campuri de tipuri diferite.
Pentru deschiderea simultana a tabelei si fisierelor index aferente se utilizeaza sintaxele:
USE <nume-tabela> INDEX <fis-index1>. [<fis-index2>]
USE <nume-tabela> TAG <fis-index>
1) Sa se indexeze tabela BENEF dupa campul DENB (cheie simpla alfanumerica), permitand existenta valorilor duble ale campului.
SELECT 1
USE BENEF
INDEX ON DENB TO B. IDX
CLOSE ALL
Activarea fisierelor index ale tabelei active se face cu ajutorul comenzii SET INDEX TO Comanda SET INDEX TO fara argumente Inchide fisierele index deschise In zona de lucru curenta (care se Inchid o data cu Inchiderea tabelei). Exceptie fac fisierele index structurale, care se Inchid cu tabela.
Sintaxa comenzii este:
SET INDEX TO [<lista-fisiere-index> I ? [ORDER <expN>I<.IDX file> ITAG
<tag name>] [OF<_CDX file>] [ASCENDINGIDESCENDING] [ADDITIVE]
unde:
<lista-fisiere-index>I! permite deschidereaunui fisier IDX) incluzand numele lui
.SET INDEX TO! determina afisarea ferestrei de dialog Open File In care sunt prezentate
toate fisierele index existente si se permite alegerea celui dorit;
index sau cheile nu se schimba, ci numai ordinea In care se face accesul la Inregistrari;
Exemple
1) Sa se deschida In zona de lucru (C) fisierul index IDCB.CDX pentru tabela BENEF.fara a Inchide alte fisiere index deschise In zona de lucru curenta, iar cheia principala (Master Tag) sa fie CODB.
SELECT C
USE BENEF
SET INDEX TO IDCB ADDITIVE ORDER TAG CODB OF IDCB
CLOSE ALL
Un fisierindex poate fi deschis si prin intermediulcomenzii USE,cu sintaxa:
USE <nume-tab> INDEX<lista-fisiere-index>
Este indicata utilizarea comenzii USE pentru a deschide toate fisierele index dorite, apoi
activarea unuia dintre acestea se face prin comanda SET INDEX. De exemplu:
USE BENEF INDEX IDCB, IDENB
LIST
SET INDEX TO IDCB
LIST
Refacerea fisierului index curent, devenit inactiv datorita alterarii campurilor cheie din
tabela corespunzatoare, se face prin intermediul comenzii REINDEX.De asemenea, actiunea se rasfrange asupra tuturor fisierelor index deschise In zona de lucru curenta.
Sintaxa comenzii este:
REINDEX [COMPACT]
Orice index creat initial cu comanda SETUNIQUEON sau cu optiunea UNIQUE din
comanda INDEX,va fi refacut In acelasi mod. Pentru reindexare se utilizeaza urmatoarea succesiune de comenzi:
USE <nume tab> INDEX <lista-fisiere-index>
REINDEX
Daca tabela selectata are unul sau mai multe fisiere index activate, comanda PACK va
efectua In mod automat reindexarea lor.
Comanda CLOSEINDEX inchide toate fisierele index deschise ia un mument dat In zona
de lucru curenta latat cele de tip .lDX), cat si cele de tip .CDXI nestructurale.
Un fisier index structural nu va fi inchis cu aceasta comanda.
4.1. Modurile de acces
Comenzile utilizate pentru accesul la date sunt: GO, SKIP,LOCATE, CONTINUE, FIND, SEEK. Comenzile GO, SKIP,LOCATE si CONTINUE permit accesul secventiala date si lucreaza pe o tabela indexata sau nu. Comenzile FIND si SEEKsunt mult mai rapide si lucreaza numai pe tabele indexate.
Comanda GO
Comanda pozitioneaza pointerul pe inregistrarea fizica cu numarul <expN> din tabela
curenta si are urmatoarea sintaxa:
GO [RECORD]<expN1> [IN<expN2>I <expC> IGO TOP IBOTTOM[IN<expN2>
I <expC>]
unde: . [RECORD] <expNl> pozitioneaza pointerul pe inregistrarea fizica cu numarul
<expN1>; .TOPI BOTTOM pozitioneaza pointerul pe prima/ultima inregistrare din tabela selectata. Daca tabela este indexata, prima inregistrare are cea mai mica valoare a
cheii de indexare; . IN <expN2> l<expC> pozitioneaza pointerul in tabela deschisa intr-o alta zona de lucru decat cea curenta. Daca numarul specificat este mai mare decat cel al ultimei inregistrari, se returneaza mesajul 'Record is out of range'
Comanda mai poate fi folosita si in sintaxa GOTO sau numai <expNl >. De exemplu,
urmatoarele comenzi sunt echivalente:
GOTO 3
GO 3
Functia RECNOO returneaza numarul inregistrarii curente (o valoare ce este mai mare decat numarul de inregistrari din tabela, daca pointerul este pozitionat dupa ultima inregistrare din tabela si 1 daca pointerul e pozitionat inaintea primei inregistrari din tabela).
Daca tabela este vida RECNOO returneaza 1.
Sintaxa functiei este:
RECNO ([<expN> I <expC>])
unde: .<expN/<expC> reprezinta zona de lucru in care este activa tabela, numele sau sinonimul ei. Atunci cand <expN> =A:('sof! seek') permite returnarea numarului de inregistrare cu cea mai apropiata valoare de cea cautata printr-o comanda SEEKesuata.
b) Comanda SKIP
Pozitionarea pointerului pe o anumita inregistrare fata de cea curenta se realizeaza prin
intermediul comenzii SKIP.
Sintaxa comenzii este:
SKIP [<expNl>] [IN<expN2>I <expC>]
unde: . <expN1> poate fi un numar pozitiv sau negativ. Daca este pozitiv, se deplaseaza
pointerul peste atatea inregistrari cate specifica <expNl >. Daca este negativ,
pointeru! se pozitioneaza inapoi (deplasarea se face se face catre prima inregistrare
din tabela). . IN <expN2> I <expC> este modalitatea prin care se specifica o tabela din alta zona de lucru, prin numarul acesteia <expN2> sau sinonimul/numele <expC>.
Exemple
Sa se pozitioneze pointerul cu un numar de trei inregistrari inaintea ultimei inregistrari din tabela BENEF.Comanda se realizeaza intr-o zona diferita de cea in care este deschisa tabela.
SELECT A
USE BENEF
GO BOTTOM
? RECNO ()
SELECT B
USE CONTR
SKIP-3 IN
SELECT A
? RECNO()
DISP
CLOSE ALL
BENEF
c) comanda LOCA TE
Cautarea secventiala a inregistrarii ce satisface o anumita conditie, fara a fi necesara
indexarea tabelei, se face prin comanda LOCATE. Sistemul FoxPro gaseste prima inregistrare si abandoneaza cautarea altora, chiar daca acestea satisfac conditia specificata.
Sintaxa comenzii este:
LOCATE FOR <expL1> [<scope>] [WHILE <expL2>] [NOOPTIMIZE]
unde: . FOR<expl1> este expresia logica dupa care se face cautarea. Esteselectata prima
inregistrare care satisface conditia <expL1>; . <scope> este un argument optional si limiteaza numarul de inregistrari pentru care se face cautarea. Implicit este ALL.Alte optiuni posibile sunt: Next. Rest si Record; . WHlLE <exp12> efectueaza cautari ale unei inregistrari atata timp cat expresia logica <expL2> are valoarea de adevar (.T.L . NOOPTIMIZEdezactiveaza tehnica de optimizare RUSHMORE.
Comanda LOCATE functioneaza impreuna cu comanda CONTINUE. Ele actioneaza in
zona de lucru curent selectata.
Exemple
1) Sa se execute pozitionarea In tabela BENEF pe Inregistrarile pentru care valoarea campului CODB este mai mare ca 10002.
SELECT A
USE BENEF
LOCATE FOR CODB>10002
DISP
CONTINUE
DISP
CLOSE ALL
d) Comenzile SEEK si FIND
Se utilizeaza in tabelele indexate facand o cautare rapida in acces direct. De exemplu, la o
tabela mare accesul la date prin intermediul comenzii SEEKsau FIND dureaza secunde, spre deosebire de cazul In care se utilizeaza comanda LOCATE, cand timpul de acces este mult mai mare.
Sintaxele celor doua comenzi sunt:
SEEK<expr> [ORDER nlndex Number IIDX Indexfile name I TAG] TagName [OF
CDX Filename] IASC I DES] [IN nWorkArea I cTableAlias]
Si
FIND<sir-de-caractere>
Exemple
11 Sa se caute In tabela BENEF inregistrarea pentru care compul DENB este 'COMPUSERVE SA'
SELECT A
USE BENEF
INDEX ON DENB TO IDBEN
FIND COMPUSERVE SA
sau FIND 'COMPUSERVE SA'
DISP
CLOSE ALL
e) Comand' SET FILTER
Comanda SET FILTER determina afisarea doar a inregistrarilor ce Indeplinesc conditia
specificata in filtrul de selectie,
Sintaxa comenzii este:
SET FILTER TO [<expL>]
unde <expl> este o expresie logica in functie de care se face cautarea.
Comanda are acelasi efect ca si selectarea optiunii Filler din optiunea Selup a submeniului DalaBase.
4,5. Legaturi Intre tabele
Legarea tabelelor prin comanda SET RELATION TO
Legarea tabelelor unei baze de date se face pe baza unui camp comun. Tabelele PROOU si CONTR au In structura lor campul CODP (codul produsului).
Selectarea datelor din tabele se face prin legarea lor pe baza campurilor comune
CODP si CODP. Campul comun trebuie sa aiba aceeasi denumire, lungime si tip In ambele tabele, iar conditia realizarii efective a legaturii este ca una sau mai multe valori ale campului dintr-o tabela sa se regaseasca si In tabela pereche.
Aceasta facilitate de realizare a legaturilor face posibila stocarea informatiilor In mai multe tabele. Astfel se reduce spatiul de memorie ocupat de informatii si se elimina erorile datorate valorilor repetate.
Prin aceasta comanda se stabileste legatura Intre tabela principala si tabela secundara.
Legatura este valabila numai In timpul sesiuniide lucru curente FoxPro.
Sintaxa comenzii este:
SET RELATIONTO <expr> INTO<expN1IexpC1> [,<expr2>
INTO<sinonim>][ADDITIVE]
unde: .<expr> este un camp comun pentru ambele tabele; .<expN1 I expC1> este numele tabelei secundare (tabela cu care se face legatura); . expN1 este numarul zonei de lucru. . ADDlTIVE este o clauza optionala, utilizata atunci cand se realizeaza o jonqiune pe
mai multe tabele.
Pasii urmati In realizarea unei legaturi sunt:
1)se deschide Intr-o zona de lucru tabela principala (evenlual, dar nu obligatoriu, indexata
dupa campul comun);
2) se deschide tabela secundara In alta zona de lucru;
3) tabela secundara este indexata dupa campul comun; se activeaza fisierul index pentru
tabela secundara;
4)se tasteaza si se executa comanda SET RELATION.
Exemple
1) Sa se stabileasca o legatura Intre tabela CONTR si tabela PRODU.
SELE 2
USE PRODU
INDEX ON CODP TO IPRODU
SET INDEX TO IPRODU
USE CONTR
SET RELATION TO CODP INTO PRODU
Nu exista rezullate imediat vizibile ale legaturii create. Pentru a o evidentia, utilizatorul
poate tasta comanda de afisare DISPLAY pentru cele doua tabele.
Daca o anumita valoare a campului de jonctiune nu exista In tabela referita, atunci cursorul va fi pozitionat la sfarsitul acesteia.
Comanda SET RELATION OFF
Prin aceasta comanda se renunta la o relatie stabilita intre doua tabele ale unei baze de
date. Sintaxa ei este;
SET RELATION OFF INTO <sinonim>
unde <sinonim> este tabela a carei legaturacu tabela curenta va fi incheiata.
Exemplu
Sa se renunte la legatura dintre tabelele PRODU si CONTR.
SET RELATION OFF INTO PRODU
5. Arhivarea legaturilor In fisiere VIEW
Utilizatorul ce stabileste legaturi Intre tabelele bazei de date trebuie sa cunoasca si comanda:
CREATE VIEW FORM ENVIRONMENT. Aceasta comanda implica cunoasterea notiunii de fisier VIEW. In acest fisier sunt continute informatii privind tabelele active, fisierele index, fisierele format, conditiile de filtru, legaturile definite, setarile DEFAULT si PATH, fisierul curent HELP, starea lui SETTALK, SETSKIP, SETBRSTATUS etc.
Fisierele VIEW se creeaza prin intermediul comenzii CREATE VIEW cu sintaxa;
CREATE VIEW <nume_fis>
unde <nume_fip este numele fisierului 'VIEW' care va fi creat.
Refacerea mediului FoxPro asa cum apare el arhivat In fisierul VIEW se realizeaza prin
comanda SETVIEW.
Sintaxa ei este:
SET VIEWTO <nume-fisier>1 ?
In care: . <numeJIaier> este numele fiaierului 'VIEW' ale carui informalii vor fi restaurate; . ? permite afisarea ferestrei Open pentru selectarea interactiva a fiaierului 'VIEW'.
Sa se creeze un fisier de tip VIEW, cu numele MEDIU, In care sa se salveze starea mediului FoxPro dupa realizarea unei legaturi. Sa se afiseze continutul acestui fisier.
Exemplu
CLOSE ALL
USE CONTR IN A INDEX ICONTR
USE PRODU IN B INDEX IPRODU
SELECT A
SET RELATION TO CODP INTO PRODU
CREATE VIEW MEDIU FORM ENVIRONMNET
CLOSE ALL
DISPLAY STATUS
Realizarea programelor in Visual FoxPro
Pentru realizarea de programe in Visual FoxPro se utilizeaza comanda:
MODIFY COMMAND (nume-fisI ?] [NOEDIT] [NOWAIT] [RANGE expN1, expN2]
[[WINDOW nume-fer1] [IN[WINDOW nume-fer21lN SCREEN]] [SAME] [SAVE]
Clauzele comenzii sunt:
.nume-fis- este numele fisierului care contine programul sursa (tip .PRG);
. ? determina deschiderea ferestrei Open pentru selectarea fisierului sursa de editat (tip
.PRG, .MPR, .QPR, .SPR);
. NOEDIT fisierul sursa poate fi doar vizualizat, nu si editat (actualizat);
. NOWAIT la executia programului nu se asteapta daca apare fereastrade editare;
. RANGE permite selectarea pentru editare doar a unei parli (de la expNl la expN2)
din programmul sursa;
. WINDOW fereastra de editare va fi inclusa intr-o aha fereastra (nume-fer2) care
trebuie sa fie deja activata;
. IN SCREENplaseaza fereastra de editare in ecranul curent;
. SAME impiedica fereastra de editare sa devina activa;
. SAVE dupa parasirea ferestrei de editare aceasta ramane pe ecran.
Apelul unui program sursa in VFPse face prin comanda DO, care preia fisierul sursa (.PRG), il compileaza si rezulta fisierul obiect (.FXP), apoi pe acesta il link-editeaza si rezulta fisierul executabil (.EXE), pe care iI lanseaza in executie.
Comanda DO mai este folosita si pentru apelul procedurilor intr-un program apelant VFP.
Sintaxa comenzii este:
DO numep1 [IN numep2] [WITH param]
1. Structurile de program
Structurile de programare intalnite in programarea structurala si modulara se regasesc in
totalitate in sistemul VFP.
Limbajul nu are comenzi de salt neconditionat in program, avand, in schimb, comenzi specifice pentru implementarea celor trei structuri fundamentale (secvenliaIa, alternativa si repetitiva).
1.1. Structura secventiala
O structura seventiala (liniara) de program VFP se poate realiza printr-un grup oarecare de comenzi, dintre cele prezentate la modul de lucru cu fereastra de comanda.
In general, o astfel de structura este data de o secventa de comenzi, care nu contine structurile alternative IF si CASE si structurile repetitive (WHILE, FOR, SCAN).
a) Comenzile pentru atribuire
Exista doua moduri de initializare: prin comanda specifica STORE sau atribuirea propriu-zisa (=), existenta in toate limbajele de programare universale.
STORE <expr> TO <lista-var-mem> ! <nume-tablou>
Exemplu:
STORE 0 TO Xl, X2, X3
STORE 'TEST' TO X4
STORE .T. TO X_LOGIC
STORE (
DISPLAY MEMORY LIKE X*
<var_mem> = <expr>
<nume_tablou> =<expr>
Comanda = realizeaza o atribuire si totodata o evaluare. Ea are acelasi efect ca cel al comenzii STORE, cu deosebirea ca initializeaza o singura variabila si nu o lista de variabile. Variabila sau tabloul aflat in partea stanga a semnului de egalitate se initializeaza cu valoarea data de expresia din partea dreapta.
b) Comenzile pentru operatii de intrare/iesire standard (vezi carte)
1.2. Structura alternativa
Sunt implementate ambele forme ale structurii alternative de programarea structurata, prin urmatoarele comenzi specifice: structura alternativa cu doua ramuri (comanda IF); structura alternativa cu mai multe ramuri (comanda CASE).
A) Structura alternativa cu doua ramuri:
Structura alternativa cu doua ramuri este implementata prin comanda IFENDIF cu sintaxa urmatoare:
IF <exprL>
<secventa-de-comenzi1 >
[ELSE
[secventa-de-comenzi2>]]
ENDIF
Se evalueaza <exprl> si in cazul in care este adevarata se executa toate comenzile ce urmeaza pana la ELSE sau la ENDIF (daca lipseste ElSE). In cazul in care<exprl>este falsa si ElSE exista, se executa toate comenzile de la ELSE la ENDlF.
Fiecare IF trebuie sa se incheie cu un ENDIF, in caz contrar va fi afisat un mesaj de eroare la executie.
Exemplu
IF CODB>0 .AND. CODB<100000
M_bm = M_bm + 1
ELSE
? 'Cod beneficiar curent'
ENDIF
b) Structura alternativa cu mai mult de doua ramuri:
Structura alternativa cu mai mult de doua ramuri este implementata prin comanda DO CASE ENDCASE cu urmatoarea sintaxa:
DO CASE
CASE <expL1>
<comenzi1>
[CASE <exprL2>
<comenzi2>]
[OTHERWISE
<comenzi3>]
ENDCASE
Se foloseste pentru executia unui set de comenzi VFP bazat pe rezultatul unei conditii logice.
La executia unei comenzi DO CASE se evalueaza succesiv expresiile logice din structura
CASE. Rezultatul evaluarii determina care set de comenzi va fi executat.
Exemplu
DO CASE
CASE UMP = 'KG'
? 'KILOGRAME'
CASE UMP ='TONE'
? 'TONE'
CASE UMP = 'MET'
? 'METRI_LIN'
OTHERWISE
? 'UNITATE DE MASURA ERONATA'
ENDCASE
1.3. Structura repetitiva
In sistemul VFP sunt implementate doua din cele trei structuri repetitive existente in programarea structurata, prin comenzi specifice si anume cele conditionate anterior. Structura repetitiva conditionata posterior, care nu are corespondent intr-o comanda VFP poate fi simulata.
Sunt implementate:
a) structura repetitiva conditionata anterior (DO WHllE);
b) structura repetitiva conditionata anterior, cu numarator (FOR);
c) structura specifica VFP, ce parcurge o tabela de date automat de la inceput pana la sfarsit, in mod conditionat (SCAN).
a) Structura repetitiva conditionata anterior
Structura este implementata prin comanda DO WHlLE ENDDO cu urmatoarea sintaxa:
DO WHILE <expL>
<secventa_de_comenzi>
[
[EXIT]
ENDDO
Se evalueaza expresia logica <expl> si daca este adevarata, se executa setul de comenzi ce urmeaza pana la ENDDO. Fiecare DO WHILE trebuie sa se incheie cu ENDDO. Daca
<expl> devine falsa, ciclul este inchis si pointerul de control se pozitioneaza la urmatoarea comanda, ce urmeaza dupa ENDDO.
Clauza LOOP, va determina reluarea executarii comenzii DO
WHlLE. Comenzile existente intre
Daca este specificata clauza EXIT, aceasta returneaza controlul programului la urmatoarea comanda ce urmeaza lui ENDDO. Aceasta reprezinta o iesire fortata din structura repetitiva.
EXIT poate apare oriunde in ciclul DO WHlLE ENDDO.
Exemplu
DO WHILE .NOT. EOF()
? DENB
IF CODB>l05
EXIT
ENDIF
ENDDO
b) Structura repetitiva conditionata anterior, cu numarator
Structura repetitiva conditionata anterior, cu numarator, este implementata prin comanda
FOR ENDFOR. Aceasta comanda va executa setul de comenzi de un numar de ori specificat.
Sintaxa comenzii este: .
FOR <var>=<expl> TO <exp2> [STEP <exp3>]
<secventa-de-comenzi>
[EXIT]
[
ENDFOR I NEXT
unde:
. <var> este o variabila de memorie cu rol de contor (numarator). Ea determina de cate ori se executa ciclul de la FOR la ENDFOR (sau EXIT). Contorul <var> pleaca de la o valoare initiala data de <exprl> pana la o valoare finala «expr2», cu pasul dat de <expr3>. Daca pasul nu este specificat, atunci se atribuie in mod implicit valoarea 1.
Variabila <var> se comporta la fiecare intrare intr-un nou ciclu cu valoare finala <exp2>. Daca este mai mica sau egala se va executa secventa de comenzi cuprinsa intre FOR si ENDFOR. Daca variabila <var> este mai mare decat valoarea finala se executa urmatoarea comanda dupa ENDFOR.
. <exp1>, <exp2>, <exp3> sunt expresii numerice, variabile de memorie sau constante a caror valoare poate fi modificata in interiorul ciclului fara afectarea numarului specificat de cicluri. Variabila <var> va fi definita inainte de intrarea in ciclu.
Modificarea ei in interiorul ciclului va afecta numarul de cicluri. Daca <exp3> are valoare negativa, variabila de ciclare <var> va fi decrementata cu aceasta valoare la fiecare ciclu, iar valoarea initiala <expl> trebuie sa fie mai mare decat valoarea finala <exp2>.
. EXITva determina o iesire fortata din ciclul FOR.
LOOP determina reluarea comenzii FOR.Comenzile
existenteintre
nu se vor mai executa.
c) Structura repetitiva SCANENDSCAN
Este o structura repetitiva specifica sistemului VFPprin care este parcursa in mod automat o tabela. Este implementata prin comanda SCAN ENDSCAN care are urmatoarea sintaxa:
SCAN [NOOPTIMIZE]
[<scop>] [FOR<expL 1>] [WHILE<expL2]
<secventa-de-comenzi>
[
[EXIT]
ENDSCAN
Se parcurge tabela executandu-se setul de comenzi pentru fiecare inregistrare care indeplineste conditia enuntata. Comanda SCAN incrementeaza automat pointerul de inregistrare cu 1 si testeaza conditia specificata prin clauzele FOR si WHILE.
Exemplu
SCAN
FOR CODB> 101
IF CODE = 105
ENDIF
? DENB
ENDFOR
ENDSCAN
|