Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




INSTRUCTIUNI SI STRUCTURI DE PROGRAMARE IN FOXPRO

foxpro


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:

  • 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 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:

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


Document Info


Accesari: 22770
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )