Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Programare structurata. Variabile. Masive. Instructiuni de intrare/iesire. Operatii de adaugare,stergere, modificare si afisare articole in baze de date.

baze de date



+ Font mai mare | - Font mai mic



Programare structurata. Variabile. Masive.

Instructiuni de intrare/iesire. Operatii de adaugare,stergere,

modificare si afisare articole in baze de date.



0. Cuprins.

Instructiuni specifice programarii structurate.

Variabile.Instructiuni si functii de lucru cu variabilele. Macrosubstitutia.

Masive. Instructiuni si functii de lucru cu masivele.

Instructiuni de tip SCATTER/GATHER.

Instructiuni de intrare-iesire.

Adaugare si inserare articole.

Stergere articole.

Modificare articole.

Afisare baze de date.

Aplicatii.

Instructiuni specifice programarii structurate in FoxPro.

In FoxPro au fost implementate principalele comenzi, functii ale programarii structurate, care permit:

executarea conditionata a unor instructiuni, in functie de rezultatul evaluarii unei expresii logice;

executarea unui grup de instructiuni de mai multe ori.

Din prima categorie de comenzi fac parte instructiunile conditionale de tipul:

IF . ENDIF ; IIF(); DO CASE . ENDCASE.

Din a doua categorie fac parte instructiunile repetitive de tipul:

DO WHILE . ENDDO ; FOR . ENDFOR; SCAN . ENDSCAN.

a)      Instructiuni conditionale.

Acest tip de comenzi are doua forme:

executarea unor instructiuni daca este respectata o conditie;

executia unui grup de instructiuni din mai multe grupuri in functie de rezultatul evaluarii unei expresii logice.

IF <eL>

<grup instr.1>

[ ELSE

<grup instr.2> ]

ENDIF

Efect: Se executa <grup instr.1> daca <eL> are valoarea adevarat sau <grup instr.2> daca are

valoarea fals si clauza ELSE este prezenta.

Obs.: - instructiunea nu se poate folosi de la prompter (fereastra Command);

- daca se utilizeaza comenzi IF imbricate, trebuie utilizat cate un ENDIF pentru fiecare IF.

Exemplu: SET TALK OFF

CLEAR

a = 6

b = 14

IF a>b

? 'a este mai mare ca b'

ELSE

? 'a este mai mic sau egal cu b'

ENDIF

?

IF b<>0

? a,' : ', b,' = ',a/b

ENDIF

Exemplul se testeaza dupa ce s-a apelat in prealabil editorul de programe : MODI COMM numeprog

Programul poate fi rulat din fereastra de comanda,dupa ce s-a iesit initial cu tastele CTRL+ENTER, prin instructiunea DO numeprog.

Un efect asemanator se obtine prin functia: IIF(<eL>,<e1>,<e2>)

Efect: Returneaza valoarea obtinuta prin evaluarea expresiei <e1> daca <eL> este 'true' sau

returneaza <e2> daca <eL> este 'false'. Cele 2 expresii nu trebuie sa fie de acelasi tip.

Exemplu: SET TALK OFF

CLEAR

a = 6

b = 14

s1= 'a este mai mare ca b'

s2= 'a este mai mic sau egal cu b'

? IIF(a>b,s1,s2)

DO CASE

CASE <eL1>

<grup instr.1>

CASE <eL2>

<grup instr.2>

.

CASE <eLn>

<grup instr.n>

[OTHERWISE]

<grup instr. n+1>

ENDCASE

Efect: Se executa <grup instr.i> pentru prima <eLi> cu valoarea .T. sau <grup instr.n> daca toate <eLi> au valoarea .F. si clauza OTHERWISE exista.

Obs.: - instructiunea nu se poate folosi de la prompter;

- la prima evaluare adevarata a <eLi> se executa <grup instr.i> si apoi executia comenzii se

incheie;

- alternativa pentru IF.ENDIF, in cazul existentei a mai mult de doua ramuri diferite.

b)      Instructiuni repetitive.

Instructiunile de acest tip se impart in 2 categorii:

comenzi pentru bucle cu un numar dat de pasi;

comenzi pentru bucle cu un numar nedefinit de pasi.

DO WHILE <eL>

<grup instr>

[LOOP]

[EXIT]

ENDDO

Efect: Executa <grup instr.> atata timp cat <eL> este .T.

Obs.: - dupa fiecare executie a <grup instr.> se reevalueaza <eL>;

- daca <eL> este .F., se executa comanda urmatoare lui ENDDO;

- daca apare LOOP are loc o revenire fortata la inceputul ciclului;

- daca apare EXIT are loc o iesire fortata din bucla.

FOR <var> = <eN1> TO <eN2> [ STEP <eN3> ]

<grup instr.>

[ LOOP ]

[ EXIT]

ENDFOR

Efect: Executa <grup instr.> sub controlul variabilei <var> incepand cu valoarea <eN1>,

incrementata cu 1 sau cu <eN3> pana cand <var> devine mai mare decat <eN2>.

Obs.: - daca apare LOOP are loc o revenire fortata la inceputul buclei;

- daca apare EXIT are loc o iesire fortata din bucla;

- <eN1>,<eN2>,<eN3> sunt evaluate doar la inceputul buclei FOR, modificarea lor in cadrul buclei neavand efect asupra numarului de executari ale <grup instr.>; se poate schimba valoarea contorului <var> care va influenta numarul de executii.

Exemplu: FOR i=1 TO 10 STEP 2 s=0

? I FOR I=1 TO 10

IF i=7 IF I>5

i=11 LOOP

ENDIF ENDIF

ENDFOR s=s+1

? I ENDFOR

? 'S-au executat ', s,' pasi!'

SCAN [ FOR <eL1>] [WHILE <eL2>] [NOOPTIMIZE]

<grup instr.>

[LOOP]

[EXIT]

ENDSCAN

Efect: Permite parcurgerea bazei de date curente in ordinea indexului curent (daca este activat),

tinand cont si de conditiile din filtru.

Obs.: se refera doar la parcurgerea unei baze de date;

pointerul de inregistrari inainteaza automat in baza de date care era activa in momentul intrarii in bucla;

optiunea NOOPTIMIZE inhiba mecanismul de optimizare Rushmore;

optiunea LOOP permite reluarea fortata a interatiei;

optiunea EXIT permite terminarea fortata a instructiunii.

Exemplu: Sele 0

Use AG

Sele 0

Use TR

Sele AG

Scan

v=nr_agent

Sele TR

Loca for nr_agent=v

If found()

? 'Exista deja agentul cu acest cod in tranzactii'

Exit

Else

Loop

Endif

Endscan

Obs.: Exemplul cauta sa determine existenta unui cod identic in cele 2 baze de date active, caz in care cautarea inceteaza !!. Nu este obligatoriu sa pun o expresie logica in SCAN, caz in care 'scanarea' BD se face pina la intilnirea EOF(). Sesizati ca nu trebuie schimbata zona de lucru inainte de ENDSCAN pentru a fi sigur ca voi ajunge tot in AG !!

2. Variabile.Instructiuni si functii de lucru cu variabilele.Macrosubstitutia.

Variabila reprezinta zona de memorie careia i se atribuie un nume si care poate stoca o valoare de un anumit tip. Deci elementele unei variabile sunt:

numele - folosit pentru identificare si atribuit de programator sau predefinit de proiectantii FoxPro;

continutul sau valoarea variabilei - reprezinta data ce este memorata in zona de memorie a variabilei;

tipul variabilei - tipul datei ce se poate memora in zona de memorie respectiva.

Alocarea memoriei pentru variabile se face asemanator ca in limbajul BASIC, adica, pentru variabile simple, in momentul primei atribuiri a valorii, se aloca spatiu pentru variabila. Variabilele tablou (masivele) trebuie declarate in prealabil si pot avea maxim 2 dimensiuni. Numarul de elemente pe o dimensiune se poate preciza si prin expresii. In plus, in limbajul FoxPro caracteristica de tip este asociata elementului tablou si nu tabloului, de unde rezulta ca elementele aceluiasi tablou pot fi tipuri diferite.

Numele variabilelor este format din maxim 8 caractere de tip litera,cifra sau caracterul '_', cu primul caracter diferit de cifra.

Crearea unei variabile sau modificarea valorii acesteia se face prin operatorul de atribuire:

<var> = <e>

Efect: - se evalueaza expresia <e>, obtinandu-se o valoare de un anumit tip;

se cauta in memorie variabila cu numele <var> si, daca se gaseste, se inlocuieste vechiul continut al acesteia cu valoarea expresiei;

daca nu se gaseste varaiabila respectiva, FoxPro creeaza una noua cu numele <var>, in care depune valoarea expresiei;

tipul variabilei este dat de tipul valorii expresiei, indiferent de tipul anterior al variabilei, in cazul in care aceasta exista si inainte de executia comenzii.

Exemplu: a=10

a='sir de caractere'

a=date()

a=.T.

STORE <e> TO <lista var>

Efect: Comanda echivalenta cu cea anterioara.

Salvarea/Restaurarea unui grup de variabile pe disc, intr-un fisier, in vedera unei modificari ulterioare se realizeaza prin comenzile de tipul SAVE TO/RESTORE FROM.

SAVE TO <fis> / TO MEMO <camp memo> [ ALL LIKE/EXCEPT <sabl>]

Efect: Salveaza variabilele de memorie in fisierul DOS <fis> (cu extensia .MEM) sau intr-un camp

memo al unei baze de date.

Obs.: - fara parametri instructiunea salveaza toate variabilele in fisierul specificat;

prin <sabl> se pot preciza variabilele care se salveaza (LIKE) sau cele care nu se salveaza (EXCEPT);

daca <fis> exista, el este suprascris cu sau fara confirmare (SET SAFETY ON/OFF).

RESTORE FROM <fis>/FROM MEMO <camp memo> [ADDITIVE]

Efect: Restaureaza varibilele de memorie dintr-un fisier DOS precizat prin <fis>. Restaurarea se

poate face distructiv (fara ADDITIVE) sau prin adaugare (cu ADDITIVE).

Exemplu: a=5

b=6

s=a+b

? a,' + ',b,' = ',s

SAVE TO fismem

a=3

b=9

? a,' + ',b,' = ',s

RESTORE FROM fismem

? a,' + ',b,' = ',s

O tehnica speciala de lucru cu variabile o reprezinta macrosubstitutia, prin care continutul unei variabile de tip sir de caractere este tratat ca numele altei variabile sau alt element FoxPro (camp al unei baze de date, denumire fisier). Macrosubstitutia functioneaza ca si cum in locul variabilei respective ar fi pus sirul de caractere continut de aceasta, fara apostrofurile delimitatoare. Operatorul de macrosubstitutie este &.

Exemplu: a='var' a='var'

var='Continutul variabilei var' var1='Continutul variabilei var1'

? a ?a

? &a ? &a.1

? var ? var1

Obs.: Dezavantajul este ca apare o problema de performanta pentru compilator, in sensul ca linia pe care

apare, trebuie compilata 'din mers' in momentul rularii.

Comenzi pentru afisarea variabilelor de memorie existente la un moment dat:

LIST / DISPLAY MEMORY

[LIKE <skel>]

[NOCONSOLE]

[TO PRINTER [PROMPT] | TO FILE <file>]

Masive. Instructiuni si functii de lucru cu masivele.

Produsul FoxPro accepta masive uni si bidimensionale, oferind o multitudine de comenzi si functii pentru manipularea acestora.

Declararea unui masiv se poate face cu una din comenzile:

DECLARE <nume masiv1>(dimensiune,[dimensiune])

[,<numemasiv2>(dimensiune,[dimensiune])..

DIMENSION <nume masiv1>(dimensiune,[dimensiune])

[,<numemasiv2>(dimensiune,[dimensiune])..

PUBLIC ARRAY <nume masiv1>(dimensiune,[dimensiune])

[,<nume masiv1>(dimensiune,[dimensiune])]

Cand este creat un masiv, fiecare element al lui este initializat cu valoarea .F. Numarul de elemente ale unui masiv este dat de dimensiunea, respectiv produsul dimensiunilor acestuia. Avantajul utilizarii masivelor apare in cazul aplicatiilor ce necesita multe variabile de memorie, intrucat masivul indiferent de dimensiune este considerat o singura variabila de memorie !!

Exemplu:

DECLARE A[10] - defineste un vector A cu 10 elemente

DIMENSION B[2,4] - defineste matricea B cu 2 linii si 4 coloane, adica cu 8 elemente

Obs.:    La utilizarea masivelor se prefera utilizarea parantezelor patrate (se pot folosi si cele rotunde)

pentru a nu se confunda cu apelurile de functii, sau in cazul expresiilor care folosesc parantezele

rotunde pentru a stabili precedenta.

Referirea unui element al masivului se face fie cu un singur numar in cazul vectorilor, fie cu 2 numere reprezentand linia si coloana, in cazul matricilor !! Si in cazul matricilor se poate face referirea cu un singur numar, considerandu-se ca prima data se numara elementele pe linie si apoi se trece la urmatoarea.

Exemplu.: Am matricea B de mai sus !!. Elementul B[2,2] poate fi referit si cu B[6] !!

Initializarea elementelor unui masiv se poate face cu comanda STORE (sau operatorul de atribuire '='), care va atribui aceeasi valoare tuturor elementelor masivului.

Obs.: Spre deosebire de alte limbaje de programare (C, Pascal) elementele unui masiv nu este obligatoriu

sa aiba acelasi tip !!

Dimesiunile unui masiv pot fi modificate dinamic functie de cerintele aplicatiei cu aceleasi comenzi, respectiv DECLARE si DIMENSION !!

Se pot realiza astfel:

- redimensionarea unui masiv unidimensional sau bidimensional;

- transformarea unui masiv uni- in unul bi-, sau reciproc

Daca in urma unei asemenea transformari, masivul nou creat fie el uni- sau bi- are dimensiune mai mare, elementele in plus sunt initializate cu .F. In cazul in care dimensiunea este mai mica, elementele in minus (parcurgerea se face pe linie in cazul masivelor bi- !!) se pierd.

Functii referitoare la masive:

ALEN(<masiv>,[,<eN>]

Efect: Returneaza numarul de elemente ale masivului <masiv>, in functie de <eN>, astfel:

0 - implicit, numarul total de elemente

1 - numarul de linii ale masivului pentru cele bi-, respectiv numarul de elemente pentru cele uni-

2 - numarul de coloane pentru masivele bi-, 0 pentru cele uni-

Exemplu: DECLARE A[2,5]

? ALEN(A) + 'elemente' ; 10 elemente

? ALEN(A,1)+'linii' ; 2 linii

? ALEN(A,2)+'coloane' ; 5 linii

AINS(<masiv>,<eN>[,2])

Efect: Insereaza un element pentru cele uni-, respectiv o linie sau o coloana pentru cele bi- functie de prezenta sau absenta parametrului 2 !! Inserarea se face in pozitia <eN> a masivului <masiv>. Inserarea unui element sau a unei linii/coloane nu determina cresterea dimensiunii ci pierderea elementelor in plus !!

Exemplu: DIMENSION A[5]

FOR I=1 TO 5

A[I]=I

ENDFOR

AINS(A,4)

In urma ultimei comenzi vom avea A[4]=.F., A[5]=4 !!

ADEL(<masiv>,<eN>[,2])

Efect: Sterge un element la masivele uni-, respectiv o linie/coloana la cele bi-.Parametrul 2, ca si la AINS, face distinctia intre linie si coloana !! Dupa stergere, celelalte elemente ale masivului sunt translatate in vederea umplerii golului format, iar pe ultima pozitie (element, respectiv linie/coloana) va aparea valoarea .F.

Exemplu: DIMENSION A[5]

FOR I=1 TO 5

A[I]=I

ENDFOR

ADEL(A,4)

In urma ultimei comenzi vom avea A[4]=5, A[5]=.F. !!

AELEMENT(<masiv>,<eN1>[,<eN2>])

Efect: Permite aflarea pozitiei unui element al masivului <masiv> cand se cunoaste linia <eN1> si coloana <eN2>. Daca <eN2> lipseste, masivul este uni- si functia returneaza, evident, <eN1>. Functia este utilizata in cazul in care se face referire la masivele bi- printr-un singur indice, care este returnat chiar de AELEMENT().

ASUBSCRIPT(<masiv>,<eN1>,<eN2>)

Efect:    Realizeaza transformarea inversa de la un indice la 2 indici; <eN1> reprezinta pozitia elementului in tablou; functia returneaza o valoare reprezentand linia cand <eN2> are valoarea 1, respectiv coloana pentru <eN2>=2

Urmatoarele referiri sunt echivalente:

Exemplu.: DIMENSION A[3,5]

? A(2,3), A(8), A(AELEMENT(A,2,3)), ;

A(ASUBSCRIPT(A,8,1),ASUBSCRIPT(A,8,2)

ACOPY(<masiv1>,<masiv2>,[,<eN1>[,<eN2>[,<eN3>]]])

Efect: Determina copierea a <eN2> elemente ale <masiv1> incepand cu al <eN1>-lea (implicit 1) inclusiv, in elementele <masiv2> incepand de la pozitia <eN3>. Remarcam ca referirea la elementele masivelor se face printr-un singur indice. Pentru a copia toate elementele masivului <masiv1> incepand de la al <eN1>-lea si pana la sfarsit in <masiv2>, <eN2>=-1. Daca <masiv2> nu exista se creaza unul nou cu aceleasi dimensiuni cu <masiv1>

ADIR(<masiv>[,<eC1>[,<eC2>]])

Efect:    Incarca in <masiv> numele, marimea, data, timpul actualizarii si atributele fisierelor din directorul curent. Fisierele sunt selectate incluzand masca <eC1> care poate contine 'wildcards' ca si o alta cale de cautare a fisierelor decat directorul curent. <eC2> este un sir de carcatere care contine unul din codurile R (R/O), D(subdirector), H(hidden), S(system), deci selecteaza fisierele a caror informatii se extrag functie de atributul lor. Daca <eC2>='V', in masiv se incarca numai informatii despre eticheta de volum, acesta fiind trunchiat dupa primul element. Daca masivul nu exista, el va fi creat, iar daca exista dimensinile sale vor fi ajustate pentru memorarea tuturor informatiilor specificate mai sus.

Exemplu:    =ADIR(A,'*.EXE','H')

* se incarca in tabloul A toate fisierele cu extensia .EXE din directorul curent inclusiv cele ascunse.

=ADIR(A,'F:*','D') - se incarca toate subdirectoarele radacinii discului F:

Daca <eC1> lipseste se incarca doar subdirectoarele, fisierele ascunse sau sistem functie de <eC2>.

(8) AFIELDS(<masiv>)

Efect: Incarca structura bazei de date curente, masivul avand urmatoarea forma:

Coloana 1 - nume camp (sir de caractere)

2 - tip camp (caracter: C, D, L, M, N, F)

3 - lungime camp (numeric)

4 - numar zecimale (numeric)

(9) ASCAN(<masiv>,<expr>[,<eN1>[,<eN2>]])

Efect: Cauta in <masiv> sirul de caractere <expr> incepand cu al <eN1>-lea (implicit 1), numarul elementelor testate fiind dat de <eN2> (implicit toate caracterele).

ASORT(<masiv>[,<eN1>[,<eN2>[,eN3]]]

Efect: Sorteaza elemetele masivului in ordine crescatoare/descrescatoare. Elementele masivului trebuie sa fie de acelasi tip pentru a putea fi comparate intre ele. In cazul masivelor uni- se sorteaza elementele acestora, iar la cele bi- se sorteaza liniile in sensul ca in functie de rezultatul compararii a 2 elemente ale unor linii distincte se schimba sau nu intre ele toate elementele acestor linii, pastrandu-se, insa, coloana.

Daca masivul este uni-, <eN1> determina de unde se incepe sortarea. In cazul celor bi-, <eN1> marcheaza linia si coloana de unde incepe sortarea (este numarul elementului din masiv !!). <eN2> stabileste numarul elementelor/liniilor sortate in cazul masivelor uni-/bi-. Implicit (sau -1) se sorteaza toate <eN3> determina ordinea sortarii, astfel:

- 0 -> crescatoare

- diferit de 0 -> descrescatoare

Functia returneaza un rezultat numeric.

Ex.: DIMENSION A(4,3)

=ASORT(A) - se sorteaza crescator masivul A pe linii, criteriul de sortare fiind dat de compararea elementelor de pe coloana 1

=ASORT(A,5,2,1) - se sorteaza descrescator liniile 2 si 3 compararea facandu-se prin elementele coloanei 2

Eliminarea variabilelor de memorie si masivelor:

(1) RELEASE <lista variabile>

(2) RELEASE ALL

[LIKE <macheta> | EXCEPT <macheta>]

Comanda RELEASE permite distrugerea a uneia sau m.m variabile si eliberarea spatiului de memorie. Comanda nu genereaza eroare daca variabila specificata nu exista.

Ex.:     DIMENSION A[5]

STORE 0 to A1,A2,A3

STORE '' to B1,B2,B3

RELEASE A,A1

RELEASE ALL LIKE A* EXCEPT A3

Obs.: Macheta respecta regulile specificatorilor multipli (wildcards) din DOS). Nu pot folosi o singura

comanda RELEASE pentru m.m. machete !!

4. Instructiuni de tip SCATTER/GATHER.

(1) SCATTER [FIELDS lista campuri] [MEMO]

TO <masiv> | TO <masiv> BLANK

| MEMVAR | MEMVAR BLANK

Efect:    Comanda permite copierea datelor din articolul curent intr-un masiv sau un set de variabile de memorie pe care le creaza daca nu sunt definite deja. Clauza FIELDS permite doar copierea datelor din campurile specificate in lista. Se pot prelua date si din campuri tip memo daca este prevazuta clauza MEMO, altfel aceste campuri sunt ignorate. Daca prevad aceasta clauza trebuie sa ma asigur ca am memorie suficienta in cazul unor campuri memo mari. Clauza BLANK permite crearea unui masiv sau variabile de memorie cu elemente 'goale' (sesizabile cu functia EMPTY()).Clauza MEMVAR permite crearea unui set de variabile de memorie care au acelasi nume si tip cu campurile bazei de date insa sunt precedate de calificatorul 'm.'

Obs.: Nu folositi formula TO MEMVAR caz in care s-ar crea un masiv cu numele MEMVAR

(2) GATHER FROM <masiv> | MEMVAR

[FIELDS <lista campuri>]

[MEMO]

Efect: Comanda permite scrierea valorilor dintr-un masiv sau set de variabile de memorie in campurile inregistrarii curente din baza de date activa. Clauzele FIELDS si MEMO au aceeasi semnificatie ca si la SCATTER. De asemenea numele variabilelor de memorie respecta conventia de la SCATTER.

Instructiuni de intrare-iesire.

FoxPro dispune de un set de instructiuni care asigura comunicarea programelor cu exteriorul prin intermediul unor elemente de interfata, cum ar fi ecranul,ferestrele si meniurile,obiectele de control etc. Instructiunile din acest set se impart in doua categorii: instructiuni de afisare si instructiuni pentru citirea de la tastatura.

Formatul de afisare ,atat la instructiunile de afisare cat si la cele de citire, este controlat de clauzele PICTURE si FUNCTION care apar la majoritatea comenzilor de intrare-iesire. Fiecare din cele doua clauze este urmata de un sir de caractere prin care este descris simbolic formatul de afisare a valorii expresiei <exp>. Diferenta dintre cele doua clauze: clauza PICTURE controleaza modul de afisare al unui singur caracter din textul de iesire, cel de pe aceeasi pozitie; caracterele din cadrul sirului FUNCTION se refera fiecare la cate o caracteristica a intregului text de iesire. Formatele stabilite prin cele 2 clauze sunt foarte importante in comenzile de citire, pentru ca la citirea unor date utilizatorul sa fie oprit sa faca greseli. Codurile celor 2 clauze sunt date in tabelele urmatoare:

Cod FUNCTION

Semnificatie

Converteste toate literele in majuscule;

Afiseaza numarul in format stiintific;

Afiseaza simbolul monetar curent definit de SET CRRENCY;

Afiseaza numerele negative intre paranteze;

A

Permite numai caractere alfabetice;

B

Aliniaza textul la stanga in cadrul unui camp;

C

Afiseaza CR (credit) dupa numerele pozitive;

D

Utilizeaza formatul curent de data calendaristica;

E

Utilizeaza formatul european de data calendaristica;

I

Centreaza textul in cadrul unui camp (numai SAY);

J

Aliniaza textul la dreapta in cadrul unui camp (numai SAY);

K

Selecteaza intregul camp de editare cand cursorul se muta in acest camp;

L

Afiseaza zerourile nesemnificative intr-un camp numeric;

M

Defineste,atunci cand este urmat de o lista de optiuni separate prin virgula,optiunile acceptabile pentru o variabila citita cu GET;

R

Permite introducerea in sablon a unor caractere fara semnificatie;

S<n>

Activeaza un mecanism de defilare orizontala,intr-o fereastra de n caractere;

T

Elimina spatiile din fata si din spate, in cadrul unui camp;

X

Afiseaza DB (debit) , dupa numerele negative;

Z

Inlocuieste valorile nule cu spatii.

Cod PICTURE

Semnificatie

Permite introducerea cifrelor pentru date de tip sir de caractere si a cifrelor + semnelor pentru date numerice;

Permite cifre,blancuri si semne;

Afiseaza simbolul monetar curent definit de SET CURRENCY;

Afiseaza asteriscuri in fata valorilor numerice;

Specifica pozitia punctului zecimal;

Separa cifrele la stanga punctului zecimal;

A

Permite introducerea doar a caracterelor alfabetice;

W

Permite doar date de tip logic;

N

Permite doar litere si cifre;

X

Permite doar caractere;

Y

Permite doar caracterele Y,y,N,n trecandu-le la majuscule.

Obs.: Codurile FUNCTION pot fi incluse in clauza PICTURE dar precedate de '@'

Ex. PICTURE 'abcde' FUNCTION '!'

PICTURE '@!abcde'

Cele 2 forme sunt echivalente !!

c)      Instructiuni de afisare.

Aceasta categorie de comenzi cuprinde urmatoarele instructiuni:

(1) ? | ?? <expr1>

[PICTURE <expC1>] | [FUNCTION <expC2>]

[AT <expN1>]

[FONT <expC3> [, <expN2>] [STYLE <expC4> | <expr2>]]

[, <expr3>]

Efect: Afiseaza, pe ecran, valorile unei sau mai multor expresii FoxPro valide sau le tipareste la imprimanta, daca SET PRINTER este pe ON , conform valorilor clauzelor PICTURE,FUNCTION,AT,STYLE.

Obs.: - cu "?" expresiile se afiseaza sau se tiparesc cu un <CR> si <LF> inainte;

cu "??" afisarea sau tiparirea are loc la pozitia curenta a cursorului sau imprimantei;

clauzele PICTURE si FUNCTION sunt definite in tabelele anterioare;

clauza AT <expN1> defineste coloana unde se afiseaza <expr1>;

clauza STYLE <expC> defineste facilitati suplimentare de afisare/tiparire,cum ar fi bold,italic, underline, sau scriere cu diferite tipuri de caractere (font) , daca monitorul sau imprimanta permit aceste optiuni, in caz contrar fiind ignorata.

??? [<expC>]

Efect: Transmite direct la imprimanta sirul de caractere precizat prin <expC>, prin ocolirea driverului de imprimanta instalat.

(3) @ <linie,coloana> SAY <expr>

[FUNCTION <expC1>]

[PICTURE <expC2>]

[SIZE <expN1>, <expN2>]

[FONT <expC3> [, <expN3]]

[STYLE <expC4>]

[COLOR SCHEME <expN4>

| COLOR <lista perechi culori> ]

Efect: Afiseaza valoarea expresiei <expr> valide pe ecran sau o tipareste la imprimanta, daca SET DEVICE este PRINTER, pe randul <expN1> si in coloana <expN2>, conform clauzelor PICTURE,FUNCTION.

Obs.: - coordonatele (<expN1>,<expN2>) au urmatoarele valori acceptabile:

Comenzi active
Rand
Coloana

SET STATUS OFF / SET SCOREBOARD OFF

SET STATUS OFF / SET SCOREBOARD ON

SET STATUS ON

SET DEVICE TO PRINTER

optiunea COLOR permite stabilirea culorii de afisare.

@<expN1>,<expN2> CLEAR [ TO <expN3>,<expN4>]

Efect: Sterge portiunea de ecran cuprinsa intre coltul stanga sus definit de <expN1>,<expN2> si coltul dreapta jos definit de <expN3>,<expN4>.

@<expN1>,<expN2> FILL TO <expN3>,<expN4> [COLOR SCHEME <expN> / COLOR <schema cul.>]

Efect: Coloreaza portiunea de ecran cuprinsa intre coltul stanga sus definit de <expN1>,<expN2> si coltul dreapta jos definit de <expN3>,<expN4>.

@<expN1>,<expN2> TO <expN3>,<expN4> [DOUBLE/PANEL/<expC>]

Efect: Traseaza un dreptunghi pe ecran cu diferite tipuri de chenar,de coordonate <expN1>,<expN2> si <expN3>,<expN4> (coltul dreapta jos).

TEXT

<expC1>

<expCn>

ENDTEXT

Efect: Se utilizeaza pentru trimiterea de blocuri de text catre ecran sau imprimanta.

d)      Instructiuni de citire de la tastatura.

ACCEPT [<expC> ] TO <var>

Efect: Se afiseaza pe ecran valoarea <expC> dupa care se asteapta introducerea unui sir de caractere,de la tastatura, ce se atribuie variabilei de memorie <var>.

INPUT [<expC> ] TO <var>

Efect: Se afiseaza pe ecran valoarea <expC> dupa care se asteapta introducerea unei expresii de la tastatura, a carei valoare se atribuie variabilei de memorie <var>.

Obs.: - comanda cere obligatoriu introducerea unei expresii;

pentru introducerea constantelor de tip sir sau data calendaristica se vor folosi delimitatorii specifici (",',[], resp. ).

WAIT [<expC> ] [TO <var>]

Efect: Se afiseaza pe ecran valoarea <expC> dupa care se asteapta apasarea unei taste (fara <CR> a carei valoare se atribuie variabilei de memorie <var>. Se utilizeaza pentru oprirea temporara a executiei unui program pana la apasarea unei taste.

@ <linie, coloana> GET <var> | <field>

[FUNCTION <expC1>]

[PICTURE <expC2>]

[FONT <expC3> [, <expN1>]]

[STYLE <expC4>]

[DEFAULT <expr1>]

[ENABLE | DISABLE]

[MESSAGE <expC5>]

[[OPEN] WINDOW <nume fereastra>]

[RANGE [<expr2>] [, <expr3>]]

[SIZE <expN2>, <expN3>]

[VALID <expL1> | <expN4>

[ERROR <expC6>]]

[WHEN <expL2>]

[COLOR SCHEME <expN5>

| COLOR <lista perechi culori> ]

Principiul de lucru al instructiunii de tip @.GET este urmatorul:

se definesc zonele de pe ecran in care utilizatorul va completa datele de intrare, numite campuri de editare (zone de editare, casute de editare);

se da comanda de citire a datelor (READ) - este prezentata ulterior;

programul continua dupa ce au fost citite toate datele in campurile de editare definite anterior.

Obs:    - <var> sau <field> trebuie sa fie definite in prealabil;

- optiunile PICTURE si FUNCTION sunt cele prezentate anterior;

- ENABLE/DISABLE - controleaza accesul la o variabila de memorie editata cu GET ;

WHEN - alt mod de control al accesului la un camp (cu ajutorul unei vb. logice sau a unei UDF care

intoarce un rezultat de tip logic. Evaluarea expresiei <expL2> se face la intrarea in campul GET. Daca expL2=.F. campul este sarit ! DISABLE este prioritar lui WHEN !! ;

VALID - controleaza corectitudinea editarii cimpului din GET. De asemenea <expL1> poate fi o expresie logica, numerica sau o UDF. Daca expl1=.F. (sau 0 pentru expresii numerice) se ramane in editarea respectivului camp cu afisarea unui mesaj de eroare, standard sau definit de utilizator cu clauza ERROR. Revenirea in editare se face cu tasta <Space> ;

RANGE - stabileste o limita minima (<expr2>), respectiv maxima (<expr3>. Verificarea se face doar la modificarea valorii din camp si nu la simpla trecere a cursorului ;

- MESSAGE - permite precizarea unui mesaj ajutator, pe ultima linie a ecranului ;

DEFAULT - valoarea initiala a unei variabile de memorie. O variabila de memorie editata cu GET trebuie fie anterior definita, fie precizata astfel ;

SIZE <expN2>,<expN3>- dimensiunile regiunii de editare creata pe ecran cu GET, folosita in general in campurile memo !!

[OPEN] WINDOW <nume fereastra> - permite editarea campurilor memo intr-o fereastra anterior

definita cu DEFINE WINDOW. Daca precizez si OPEN, fereastra de editare va fi deschisa implicit

COLOR si COLOR SCHEME - determina culorile de afisare a campului GET.

(5) READ

[CYCLE]

[ACTIVATE <expL1>]

[DEACTIVATE <expL2>]

[MODAL]

[WITH <window title list>]

[SHOW <expL3>]

[VALID <expL4 | expN1>]

[WHEN <expL5>]

[OBJECT <expN2>]

[TIMEOUT <expN3>]

[SAVE]

[NOMOUSE]

[LOCK | NOLOCK]

[COLOR <color pair list> | COLOR SCHEME <expN4>]

Efect: Activeaza mecanismul de cititre pentru toate instructiunile @. GET active.

Obs.: - dupa executarea instructiunii READ, toate instructiunile @.GET sunt dezactivate, iar noile valori introduse se atribuie variabilelor sau campurilor specificate;

instructiunea READ cu SAVE nu dezactiveaza comenzile @..GET active, dar noile valori introduse se atribuie variabilelor sau capurilor specificate.

Exemplu: CLEAR

SET TALK OFF

Nume=SPACE(10)

Virsta=0

DO WHILE virsta<>99

virsta =0

@ 2,3 SAY 'Numele : ' GET nume PICTURE 'AAAAAAAAAA'

@ 4,3 SAY 'Virsta : ' GET virsta PICTURE '999' MESSAGE 'Pentru iesire: virsta 99 ani'

READ

@ 6,3 SAY space(100)

@ 6,3 SAY nume + ' are '

@ 6,$+1 SAY virsta

@ 6,$+1 SAY 'ani'

nume=SPACE(10)

ENDDO

WAIT ' Apasati orice tasta .'

clear

SET TALK ON

Testati-l pe rand cu urmatoarele modificari:

GET nume PICTURE "@S5 AAAAAAAAAA"

GET nume PICTURE "@!" FUNCTION "AAAAAAAAAA"

GET virsta PICTURE "@Z 99"

GET virsta PICTURE "99" RANGE 1,150

@ 6,$+1 SAY virsta PICTURE "@T"

Exemplu: CLEAR

SET TALK OFF

SET STATUS OFF

SET SCOREBOARD OFF

Zi=SPACE(8)

Dt=DATE()

@ 1,1 SAY "Data de astazi este (USA) "

@ 1, $+2 SAY dt PICTURE "@D"

@ 1, $+2 SAY "sau (Europa) "

@ 1, $+2 SAY dt PICTURE "@E"

@ 3,1 SAY "Ce zi este astazi ? " ;

GET zi FUNCTION "M Luni,Marti,Miercuri,Joi,Vineri,Simbata,Duminica" ;

MESSAGE "Spatiu sau prima litera pentru selectare si apoi Enter"

READ

@ 5,1 SAY "Astazi este : " + zi + "? - apasati o tasta."

WAIT ""

SET STATUS ON

SET SCOREBOARD ON

SET TALK ON

Adaugare si inserare articole.

Adaugarea de inregistrari se poate face in 2 moduri, in functie de pozitia pe care o va ocupa noua inregistrare in baza de date:

adaugarea unei intregistrari noi la sfarsitul bazei de date;

introducerea de inregistrari noi in interiorul bazei de date.

Din prima categorie fac parte comenzile:

APPEND [BLANK]

Efect: Fara clauza BLANK se deschide o fereastra de editare in care utilizatorul poate introduce un camp la sfarsitul bazei de date. Clauza BLANK semnifica adaugarea unei inregistrari vide.

APPEND FROM <fis> / ? [[TYPE] <tip fis>] [FOR <expL>]

Efect: Permite adaugarea de articole din fisierul specificat, in continuarea celor existente in baza de date din zona de lucru curenta.

APPEND FROM ARRAY <masiv> [FOR <expL>] [FIELDS <lista campuri>]

Efect: Permite adaugarea de articole din masivul specificat, in continuarea celor existente in baza de date din zona de lucru curenta.

APPEND MEMO <camp memo> FROM <fis> [OVERWRITE]

Efect: Permite completarea, cu continutul unui fisier DOS,a continutului campului memo specificat din articolul curent din baza de date din zona de lucru curenta.

Din a doua categorie face parte comanda :

INSERT [BEFORE] [BLANK]

Efect: Permite inserarea unui articol vid,inainte sau dupa articolul curent, din baza de date curenta.

Exemplu: USE agenti && se presupune existenta fisierului vid AGENTI cu aceeasi strucutra ca AG

APPEND FROM ag FOR upper(judet)='IS'

LIST

GOTO 3

INSERT BEFORE

LIST

Stergerea / Reactivarea inregistrarilor.

Stergerea unei inregistrari dintr-o baza de date se poate realiza la doua nivele:

la nivel logic: articolul este marcat pentru stergere (exista comenzi/functii care testeaza marcajul de stergere al unei inregistrari si in functie de el, considera inregistrarea absenta sau prezenta in baza de date);

la nivel fizic: inregistrarea este stearsa efectiv din baza de date, ea neputand fi accesata sau refacuta .

(1) DELETE

[<scope>]

[FOR <expL1>]

[WHILE <expL2>]

[NOOPTIMIZE]

Efect: Permite marcarea pentru stergere a articolelor din baza de date din zona de lucru curenta, care indeplinesc conditiile de filtru.

Obs.: - optiunea de "marcare pentru stergere" se traduce in scrierea valorii "sters" in octetul "IND" asociat

fiecarui articol dintr-un fisier de date de tip .DBF;

optiunea NOOPTIMIZE inhiba mecanismul de optimizare Rushmore;

se poate determina daca un articol este marcat pentru stergere cu ajutorul functiei DELETED().

accesul la inregistrarile marcate pentru stergere este controlat de comanda SET DELETED ON|OFF.

(2) RECALL

[<scope>]

[FOR <expL1>]

[WHILE <expL2>]

[NOOPTIMIZE]

Efect: Permite reactivarea articolelor din baza de date din zona de lucru curenta,care indeplinesc conditiile de filtru.

Obs.:    - operatia de "reactivare" se traduce in scrierea valorii "reactivat" in octetul "IND" asociat fiecarui articol dintr-un fisier de date de tip DBF;

PACK [MEMO] [DBF]

Efect: Permite stergerea fizica (efectiva) a tuturor articolelor din baza de date din zona de lucru curenta,care sunt marcate pentru stergere.

Obs.: - optiunea MEMO permite stergerea numai a campurilor memo;

operatia de stergere este de fapt un sir de operatii:

creare fisier de manevra (cu aceeasi structura);

copiere articole nemarcate pentru stergere in fisierul de manevra;

stergere fisier prelucrat;

redenumire fisier temporar, cu numele fisierului supus prelucrarii.

(4) ZAP

Efect: Permite stergerea fizica (efectiva) a tuturor articolelor din baza de date din zona de lucru curenta. Dupa executia acestei instructiuni fisierul de date ramane vid.

Obs.: - afisarea mesajului de confirmare se poate activa/dezactiva prin instructiunea SET SAFETY ON/OFF.

Exemplu: USE AGENTI

CLEAR

SET DELETED OFF

DELETE FOR MOD(RECNO(),2)=0

LIST

GO TO 4

?DELETED()

WAIT

SET DELETED ON

LIST

RECALL ALL

GO TO 2

?DELETED()

WAIT

LIST

USE

Modificare articole.

Modificarea continutului unei baze de date se poate face prin urmatoarele comenzi :

(1) REPLACE <field1> WITH <expr1>

[ADDITIVE]

[, <field2> WITH <expr2>

[ADDITIVE]]

[<scope>]

[FOR <expL1>]

[WHILE <expL2>]

[NOOPTIMIZE]

Edit: Modifica continutul campurilor specificate din articolele ce indeplinesc conditiile din filtru.

Obs.:    - <field i> si <expr i> trebuie sa fie de acelasi tip;

optiunea REINDEX forteaza reconstruirea indecsilor activi;

optiunea ADDITIVE are semnificatie numai pentru campuri memo si specifica modul de actualizare;

(2) UPDATE ON <field> FROM <expN> | <expC>

REPLACE <field1> WITH <expr1>

[, <field2> WITH <expr2> ]

[RANDOM]

Efect: Permite modificarea continutului campurilor specificate din articolele fisierului din zona de lucru curenta, a caror valoare a <field> se regasesc in fisierul din zona specificate prin <expN> | <expC>.

Obs.:    - ambele fisiere de date trebuie sa fie deschise in prealabil in zone de lucru diferite;

<field> trebuie sa aiba acelasi nume in cele 2 fisiere;

fisierul din zona de lucru curenta trebuie sa fie indexat dupa <field>;

optiunea RANDOM se foloseste numai atunci cand fisierul din zona de lucru precizata prin alias nu este indexat dupa <field>.

Vizualizare continut baze de date.

Afisarea datelor dintr-o baza de date se poate executa in principal prin doua comenzi : DISPLAY si LIST. Afisarea datelor se face in urmatorul format:

prima linie reprezinta lista campurilor, identificate prin numele acestora;

urmatoarele linii reprezinta inregistrari in baza de date; pe prima pozitie,campul 0, se afiseaza numarul de ordine al inregistrarii in baza de date.

(1) LIST

[FIELDS <expr list>]

[<scope>]

[FOR <expL1>]

[WHILE<expL1>]

[OFF]

[NOCONSOLE]

[NOOPTIMIZE]

[TO PRINTER [PROMPT] | TO FILE <file>]

Efect: Permite listarea articolelor din fisierul de date din zona de lucru curenta,care indeplinesc conditiile din filtru,pe ecran, la imprimanta sau intr-un fisier DOS.

Obs.:    - optiunea OFF permite suprimarea afisarii numarului de ordine a articolelor;

optiunea FIELDS specifica doar campurile care vor fi afisate; campurile memo vor fi afisate doar daca sunt specificate explicit in FIELDS; latimea acestor campuri este controlata de SET MEMOWIDTH;

optiunea NOCONSOLE inhiba afisarea la consola;

antetul poate sa nu fie afisat in functie de comanda SET HEADING ON | OFF

Comanda DISPLAY este asemanatoare cu LIST dar cu urmatoarele diferente:

domeniul implicit al inregistrarilor pentru DISPLAY este NEXT 1 (inregistrarea curenta) pe cand cel al comenzii LIST este ALL;

comanda DISPLAY asteapta apasarea unei taste daca ecranul este plin;

LIST nu afiseaza inregistrarile marcate pentru stergere daca SET DELETED ON, pe cand DISPLAY le afiseaza.

Aplicatii

Afisati pe ecran in ce zi cade 01.01.2000 (sau o alta data calendaristica) sub forma unui sir de caractere de tipul: Vineri, 13 Martie 1998 . Initial (intr-un program separat) salvati variabilele (masivele) folosite pentru memorarea in romaneste a zilelor din saptamana si a lunilor pe disc.La inceputul programului de afisare restaurati variabilele.

Creati bazele de date AGENTI,CLIENTI,MARFURI,FACTURI,TRANZACTII din fisierele AG,CL, MA, FA si ,respectiv, TR adaugand si inregistrarile aferente.Se vor folosi comenzile COPY STRU TO si SCATTER, GATHER.

Afisati la ecran agentii din judetul Iasi/din orasul Iasi/ceilalti, dupa optiune. Afisarea se va face pentru fiecare agent in parte, avand posibilitatea de a continua afisarea cu urmatorul agent sau de a parasi aplicatia. Se vor folosi instructiunile conditionale si cele repetitive.

Studiati si testati functiile referitoare la masive.

Am o baza de date cu structura urmatoare:

AGENDA

Nr.Crt.

Denumire camp

Tip camp

Lungime camp

Nume

Char

Prenume

Char

Tel_a

Num

Introduceti ('APPEND') 10 articole care sa contina si persoane care au acelasi nume, precum si numere de telefon tip Alcatel (incepe cu 2.). Creati o baza de date cu aceeasi structura ca si prima, care va contine numai persoanele cu telefon tip Alcatel. Se vor utiliza comenzile din laborator.

6. Copiati baza de date AGENDA intr-un masiv bidimensional (de ex. TELE) cu dimensiunile TELE[nr.articole, nr.campuri]. Apoi veti afisa toate elementele masivului care au un anumit nume cu numarul de telefon corespunzator. Veti folosi functiile de lucru cu masive precum si functiile:

- RECCOUNT() - numar total articole in BD

- FCOUNT() - numar total de campuri

- FIELD() - numele unui camp (continutul campului se obtine folosind

macrosubstitutia '&')

parcurgerea masivului o veti face cu FOR . ENDFOR !!

Studiati structura bazelor de date AN3 si STUD. Faceti un program care sa copie articolele din AN3 in STUD , astfel incat campul nume din AN3 sa fie impartit corespunzator in campurile nume,i_tata, prenume din STUD, structura celelaltor campuri pastrandu-se. Se vor transforma in acelasi timp informatiile despre nume in litere mari, la copierea in STUD. Pentru adaugarea unui articol vid in baza de date STUD folositi comanda APPEND BLANK. Apoi ordonati alfabetic studentii din STUD folosind functiile pentru masive. Se vor utiliza si functiile referitoare la sirurile de caractere (ATC(),ALLT(), SUBSTR(), UPPER() etc.).

Faceti un program pentru adaugarea agentilor la fisierul AG folosind comenzile de intrare-iesire. Agentii nou introdusi trebuie sa respecte urmatoarele restrictii:

codul de identificare trebuie sa fie unic (unicitatea cheii primare) si sa fie valid (pozitiv);

numele,prenumele,orasul trebuie introduse cu litere mari; in aceste campuri nu se pot introduce alte valori (numerice,logice,data calendaristica);

judetul trebuie ales dintr-o lista a judetelor moldovenesti (specificate prin prescurtari);

valori valide si logice pentru data nastere si data angajare;

sex = M sau F;

casatorit .T. sau .F. in functie de valoarea variabilei citite ('Y' sau 'N');

salariu mai mare ca salariu minim pe economie.

In cazul nerespectarii restrictiilor se vor afisa mesaje de eroare corespunzatoare.

Actualizati salariile agentilor prin marirea de 10 ori a sumelor. Adaugati o coloana numerica PRIME si completati-o cu valori dupa cum urmeaza: 400000 pentru cei din orasul Iasi, 300000 pentru cei din judet si 200000 pentru ceilalti.

Stergeti logic din tabelul Marfuri liniile cu cantitatea sub 200 ori pretul unitar sub 1000. Afisati continutul bazei de date astfel incat ,dupa optiune , sa fie vizualizate sau nu articolele sterse logic.

Adaugati la baza de date Facturi o coloana TVA si completati-o cu un procentul ce se aplica la coloana VALOARE. Procentul (0/11/22) este selectat interactiv pentru fiecare factura din tabel.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1661
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved