Fox

Published on December 2016 | Categories: Documents | Downloads: 113 | Comments: 0 | Views: 1622
of 27
Download PDF   Embed   Report

visual fox pro comenzi

Comments

Content


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:
 nume_baza_de_date specifica numele bazei de date care va fi creata. Fisierul
corespunzator bazei de date are extensia .DBC;
 ? afiseaza o fereastrade dialog In care se poate specifica numele bazei de date care
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;
 <nume-tabela> este numele tabelei nou create;
 <lista-campuri> specifica campurile din noua tabela;
 <nume-baza-de-date> este numele bazei de date;
 [NAME<nume tabela>] este numele tabelei;
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:
 .<nume-tabela> I ? este numele tabelei ce se va deschide. Daca se specifica (1), va
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;
 IN <zona-de-Iucru> specifica numele zonei de lucru in care dorim sa deschidem
tabela. Dad se foloseste USE fara alte argumente, dar incluzand IN <zona-de-Iucru>,
tabela din zona de lucru specificata va fi inchisa;
 AGAIN permite redeschiderea tabelei specificate, In alta zona de lucru;
 ORDER <expN> se refera la fisierele index ce apar In <lista-fis-index>. Cu ajutorul acestei optiuni se stabileste
fisierul index principal dupa care se face indexarea (altul decat primul din <lista-fis-index>i sau cheia
principala;
 ORDER [<fis.idx>] specifica numele fisierului index principal;
 ORDER [[TAG<nume cheie] [OF<fis.cdx>] specifica numele cheii principale;
 ASCENDING/DESCENDING specifica daca Inregistrarile tabelei vor fi afisate in
ordine crescatoare sau descrescatoare;
 ALIAS <alias> este un sinonim pentru tabela deschisa cu USE. Un sinonim poate
contine maxim10 caracteresi trebuie sa inceapa cu o litera;
 EXCLUSSIVE specifica (pentru retea) folosirea de catre un singur utilizator a tabelei.
 SHARED permite accesul concurential pe o retea la informatiile stocate de o tabela;
 NOUPDATE impiedica modificari In tabela.
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:
 ClOSE All Inchide toate tipurile de fisiere din toate zonele de iucru si selecteaza
zona de iucru (1);
 ClaSE ALTERNATE Inchide fisierele de tip ALTERNATE (deschise prin comanda de redirectionare SET
ALTERNATE la fisier).
 CLOSE DATABASES Inchide toate tabelele de date deschise, precum si toate fisierele de tip index aferente si
selecteaza zona de iucru (1).
 ClOSE FORMAT inchide fisierele de tip format din zona de lucru curenta. Utilizatorul poate deschide un alt
fisier format pentru aceeasi tabela de date. Instructiunea este folosita pentru a reduce numarul de fisiere
deschise simultan.
CLOSE INDEX Inchide fisierele index deschise pentru zona de lucru curenta.
 ClOSE PROCEDURE Inchide un fisier de proceduri deschis prin comanda SET
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:
 <nume-fis este numele fisierului de unde se importa date;
 <lista-campuri> reprezinta campurile ale caror valori vor fi adaugate In tabela nou creata;
 [TYPE] defineste extensia fisierului sursa, daca nu este de tip (DBF).
 DELlMITED [WITH TAB I WITH BlANK I WITH <delimitator>] permite stabilirea, pentru fisierul definit, a
delimitatorului dintre campurile structurii Inregistrarii. Delimitatorul implicit este virgula.
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.
 NOOPTIMIZE dezactiveaza tehnologia Rushmore.Pentru o dezactivare globala
(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:
 <scope>, prin clauzele ALL,NEXT,REST,SKIP, stabileste articolele care vor fi sterse.
 <expI1>si<expI2>sunt expresii logice care permit selectare articolelor atata timp
cat sunt adevarate aceste expresii. Absenta acestor clauze marcheaza implicit pentru
stergere articolul curent.
 NOOPTIMIZE dezactiveaza tehnologia de optimizare.
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:
 MEMO permite stergerea fisieruiui memo atasat tabeiei curent seiectate, dar nu si a inregistrariior din tabeia
selectata, marcate pentru stergere (un fisier memo are aceiasi nume ca si tabela, dar cu extensia (.FPT));
 DBF sterge inregistrarile marcate din tabela, dar nu actioneaza asupra fisierului memo.
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:
SORT ON <nume-camp1> [A/C/D], <nume-camp2> [A/C/D], '' <nume campn>
[A/C/D] To <nume-tab-sortata>
unde:
 <nume-camp1> este campul principal pentru sortare;
 <nume-campl> este campul secundar pentru sortare;
 <nume-campn> este ultimul camp dupa care se efectueaza sortarea;
 <nume-tab-sortata> este numele tabelei rezultate in urma sortarii, In cazul In are numele specificat este
identic cu al unei tabele existente va aparea un dialog ce avertizeaza asupra acestei probleme, In cazul In care
se alege specificatia <Overwrite>, se executa sortarea, iar continutul vechii tabele sortate este Inlocuit cu cel al
noii tabele.
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 tabel ei 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:
INDEX ON <expr> TO <.IDX file> ITAG <tag-name> [OF<.CDX file>] [FOR
<expL>][COMPACT][ASCENDINGIDESCENDING] [UNIQUE/CANDIDATE]
[ADDITIVE]
unde:
 <expr> este expresia index ce include campuri din tabela selectata. Tipurile de
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;
 TO <.IDX file> permite crearea unui fisier cu extensia (.IDX) al carui nume este
specificat;
 TAG <Iag name> [OF <.CDX file>] permite crearea unui fisier cu extensia (.CDXI. Un fisier index cu extensia
(.CDX) este un fisier ce contine mai multe intrari (tag) al caror numar este limitat doar de spatiul disponibil pe
disc;
 Fisierele index cu extensia (.CDX) sunt Intotdeauna compacte, deci includerea
clauzei COMPACT In comanda INDEXeste inutila.
 Fisierele cu extensia (.CDX) pot fi structurale sau nestructurale. Un fisier (.CDX)
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.
 Pentru a se crea un fisier index nestructural, se indica un nume la clauza OF <.CDXfile>
 Spre deosebire de fisierul struclural, un fisier nestructural se deschide fie cu comanda SETINDEX, fie
adaugand clauza INDEXla comanda USE.
 FOR<expL> permite ca indexul astfel creat sa actioneze ca un filtru asupra tabelei
existente.
 COMPACT creeaza un fisier cu extensia (.IDX) compact.
 ADDITIVE permite crearea unui fisier index pentru o tabela, In conditiile In care
fisierele index deschise anterior raman deschise.
O comanda cu sintaxa:
INDEX ON <expr> TO <fis-index> [FOR conditie] [UNIQUE] [COMPACT]
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:
INDEX ON (camp-caracter) + STR (camp-numeric) + DTOS (camp-data) TO
<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;
 <expN> este expresia numerica ce se refera la pozitiile fisierelor index asa cum apar ele In <lista-fisiere-index>
 ASCENDINGI/DESCENDINGdetermina ordinea Inregistrarilor tabelei active. Fisierele
index sau cheile nu se schimba, ci numai ordinea In care se face accesul la Inregistrari;
 ADDITIVE permite deschiderea unui fisier index pentru o tabela In conditiile In care fisierele index deschise
anterior raman deschise.
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 (09/10/99) TO X_DATA
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>
[LOOP]
[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 LOOP si ENDDO nu se
vor mai executa.
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]
[LOOP]
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 LOOP si ENDFOR
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>
[LOOP]
[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
LOOP
ENDIF
? DENB
ENDFOR
ENDSCAN

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close