Referat Visual Fox Pro

Mai jos puteti citi fragmente din Referat Visual Fox Pro si de asemenea puteti face Download Referat Visual Fox Pro

Citeste fragmente din Referat Visual Fox Pro

VISUAL FOX PRO (VFP) ==================== Tipuri de programare: - liniara - structurata - orientata pe obiecte VFP este un mediu de programare care foloseste programarea structurata. TIPURI DE DATE - numeric - simplu - dublu - intreg - monetar (currency) - sir de caracatere / caracter - tip data - logic : true / false - memo - general Tipuri de date numerice a) date care nu sunt inregistrate in fisiere-tabele ci in memoria interna - inregistrate pe 8 octeti - au maxim 16 cifre b) date care se gasesc in tabele- fisiere dbf - numeric simplu inregistrate 1 caracter pe 1 octet (1-20 octeti) precizie mica, exemplu: 114 -> 3 octeti - numeric dublu pentru calcule cu valori mari se reprezinta pe 8 octeti - numeric intreg se reprezinta pe 4 octeti nu admite zecimale - numetric monetar se reprezinta pe 8 octeti are simbolul monetar implicit $ Prelucrarea datelor numerice operatorii: - aritmetici : + , - , * , / , **(ridicare la putere), () paranteze. - relationali : < , <= , > , >= , <> sau # (diferit). - logici: and, or, not. REzultatul poate fi TRUE sau FALSE. Tip de date sir de caractere - cuprind oricecaracter de pe tastatura - reprezentate 1caracter pe 1 octet - sunt incadrate intotdeauna pe de apostroafe sau ghilimele ( sau " "). Operatii cu siruri de caractere concatenare =========== (+) ? Ana_ + Pop => Ana_Pop (—) ? Ana_ - Pop => AnaPop_ Prelucrarea sirurilor de caractere =========================== LEN () - arata lungimea sirului Ex.: nume= Ion Stefan ?len(nume) => 10 (se numara si spatiile) - extragerea unui subsir dintr-un sir de carcatere SUBSTR (,,) ? SUBSTR (nume,5,6) => pe ecran va aparea: Stefan LEFT () RIGHT () REPLICATE () REPL( 8 ,10) => 8888888888 SPACE() Compararea sirurilor ================== www.atestate-informatica.tk ALLTRIM () - elimina spatiile de la inceputul si sfarsitul unui sir LTRIM () - elimina spatiile de la stanga sirului RTRIM () - elimina spatiile de la dreapta sirului Deoarece in VFP nu exista analogie intre literele mari si mici pentru comparare a fost necesara introducerea functiilor: UPPER () trasforma toate caracterele in caractere mari LOWER () trasforma toate caracterele in caractere mici Date pentru gestiunea timpului ========================== - sunt necesari 8 octeti pentru repreyentarea datei Operatii cu date de tip data --------------------------------------- datan={04/16/74} ?datan+4 => {04/20/74} ?datan+30 => {05/16/74} ?datn-10 => {04/06/74} Afisarea datei (formate de data) -------------------------------------------- set date to american (LL/ZZ/AA) british (ZZ/LL/AA) ANSI (AA/LL/ZZ) DMY (ZZ/LL/AA) set century on |off DATE() - afiseaza data curenta TIME() - afiseaza ora curenta Date de tip logic ============== - reprezentate pe 1 octet - pot lua doua valori: F sau T - rezulta in urma unor expresii logice Date de tip memo =============== - folosite pentru prelucrarea textului dintr-un camp al tabelei cand lungimea acestuia este foarte mare (de exemplu adresa completa a furnizorului, date despre acesta sau care necesita scrierea pe mai multe randuri) accesul interactiv la campurile memo se face cu CTRL+HOME iar iesirea intotdeauna cu salvare CTRL+W Date de tip general ================ - se folosesc atunci cand aducem in cadrul unui tabel elemente create cu ajutorul altor programe CONVERSII INTRE tipurile de date ============================ numeric -> caracter STR (,) salar=2000000 ? Salariul este +str(salar,7,2)+ lei => Salariul este 2000000 lei calendaristic -> caracter DTOC (data calendaristica) DTOS (data calendaristica) - pentru indecsi caracter -> format de tip data CTOD (sir de caractere) caracter -> numeric VAL (sir de caractere) ------------------------------------------- | Lansarea in executie a VFP | ------------------------------------------- Definirea ferestrelor utilizator DEFINE WINDOW [] [FROM ] [TO ] [TITLE ] [FLOAT] [GROW] - sufiect daca se folosesc primele patru litere din cuvintele cheie: exemplu: DEFI WIND FEREASTRA FROM 10,10 to 24,50 TITL Fereastra noua FLOA - pentru numele ferestrei utilizatorul poate folosi maxim 10 caractere, numere sau linia de subliniere, insa nu pot exista spatii - un ecran are 24 randuri si 79 coloane - titlul ferestrei (care apare in partea de susu la afisarea ferestrei) este incadrat de ghilimele sau apostrofuri - FLOAT = fereastra se poate muta (fara atribut este fixa) - GROW = se pot modifica dimensiunile ferestrei (fara atribut este fixa) - activarea ferestrelor utilizator se face cu ajutorul comenzii: ACTIVATE WINDOW - toate comenzile careincep cu ? se vor afisa in fereastra activa (1 la un moment dat) - dezactivarea ferestrelor se face cu comanda: DEACTIVATE WINDOW ce are ca efect stergerea fereastrei de pe ecran - stergerea din memorie se face cu comanda: RELEASE WINDOW - la toate comenzile pentru lucrul cu ferestre se poate schimba cu ALL si efectul va fi la toate ferestrele vizibile sau din memorie, dupa caz. VARIABILE DE MEMORIE www.atestate-informatica.tk ==================== Initializarea variabilelor in VFP se face astfel: STORE TO sau = Comanda DISPLAY MEMORY LIKE [] face ca toate variabilele din memorie sa fie listate la ecran LIKE [] - afiseaza sellectiv doar variabilele care corespund sablonului DISP MEMO LIKE curs* - variabilele de memorie pot fi salvate intr-un fisier cu extensia *.mem de unde pot fi restaurate in memorie sau sterse SALVARE / STERGERE / RESTAURARE variabile de memorie ==================================================== a) salvare SAVE TO [LIKE | EXCEPT ] b)restaurare RESTORE FROM c)stergere RELEASE | ALL | LIKE | EXCEPT Afisarea variabilelor pe ecran sau la imprimanta --------------------------------------------------------------------- ? - afiseaza lista_variabile ?? - afiseaza lista_variabile din locul unde a ramas cursorul [PICTURE ] [FUNCTION ] [AT ] [FONT ] [STYLE ] - poate fi: B,U,I unde: PICTURE - restrange domeniul de afisare la sablon 9 = numeric . = pozitia marcii zecimale x = orice caracter ex.: nume= Popescu salariu=2500000 ? nume picture xxxxxxxxx => Popescu__ ? salariu: +salariu picture 999999999.99 => salariu:__2500000.00 FUNCTION $ afiseaza simbolul monetar implicit E afiseaza data in mod european ? Data: ,date() funct E => Data: 09/09/01 AT - afiseaza "ceva" la o anumita pozitie Modul de lucru cu compilatorul --------------------------------------------- MODIFY COMMAND - deschide fereastra unde putem scrie comenzile VFP - iesirea se face cu CTRL+W pentru salvare => comnpilarea programului in cod masina - sau File -> New -> Program DO - lanseaza in executie un program cu extensia *.prg (contine coemnzi visual fox pro) - versiunea inteleasa de VFP este compilata in fisier.fxp Comenzi SET ------------------- - schimba setarile imlpicite: SET DEFAULT TO SET POINT TO SET CURRENCY TO SET CURRENCY RIGHT Introducerea datelor de la tastatura --------------------------------------------------- ACCEPT TO - ptr. caractere INPUT TO - ptr. date de tip numeric Exemplu: MODI COMM FACTURA CLEAR SET POINT TO , SET CURR TO lei SET CURR RIGHT NUME=SPACE(12) ADR= NATURII 11 U_CIT=128.12 LEIKW=1409 CLEAR DEFI WIND F FROM 1,1 TO 15,70 TITLE FACTURA DE ENERGIE ELECTRICA FLOAT GROW ACTI WIND F ? NUME CONSUMATOR: ,NUME ARIAL ,20 STYLE B,I ? ADRESA: , ADR ? ULTIMA CITIRE: , U_CIT PICT 9999.99 , Kw/ora ACCEPT CITIRE CURENTA: TO CIT_C ? PRET KW: ,LEIKW PICT 9999.99 FUNC $ ?? VALOARE FACTURA: ,(CIT_C-U_CIT)*LEIKW PICT 9999999.99 FUNC $ ? DATA PLATII: ,DATE()+ FUNC E ?? TERMEN SCADENT: ,DATE()+30 FUNC E WAIT CLEAR DEACTI WIND F CANCEL STRUCTURI ALTERNATIVE -------------------------------------- Exemplu: MODI COMM AB.PRG CLEAR INPUT A= TO A INPUT B= TO B IF A>B ? A ESTE MAI MARE DECAT B ELSE ? B ESTE MAI MARE DECAT A ENDIF CTRL+W DO AB STRUCTURILE ALTERNATIVE testeaza o conditie si dupa cum conditia este adevarata sau falsa programul continua pe una din cele doua ramuri: ramura de adevarat sau ramura de fals. Schematic IF se reprezinta intr-un romb. Sa se scrie secventa de program care sa introduca de la tastatura un A si un B stiind ca acestia sunt coeficientii unei ecuatii de gradul 1 cu 1 necunoscuta. (ax+b=0) sa se testeze daca a=0, caz in care este o ecuatie imposibil de rezolvat. In caz contrar se va afisa x. MODI COMM ECUATIE DEFI WIND A FROM 10,10 TO 60,60 TITLE ECUATIA ax + b = 0 ACTI WIND A INPUT A= TO A INPUT B= TO B IF A=0 ? ECUATIA NU SE POATE REZOLVA ELSE ? X=B/A= ,B/APICT 9999.99 ENDIF WAIT WIND oK ! DEACTI WIND A clear CANCEL comanda DO CASE --------------------------- descrie o structura alternativa generalizata. Formatul general: DO CASE CASE conditie1 COMENZI CASE conditie2 COMENZI CASE conditie3 COMENZI CASE conditie4 COMENZI CASE conditie5 COMENZI CASE conditie6 COMENZI OTHEWISE COMENZI ENDCASE Sa se scrie secv. de program care intr-o fereastra sa introduca una din zilele saptamanii. In functie de ZIUA ALEASA trebuiesc afisate urmatoarele treburi: Luni - la piata - la servici Marti - la cinema - la servici Miercuri- ziua lui Ion Joi - la servici Vineri - la servici - la picnic MODI COMM ZILE CLEAR DEFI WIND A FROM 10,10 TO 60,60 TITLE ECUATIA ax + b = 0 ACTI WIND A INPUT In ce zi suntem ? to Z DO CASE CASE Z= LUNI ? - la piata ? - la servici CASE Z= MARTI ? - la cinema ? - la servici CASE Z= MIERCURI ? - ziua lui Ion CASE Z= JOI ? - la servici CASE Z= VINERI ? - la servici ? - la picnic OTHERWISE ? N-AI NIMIC DE FACUT ?!!! ENDCASE WAIT WIND oK ! DEACTI WIND A clear CANCEL BAZE DE DATE (relationale) ---------------------------------------- O baza de date contine mai multe tabele (tabele.dbf) ------------------------------------------- | tabel.dbf | -------------------------------------------- cod nume adresa ( structura tabelei --------------------------------------------- c1 ion timisoara c2 vasile iasi ( inregistrari/articol/record c3 gheorghe craiova -------------------------------------------- camp1 camp2 camp3 -------------------------------------------- Campul este cea mai mica unitate adresabila. Campul poate fi : - modificat - sters - inlocuit MOD DE LUCRU: - INTERACTIV (PRIN BROWSE) - PRIN COD (LIMBAJ VFOX) PRELUCRAREA INTERACTIVA: CREAREA unei tabele: -> click pe new -> nume -> structura campurilor -> introducerea inregistrarilor DESCHIDEREA tabelelor -> butonul open -> butonul radio exclusive bifat permite orice modificari, altfel tabela se deschide readonly. Fereastra browse permite madoficarea inregistrarii curente. Inregistrarea curenta cea pe care se pozitioneaza la un momemt dat INDICATORUL DE INREGISTRARI. MENIUL TABLE apare doar cand avem o tabela deschisa (activa) si fereastra browse e activa. Comanda GO TO RECORD localizeaza o anumita inregistrare functie de o anumita conditie. INDECSI COMPUSI --------------------------- In practica este nevoie sa indexam inregistrarile unui tabel dupa mai multe criterii -> index compus. Ca regula in cadrul indecsilor compusi trebuie sa amintim faptul ca toate campurile trebuie sa fie de acelasi tip -> functii de conversii. Totul se converteste in tipul caracter. exemplu: codcurs + str(nrmatr,5) Indexul trebuie creat inainte de accesare. Comanda de acesare a tabelei este : use tabel.dbf order codcurs + str(nrmatr,5) browse trasformarea datei in caracter se face pentru index cu : dtos (01/01/2001) sau dtoc(data,1) DESCHIDEREA UNUI TABEL USE NUMETABEL FUNCTII EOF() - permite detectarea sfarsitului de tabel BOF() - permite detectarea inceputului de tabel FOUND() - constata daca cautarea unui articol a avut sau nu succes COMENZI care schimba pozitia contorului de inregistrari GO TO TOP / BOTTOM / SKIP - sare la urmatoarea inregistrare LOCATE - cauta un articol care indeplineste conditia din dreapta lui FOr. Cautarea se opreste in momentul in care se gaseste primul articol care satisface acesta conditie: LOCATE FOR WHILE unde: - conditia de cautare - domeniu de cautare - all (tot tabelul) - next n (de la pozitia cursorului la n inregistrari) - rest (de la pozitia cursorului la sfarsitul tabelei) Obs.: Daca LOCATE nu gaseste nici un articol care sa satisfaca conditia indicatorul de inregistrari va fi pe EOF. use reg_cat locate for nume= ionel locate for codcurs= ajut and nume= ion locate for codcurs= prog and nume= dan locate for codcurs= ajut locate for nume= dan while codcurs= ajut CONTINUE - executa in continuare cautarea dupa conditia precedentului LOCATE() SET EXACT OFF - localizeaza pe toti pe rand cursanti .dbf ------------------ pope popescu pop popici ion popa popey ana SET EXACT OFF locate for nume= pop display pope continue disp pop continue disp popey continue disp popescu Sa se scrie o secventa de program care intr-o fereastra sa introduca un nume din tabelul reg_cat, sa il caute si sa afiseze datele personale ale acestuia. MODI COMM CAUTARE CLEAR DEFI WIND A FROM 10,10 TO 50,50 ACTI WIND A USE REG_CAT ACCEPT Pe cine cauti ? TO MNUNE LOCATE FOR NUME=MNUME IF FOUND() ? Datele cursantului ? repl( = ,18) ? NUME SI PRENUME , NUME ? DATA NASTERII , DATAN FUNC E ? COD CURS , CODCURS ? NOTA DOS: , ND PICT 99.99 ELSE ? NU EXISTA CURSANTUL CU NUMELE ,MNUME ENDIF WAIT WIND DEACTI WIND A CANCEL STRUCTURI REPETITIVE ------------------------------------ - permit repetarea pt. un numar finit de ori |-> conditie --> falsa (iese din bucla) | | | adevarata ------ comenzi DO WHILE LOOP EXIT ........... comenzi ........... ENDDO De atatea ori se repeta comenzile cuprinse intre DO WHILE si ENDDO cat timp conditia este adevarata. In momentul cand conditia devine falsa programul continua cu prima comanda de dupa ENDDO. Exemplu: MODI COMM LISTA CLEAR USE REG_CAT ? COD CURS ?? NUME SI PRENUME ?? MEDIA ?REPL ( = ,40) DO WHILE NOT EOF() ?CODCURS ?? NUME AT 12 ?? (N1+N2+N3+N4+N5+N6+N7)/7 PICT 99.99 AT 32 SKIP ENDDO WAIT WIND CANCEL CLAUZA LOOP SI EXIT ================== Clauza LOOP permite intoarcerea la prima comanda de dupa DO WHILE,iar cluza EXIT permite iesirea din ciclul DO WHILE ... ENDDO. DO WHILE ..... LOOP ..... ENDDO EXIT De obicei aceste doua clauze trebuie incluse intr-o structura alternativa IF sau DO CASE. Exemplu: CLEAR USE REG_CAT ? LISTA CURSANTILOR CARE AU PROMOVAT ? REPL ( = ,40) ?? NUME AT 15 ?? ___MEDIA AT 30 ? REPL ( _ ,40) DO WHILE NOT EOF() IF (N1+N2+N3+N4+N5+N6+N7)/7>=5 SKIP LOOP ENDIF ?CODCURS ??NUME AT 15 ??(N1+N2+N3+N4+N5+N6+N7)/7 PICT 99.99 SKIP IF CODCURS= AJUT EXIT ENDIF ENDDO AFISAREA CONTINUTULUI TABELEI ----------------------------------------------------- DISPLAY - afiseaza fie in program fie interactiv continutul tabelei active DISPLAY [][] [FOR][WHILE] [TO PRINTER/TO FILE] unde: USE PLATI disp RECORD# NRMAT CODCURS SERIE ... 1 332 ajut 1 ... Denumirea campurilor se poate schimba SET HEADING OFF va aparea: DISP NRMAT CODCURS SERIE ... RECORD# 1 332 ajut 1 ... ALL - afiseaza toate inregistrarile NEXT nr. - urmatoarele nr. inregistrari REST - urmatoarele inregistrari incepand cu cea curenta pana la sfarsitul tabelului RECORD nr. - numai inregistrarea cu nr. FOR - afiseaza numai inregistrarile care satisfac conditia WHILE - pentru conditie adevarata se afiseaza inregistrarile iar pentru conditie falsa nu se afiseaza nimic PRELUCRAREA ARTICOLELOR UNUI TABEL ===================================== Editarea articolelor prin comanda BROWSE ------------------------------------------------------------- BROWSE [fields][] [FOR][WHILE] [FONT,marime][STYLE B | I | U ] camp1, camp2, .... camp[:R] campul poate fi doar citit [:v=][:F][:E] ex.: USE REG_CAT BROW FIELDS NRMAT:R,NUME,CODCURS:V(CODCURS= AJUT OR CODCURS= OPER ):F :E= EROARE_COD_CURS Actualizarea articolelor --------------------------------- A) ADAUGARE DE ARTICOLE append SAU append blank brow b)MODIFICAREA CONTINUTULUI UNUI CAMP REPLACE WITH , WITH unde: - campurile a caror continut va fi modificat - informatiile cu care vom modifica campurile ex: LOCATE FOR NUME= ANA POP REPLACE NUME WITH ALINA POPESCU EXERCITIU: MODI COMM MODIFICARE CLEAR DEFI WIND F1 FROM... DEFI WIND F2 FROM... USE REG_CAT RASP= DA DO WHILE UPPER(RASP)= DA ACTI WIND F1 CLEAR ACCEPT DE LA CE CURS ESTE ? TO MCURS ACCEPT "CUM SE NUMESTE ? " TO MNUME LOCATE FOR CODCURS=MCURS AND NUME=MNUME IF FOUND() DISP CODCUS,NUME,DATAN ACCEPT ACESTA ESTE ? TO R IF UPPER(R)= DA ACCEPT TASTEAZA NOUL NUME TO NUME_NOU REPLACE NUME WITH NUME_NOU ENDIF ELSE ? NU EXISTA LA CURSUL ,MCURS, NUMELE , MNUME ENDIF ACTI WIND F2 CLEAR ACCEPT MAI AI DE MODIFICAT TO RASP ENDDO USE WAIT WIND ATI TERMINAT DE MODIFICAT DEACTI WIND ALL EXERCITIUL 2 ADAUGARE: MODI COMM ADAUGARE CLEAR SET HEADING OFF USE CURSURI DEFI WIND F1... DEFI WIND F2... RASP= DA DO WHILE UPPER(RASP)= DA ACTI WIND F1 CLEAR ACCEPT CODUL CURSULUI ? TO MCURS ACCEPT "DENUMIREA CURSULUI ? " TO MDEN INPUT CATE MODULE ARE ? TO MMOD APPEND BLANK REPL CODCURS WITH MCURS, DENUMIRE WITH MDEN, NRMODULE WITH MMOD ACTI WIND F2 CLEAR ACCEPT MAI AI DE ADAUGAT ? TO RASP ENDDO USE WAIT WIND ATI TERMINAT DE ADAUGAT DEACTI WIND ALL COMENZILE SCATTER SI GATHER ============================= - AJUTA utilizatorul la utilizarea tabelelor. SCATTER MEMVAR - copiaza continutul articolului curent in memorie creind campurile corespunzatoare cu acelasi nume pa care le au si in tabel. GATHER MEMVAR - realizeaza transferul din memorie in campurile articolului curent. Exemplu: Sa se modifice programul de adaugare folosindu-se comenzile scatter si gather. Sa se ia o variabila in care sa se numere cate articole sau adaugat si la sfarsit sa se afiseze continutul acestei variabile. MODI COMM ADAUG CLEAR USE CURSURI DEFI WIND F FROM 1,1 TO 15,60 TITLE ADAUGARI LA TABELUL CURSURI.DBF DEFI WIND F1 FROM 20,1 TO 24,60 TITLE MAI CONTINUATI ? RASP= DA ADAUG=0 DO WHILE UPPER(RASP= DA ) ACTI WIND F CLEAR APPE BLANK SCATTER MEMVAR ACCEPT CODUL NOULUI CURS TO CODCURS ACCEPT DENUMIREA NOULUI CURS TO DENUMIRE INPUT NUMAR DE MODULE TO NRMODULE ACCEPT ARE EXAMEN ? TO EXAMEN GATHER MEMVAR ADAUG = ADAUG+1 ACTI WIND F1 CLEAR ACCEPT MAI AI DE ADAUGAT ? TO RASP ENDDO ACTI WIND F CLEAR ? S-AU ADAUGAT ,ADAUG PICT= 99 , ARTICOLE ? PROGRAMUL DE ADAUGARI S-A INCHEIAT FONT ARIAL ,16 STYLE BI WAIT WIND Ok ! DEACTI WIND ALL USE CANCEL STERGEREA INREGISTRARILOR ------------------------------------------------ MARCAREA PENTRU STERGERE DELETE [][FOR ][WHILE ] unde: delete - marcheza pt. stergere art. curent USE REG_CAT GOTO 5 DELETE DISP CODCURS, NUME ALL ARTICOLELE MARCATEpentru stergere in prelucrarea lor depind de comanda SET DELETED OFF | ON - off (implicit) - articolele marcate sunt prelucrate la fel cu cele nemarcate - on - articolele marcate NU sunt prelucrate comanda PACK face ca articolele marcate sa fie sterse definitiv din tabel aceasta realizandu-se prin recopierea art. ramase Exemplu: Sa se scrie programul de stergeri a articolelor indentificate prin codcurs si nume inregistr. care urmeaza a fi stearsa MODI COMM STERG CLEAR USE CURSURI DEFI WIND F FROM 1,1 TO 15,60 TITLE STERGERI LA TABELUL CURSURI.DBF DEFI WIND F1 FROM 20,1 TO 24,60 TITLE MAI CONTINUATI ? RASP= DA STERG=0 DO WHILE UPPER(RASP)= DA ACTI WIND F CLEAR ACCEPT DE LA CE CURS ? TO MCURS ACCEPT CUM SE NUMESTE ? TO MNUME LOCATE FOR CODCURS=MCURS AND DENUMIRE=MNUME IF FOUND() DISP CODCURS,NRMODULE,DENUMIRE,EXAMEN ACCEPT ACESTA ESTE ? TO R IF UPPER(R)= DA DELETE STERG=STERG+1 ENDIF ELSE ? NU EXISTA CURSANTUL ,MNUME, PENTRU CURSUL ,MCURS ENDIF ACTI WIND F1 CLEAR ACCEPT MAI CONTINUATI ? TO RASP ENDDO DEACTI WIND ALL DISP CODCURS,DENUMIRE,NRMODULE,EXAMEN ALL ACCEPT LE STERGI ? TO RASPUNS IF RASPUNS= DA PACK ? S-AU STERS , STERG PICT 99 , INREGISTRARI ENDIF CANCEL EXEMPLU PROGRAM COMPLEX: VAR=SPACE(1) RASP= DA DO WHILE RASP= DA ACCEPT CE VREI SA FACI ? TO VAR IF VAR# ADAUGA AND VAR# MODIF AND VAR# STERG AND VAR# TERMIN ? COD OPERATIE GRESIT LOOP ENDIF DO CASE CASE VAR= A CASE VAR= M CASE VAR= S CASE VAR= T OTHERWISE ENDCASE CANCEL Stergerea marcajului prin comanda RECALL - STERGE marcajul dinaintea articolului care a fost pus de comanda DELETE format general: RECALL [][FOR ][WHILE] USE REG_CAT DELETE FOR CODCURS= AJUT DISP CODCURS,NUME ALL RECALL FOR CODCURS= AJUT CLEAR DISP CODCURS,NUME ALL OPERATII CU FISIERE *.DBF ---------------------------------------- - copiere structura COPY STRU to nume_tabel_nou.dbf [fields ] [WITH] cdx rezulta: copy stru to nume.dbf se creaza un tabel nou cu acceasi structura cu a tabel activ dar fara continut + fields lista campuri (se vor copia numai campurile cuprinse in lista) + WITH cdx (se copiaza si indexurile pentru noul fisier) EXEMPLU: USE REG_CAT COPY STRU TO COPIE2 FIELDS CODCURS,NRMAT,NUME,DATAN,LOCN WITH CDX - copierea continut COPY TO nume_tabel_nou.dbf [] [FOR ][WHILE][WITH cdx] [TYPE ][fields ] - copiaza continutul fisierului activ intr-un alt fisier dbf, noul fisier avand acelasi continut Exemplu: USE REG_CAT COPY TO COPIE1 COPY TO COPIE1 FOR CODCURS= AJUT COPY TO COPIE10 NEXT 10 COPY TO COPYNOTE FIELDS N1,N2,N3,N4,N5,N6,N7 - adaugare de inregistrari la un tabel existent (cele doua tabele au aceiasi structura) APPE FROM numetabel.dbf [fields ][FOR ] UNDE: numetabel.dbf = tabela de unde vor fi luate inregistrarile si adaugate la sfarsitul tabelului curent USE REG_CAT COPY TO COPIE USE COPIE APPEND FROM REG_CAT COMENZI STATISTICE ================== - executa calcule statistice SUM [lista expresii/camp][][FOR ][WHILE ] to NUME_variabila USE PLATI SUM ACHITAT TO TOTAL - CALCULUL MEDIEI AVERAGE [lista expresii/camp][][FOR ][WHILE ] to NUME_variabila USE PLATI AVERAGE ND for codcurs= oper to Mediados INDEXAREA ========== - Permite accesul logic intr-o anumita ordine la articolele unui tabel dat de cheia de indexare. - se creaza separat->interactiv; nu prin comenzi in program indecsi - nestructurali (in fisiere cu nume diferit de numele tabelului sursa) - structurali (memorati intr-un fisier cu acelasi nume cu tabelul sursa dar de extensie cdx) - fisier multiindex - contine toate cheile de indexare Vizualizarea continutului fisierului cdx se face cu: DISPLAY STATUS www.atestate-informatica.tk INDECSI STRUCTURALI pot fi: - regular(normal): indecsi care pentru fiecare articol din tabel.dbf creaza o inregistrare in tabel.cdx (admit si duplicarea cheii de indexare) - unici: indecsi care introduc o singura valoare pentru o cheie in fisierul cdx . Intabel raman valorile. O singura cheie intr-un tabel poate fi unica. - candidat: nu admite valori duble, dar putem sa avem mai multi indecsi candidati intr-un tabel. - primar: cand lucram cu mai multe tabele; nu admite valori duble. Crearea indecsilor -------------------------- - se creaza interactiv in tabel designer - in cazul indecsilor compusi campurile care intra incomponenta acestora se converteste in tipul caracter - functiile de conversie sunt: STR(camp_numeric,lungime,nr_zecimale) DTOS() OBS.: In momentul extragerii zilei,lunii sau anul dintr-o data calendaristica acestea sunt numere care trebuiesc convertite ca numere. ex.: codcurs+str(year(datan),4) ex.: codcurs+str(nrmat,5)+DTOS(datan) crearea indecsilor prin cod: ====================== INDEX ON [ascending(implicit)|descending] TAG ex.: INDEX ON str(ancurs,4)+codcurs+str(serie,2)+nume TAG cheia1 Deschiderea tabelului indexat ------------------------------------------- USE ORDER Schimbarea cheii de indexare in timpul execitiei programului : SET ORDER TO [ascending(implicit)|descending] SET ORDER TO - revine la cheia initiala LOCATE face o cautare secventiala In cazul tabelelor indexate cautarea se face in acces direct. Pentru aceasta indexul master (activ) trebuie sa corespunda cheii dupa care se face cautarea. Fox-ul cauta intai in fisierul cdx, iar in momemntul in care gasese cheia cautata sare in tabelul dbf la articolul respectiv. Comanda de cautare este: SEEK () unde: expresie = expresia cheii de indexare + informatia cautata Exemplu: set order nume accept Cum se numeste ? to mnume seek (mnume) set order to ann input Anul cursului: to man accept Codul cursului: to codcurs accept Nume cursant: to mnume seek str(man,4)+ mcurs + mnume cand lucram prin cod seek() este urmata de found(): if found disp codcurs,nume,datan endif Stergerea cheilor de indexare ----------------------------------------- - in tabel designer sau prin cod cu comanda: DELETE TAG DELETE TAG nume,ann Campurile memo ============== Pentru fisierul dbf care are campuri memo , exista asociat un tabel de extensie .fpt In campul memo exista un cod care ne arata daca campul este gol sau contine o informatie. de asemenea se gaseste informatie care ne duce la locul de depozitare a informatiei -> tabel.fpt Pentru a vedea sau construi aceste campuri: 1.intram in browse 2.dubluclick pe memo 3.se deschide o fereastra de editare unde putem introduce orice sau doar sa-l vizualizam 4.dupa editare salvam continutul cu CTRL+W Utilizarea unui filtru ----------------------------- SET FILTER TO unde: conditie este conditia de filtrare (simpla sau compusa) Obs.: O comanda SET FILTER este valabila numai pentru tabelul activ, adica tabelul respectiv trebuie sa fie deschis inainte de a da comanda. exemplu: use reg_cat set filter to codcurs= ajut and n1>=6 disp codcurs, nume,n1 all RELATII INTRE TABELE ==================== Selectarea unei zone de lucru ----------------------------- 1) comanda: SELECT unde: =1,2,3,4,5,6,7, ... ,32767 2) USE nume_tabel IN ex.: SELE 1 USE REG_CAT DISP CODCURS,NUME,DATAN ALL SELE 2 USE PLATI DISP CODCURS,NRMAT,ACHITAT ALL SELE 1 DISP CODCURS,NUME,DATAN ALL PENTRU STABILIREA UNEI RELATII INTRE TABELE: 1) ACESTEA TREBUIESC INDEXATE SI DESCHISE DUPA ACEEASI CHEIE DE INDEXARE. 2) UNA DINTRE TABELE ESTE PARINTE SI CEALALTA COPIL 3) TREBUIE SA NE GASIM IN ZONA DE LUCRU IN CARE ESTE DESCHIS PARINTELE 4) VOM ANUNTA RELATIA INTRE TABELE CU COMANDA: SET RELATION TO INTO ex.: avem indexul comun: CHEIE1=CODCURS+STR(NRMAT)/5 SELE 1 USE PLATI ORDER CHEIE1 SELE 2 USE REG_CAT ORDER CHEIE1 *CHEIE1 POATE AVEA ALT NUME DAR ACELASI CONTINUT SELE 1 SET RELATION TO CODCURS+STR(NRMAT)/5 INTO REG_CAT DISP codcurs,nrmat,REG_CAT.NUME,achitat ALL CLOSE ALL - inchide toate tabele indiferent de zona in care este deschisa Cand dorim sa accesam un camp care se gaseste in alta zona de lucru decat cea curenta: inaintea campului vom introduce numele tabelui urmat de un punct: TABEL.CAMP Sa se scrie un program care sa consulte doua tabele: MODULE.DBF si CURSURI.DBF . Talebul MODULE este parinte. Module.dbf indexat dupa codcurs si nr. Modulului cursuri.dbf indexat dupa codcurs. modi comm cursmodul CLEAR CLOSE ALL ************** SELE 1 USE MODULE ORDER CODCURS SELE 2 USE CURSURI ORDER CODCURS SELE 1 SET RELATION TO CODCURS INTO CURSURI ******sau******************************* **USE MODULE ORDER CODCURS **USE CURSURI IN 2 ORDER CODCURS **************************************** GOTO TOP DEFI WIND W FROM 1,1 TO 24,79 TITLE Continut module / cursuri ACTI WIND W CLEAR ? CODUL CURSULUI: , CODCURS ? REPL ( = ,25) ? DENUMIRE CURS: ,CURSURI.DENUMIRE **(afiseaza camp din alte zone)** ? NRCRT AT 5 ?? COD AT 15 ?? DENUMIRE MODUL AT 25 ?? DURATA AT 55 ? REPL ( = ,60) RAND=6 MCURS=CODCURS ** codcurs=ajut DO WHILE NOT EOF() IF CODCURS#MCURS WAIT WIND terminat afisare curs CLEAR ? CODUL CURSULUI: , CODCURS ? REPL ( = ,25) ? DENUMIRE CURS: ,CURSURI.DENUMIRE **(afiseaza camp din alte zone)** ? NRCRT AT 5 ?? COD AT 15 ?? DENUMIRE MODUL AT 25 ?? DURATA AT 55 ? REPL ( = ,60) RAND=6 MCURS=CODCURS **(INLOCUIESTE IN MEMORIE codcurs cu OPER) ENDIF ? NRCRT AT 5 ?? CODMOD AT 15 ?? MODUL AT 25 ?? DURATA PICT 99 AT 55 RAND=RAND+1 SKIP ENDDO WAIT WIND DEACTI WIND ALL CLOSE ALL CANCEL ******************************************* reg_cat plati ajut 331 marian mihai... ajut 331 marin mihai ... ajut 331 marin mihai ... ajut 332 stanca vasile... La legarea a 2 tabele: 1) la o inregistrare din parinte ii corespunde o inregistrare din copil (one to one) 2) la o inregistrare din parinte ii corespunde mai multe inregistrari din copil one to main se transforma in one to one daca se declara invers: copil-> parinte PENTRU ACCESAREA TUTUROR INREGISTRARILOR din copil dupa comanda SET RELATION TO se da comanda: SET SKIP TO Sa se scrie un program care sa afiseze pe ecran situatia incasarilor la cursuri utilizand informatiile care se gasesc in REG_CAT si PLATI. Din reg_cat vom lua nrmat. si numele iar din plati cat a achitat,nr. chitantei si data achitarii. MODI COMM LISTPLATI CLOSE ALL SET CURRENCY TO LEI SET CURR RIGHT USE REG_CAT ORDER CURSNRM USE PLATI IN 2 ORDER CURSNRM SET RELATION TO CODCURS+STR(NRMAT/5) INTO PLATI SET SKIP TO PLATI GOTO TOP MCURS=CODCURS ? INCASARILE LA CURSUL ,CODCURS ?REPL ( = ,25) ? NR.MAT AT 5 ? NUME SI PRENUME AT 25 ? INCASAT AT 43 ? NUMAR CHITANTA AT 60 ? DATA PLATII AT 75 TOTAL=0 RAND=7 DO WHILE NOT EOF() IF MCURS#CODCURS WAIT WIND TERMINAT AFISARE CURS CLEAR ? INCASARILE LA CURSUL ,CODCURS ?REPL ( = ,25) ? NR.MAT AT 5 ? NUME SI PRENUME AT 25 ? INCASAT AT 43 ? NUMAR CHITANTA AT 60 ? DATA PLATII AT 75 ENDIF ? NRMAT AT 5 ??NUME AT 25 ??PLATI.ACHITAT PICT 9999999.99 FUNC $ AT 43 ??PLATI.NRCHITFACT ??PLATI.DATA RAND=RAND+1 SKIP ENDDO WAIT WIND DEACTI WIND ALL CLOSE ALL CANCEL ************************************ SUBPROGRAME ============== ORGANIZAREA fisierelor program Proceduri si functii definite de utilizator --------------------------------------------------------- DO - poate fi folosita si in interiorul unui program =>modularizarea programelor complexe (de dimensiuni mari) Grupuri de instructiuni pot fi folosite independent (separate de programul principal). Comunicarea cu programul principal se realizeaza prin PARAMETRII. Modulele pot fi: exteriore si in interiorul fisierului program. Programul care apeleaza un modul: program apelant. Programul apelat de programul principal: program apelat, sau subprogram. Un subprogram poate fi apelat de mai multe ori. program apelant ---------------- | ---------------- | ---------------- | apel subprogram -------------> program apelat --------------- <----| ------------- --------------- | ------------- --------------- | <---- ------------- --------------- --------------- Un subprogram este: procedura sau functie. Procedura: un grup de instructiuni care primeste de la progr.apelant un grup de parametrii, realizeaza anumite prelucrari si reda controlul programului apelant. Functia: un grup de instructiuni independente care primeste de la progr. apelant un grup de parametrii, realizeaza anumite prelucrari si DAR RETURNEAZA O VALOARE. Organizarea fisierelor program: Caz1. Fiecare program este intr-un fisier separat: Program de actualizare: Functiuni: adaugare,modificare,stergere,vizualizare,listare. C:programactual.prg -program principal Programe apelate: C:programadaug.prg -functiune de adaugare C:programmodif.prg -functiune de modificare C:programsterg.prg -functiune de sterg C:programvizual.prg -functiune de vizualizare C:programlist.prg -functiune de listare Dezavantaj: Toate apelurile deschid fisiere care raman deschise simultan,prin apelari succesive! Caz2. Fisierul program contine programul principal si programele apelate in acelasi fisier. ------------- instructiuni ------------- ------------ do adaug ------------ do modif ----------- do sterg ------------ do vizual ------------ do list ------------ ********************* procedure adaug ------------ instructiuni ------------ return ********************** function modif ------------ instructiuni ------------ return -reda cooontrolul programului principal ********************** s.a.m.d. Caz3. Mai multe subprograme sunt grupate intr-un fisier de proceduri si functii cu caracter general. C:programutile.prg -program de proceduri procedure adaug ------------ instructiuni ------------ return ********************** actual.prg -program principal SET PROCEDURE TO UTILE - DESCHIDE fisierul de proceduri ...................... ...................... ...................... do adaug ...................... ...................... ...................... SET PROCEDURE TO CANCEL PROCEDURI SI FUNCTII - definire si apelare =================== Proceduri Definire Apel PROCEDURE DO ...... ...... ..... RETURN Comanda RETURN RETURN TO MASTER -la program principal RETURN TO nume_procedura EXEMPLU: modi comm utile procedure p1 clear ? Inceput procedura p1 do p2 wait ? Sfarsit procedura p1 return ********************* procedure p2 clear ? Inceput procedura p2 do p3 wait ? Sfarsit procedura p2 return ************************* procedure p3 clear ? Inceput procedura p3 do p4 wait ? Sfarsit procedura p3 return TO p2 ************************* procedure p4 clear ? Inceput procedura p4 ? Fara apel wait ? Sfarsit procedura p4 return to master ************************** cancel Tema: programul CURSMOD de modificat,folosind proceduri. Capul de tabel este realizat cu o procedura, care se apeleaza la trecerea pe o pagina noua. FUNCTII UTILLLIZATOR ---------------------------------- Definire Apel FUNCTION () ............. ..........… RETURN Exemplu: afiseaza data curenta sub forma: Vineri_14_sseptembrie_2001 FUNCTII folosite: DATE()-data curenta DAY(data)-ziua MONTH(data)-luna YEAR(data)-an DOW(data)-nr.zilei din sapt.( 1-duminica) ? Data curenta: + dat_rom() FUNC DAT_ROM DO CASE CASE DOW(DATE())=1 ZI= DUMINICA CASE DOW(date())=2 ZI= LUNI ...................... ENDCASE DO CASE CASE MONTH(DATE())=1 LUNA= IANUARIE .................... ENDCASE RETURN ZI+ , +STR(DAY(DATE())+ +LUNA+STR(YEAR(DATE())) Domeniul de vizibilitate al variabilelor =============================== Variabile: globale(publice) si locale(private) Definirea variabilelor: = *Variabilele globale sunt accesibile si pot fi modificate in modulul curent si in orice alt modul. *Variabilele locale sunt accesibile doar in modulul curent si in cele subordonate si nu pot fi modificate in orice modul. Comenzile de declarare a variabilelor: PRIVATE = PUBLIC = Implicit sunt subordonate. Exemplu: modi comm exvar.prg clear priv a public b a=1 b=2 do test ? a = a ? b = b ? Variabila c nu se poate afisa... ? Este o variabila locala a procedurii test ! ? d = d wait wind Terminat testul pentru variabile! ********************************************** procedure test priv c public d c=3 d=4 ? a = a ? b = b ? c = c ? d = d return cancel Pentru aplicatii complexe care includ mai multe procedduri,functii se recomanda folosirea variabilelor locale iar comunicarea sa se faca prin parametrii. Apelul unei proceduri cu parametrii: DO WITH In interiorul proccedurii dupa PROCEDURE este: PARAMETERS este identica cu Transmiterea parametrilor pt. o functie : () Ex.: MODI COMM PROG CLEAR INPUT PRIMUL NR. TO N1 INPUT AL DOILEA NR. TO N2 N3=0 DO VALOARE WITH N1, N2, N3 ? VALOAREA PRODUSULUI: ,N3 ********************************* PROCEDURE VALOARE PARAMETERS P1, P2, P3 P3=P1*P2 RETURN MODI COMM IMPOZIT CLEAR SET PROCEDURE TO UTILE INPUT "INRODUCERE SALRIU: " TO MSAL ? IMPOZITUL CALCULAT ESTE: , IMP(MSAL) ****************************************** FUNC IMP PARAMETERS S DO CASE CASE S<=750000 IMPOZIT = 0.18*S CASE S<=1500000 IMPOZIT = 300000+(0.2 *S) OTHERWISE IMPOZIT = 0.4*S ENDCASE CANCEL MODI COMM DATA ACCEPT DATA NASTERII TO DATAN ?? DAT_ROM (DATAN) FUNC DAT_ROM2 PARAMETERS DATA DO CASE CASE DOW(DATA))=1 ZI= DUMINICA CASE DOW(DATA)=2 ZI= LUNI www.atestate-informatica.tk ...................... ENDCASE DO CASE CASE MONTH(DATA)=1 LUNA= IANUARIE .................... ENDCASE RETURN ZI+ , +STR(DAY(DATA))+ +LUNA+ +STR(YEAR(DATA))) EDITAREA DATELOR ---------------- - TREBUIESC CONSTRUITE ECRANE PENTRU EDITAREA DATELOR: se face cu comanda @ ...SAY ...GET Comanda SAY -------------------- @ SAY ‘’ - tipareste la ecran expresia ipe randul si coloana specificata ; Comanda GET -------------------- -afiseaza in vederea editarii continutul unui camp sau al unei variabile Sintaxa generala: @ SAY GET (-> se creaza un obiect GET) Comanda READ activeaza obiectele GET create anterior. Exemplu: @2,2 say Nume si Prenume: @2,25get nume read MODI COMM GETURI USE REG_CAT MNUME=SPACE(30) MDATAN=SPACE(10) MLOCN=SPACE(12) @2,5 SAY NUME SI PRENUMELE: GET MNUME @5,5 SAY DATA NASTERII: GET MDATAN @8,5 SAY LOCALITATEA: GET MLOCN READ APPE BLANK REPL NUME WITH MNUME,DATAN WITH MDATAN, LOCN WITH MLOCN GO BOTT BROW CLEAR Comanda get =========== Editarea datelor: @ SAY GET READ READ - activeaza GET READ activeaza toate geturile de deasupra lui Clauze pentru SAY si GET ------------------------------------ PICTURE 9999999.99 , xxxxxxxxxx FUNCTION : FUNC M lista_optiuni ex.: @2,2 say Tipul actualizarii: GET tip FUNC M A,M,S Clauza pentru GET -------------------------- DEFAULT - creaza o variabila de memorie si ii atribuie valoarea expresiei @2,2 say Tipul actualizarii: GET tip FUNC M A,M,S DEFAULT A (echivalent cu tip= A ) @2,2 say Continuati ? GET rasp FUNC M DA,NU ! DEFAULT NU VALID VALID codcurs() - se foloseste pentru validarea continutului obiectului GET la orice tentativa de mutare a cursorului de pe obiectul GET Clauza VALID returneaza true .T. sau false .F. @2,2 say Codcurs ? GET mcodcurs VALID vcodcurs() .............. FUNC VCODCURS ************* use cursuri seek mcodcurs if found() ret=.T. else ret=.F. wait wind Cod curs inexistent. Cursuri posibile: AJUT,PROG,OPER endif return ret .............. 0 = F (nu va afisa INVALID INPUT) 1 = T MODI COMM VAL *VALID-se mai foloseste pentru reafisarea obiectelor SAY: defi wind f from 1,1 to 10,50 title clauza VALID mpret=0 mcant=0 ACTI WIND f @2,2 say Pret ? GET mpret VALID calcval() *executa comenzile din calcval() inainte de parasirea obiectului GET @3,2 say Cantitate ? GET mcant VALID calcval() @4,2 say Valoare : + STR(valoare,5) READ FUNC calcval() valoare=mpret*mcant @4,2 say Valoare : + STR(valoare,5) Clauza RANGE -------------------- -specifica un interval in care variabila numerica poate lua valori RANGE [,] @3,2 say Nota ? GET mnota RANGE 1,10 Clauza SIZE ---------------- -specifica dimensiunea de afisare a ob. GET @3,2 say CURS ? GET mcodcurs SIZE 1,4 if lastkey()=27 ***TASTA Esc RETURN endif MODI COMM 쥁@