Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Foxpro


Index » educatie » » informatica » Foxpro
» Campurile "memo"


Campurile "memo"


Campurile "memo"

            In general, pentru memorarea textelor se foloseste ca tip de date sirul de caractere. Lungimea campului in care urmeaza a se memora textele respective va trebui sa fie egala cu lungimea celui mai mare text care urmeaza a fi incarcat in camp. Daca insa lungimea textelor difera foarte mult de la o inregistrare la alta, vor exista campuri care vor ocupa sa zicem 80% din camp, dar vor exista si unele care vor ocupa doar 20% sau mai putin. Risipa de memorie in acest caz este evidenta, eliminarea ei facondu-se cu ajutorul unui tip special de camp si anume cel "memo".

            Sa luam, de exemplu, cazul tabelei ANGAJATI.DBF, in care se memoreaza datele referitoare la angajatii unei societati comerciale:



Denumire camp

Tip camp

Lungime

Zecimale

COD

Character

NUME

Character

PRENUME

Character

VARSTA

Numric

STUDII

Logical

FUNCTIA

Numeric

DATA_ANG

Date

COMPARTIM

Character

ADRESA

Memo

OBSERVATII

memo

            Campul adresa al acestei tabele este un bun exemplu de camp care poate fi declarat de tip "memo", deoarece unele adrese sunt mai mari, altele mai mici. La fel ar putea fi considerat si campul observatii, care poate fi sau nu completat, in functie de persoana respectiva.

            O tabela care contine cel putin un camp "memo" are asociat un fisier suplimentar in care sunt depuse datele campurilor "memo". Pentru a se putea ce date din fisierul "memo" asociat apartin unei anumite inregistrari din tabela, pe pozitia campului "memo"considerat, in inregistrare respectiva se memoreaza toate informatiile cu privire la locul datelor in fisierul "memo" (un "pointer").

            Accesul la continutul unui camp a"memo" se face in modul urmator:

  • se selecteaza inregistrarea dorita si se citesc datele din respectivul camp "memo" din tabela;
  • cu ajutorul acestor date se gaseste locul de depozitare a continutului campului, in fisierul "memo" asociat;
  • se citeste din fisierul "memo", de la pozitia determinata anterior, continutului campului "memo" .

Incarcarea unor date intr-un camp "memo" se face astfel:

  • se gaseste un spatiu liber in fisierul "memo" asociat tabelei, suficient pentru memorarea tuturor datelor, si se incarca aceste date in spatiul respectiv;
  • se completeaza in tabela, in inregistrarea dorita, in campul "memo" respectiv, toate datele necesare localizarii in fisierul "memo"

urmatoarea figura ilustreaza modul cum se memoreaza date in campurile "memo", folosind ca exemplu campul adresa din tabela PERSONAL.

FISIER "MEMO" ASOCIAT

ADRESA_1

ADRESA_3

ADRESA_2

TABELA  ANGAJATI.DBF

COD

ADRESA

date de identif.1

date de identif.2

date de identif.3

            Operatiile prezentate sunt treptate pentru utilizator, SGBD-ul controland intern acest mecanism.

            Incarcarea datelor intr-un camp "memo" se poate face fie manual de catre utilizator, introducandu-se caracter cu caracter intr-o fereastra de editare (Append, Change sau Browse), fie prin citirea lor dintr-un fisier sau din memoria interna  a calculatorului, din variabile.

            Metoda interactiva consta in urmatoarele etape:

  • se deschide o fereastra de editare pentru modificarea continutului tabelei, sau pentru adaugarea de noi inregistrari, folosindu-se comenzile Change, Edit, Browse, Append etc.;
  • se pozitioneaza cursorul in campul "memo" respectiv din inregistrarea dorita, dupa care se apasa combinatia de taste Ctrl+PgDn;
  • pe ecran va aparea o noua fereastra de editare, in care utilizatorul poate introduce continutul campului respectiv;
  • dupa terminarea editarii campului "memo", se iese din fereastra de editare folosind combinatia de taste Ctrl+W, combinatie care realizeaza si salvarea

modificarilor in tabela, sau prin apasarea tastei Escape, pentru iesire fara salvare;

  • dupa inchiderea ferestrei de editare a campului "memo", se revine in fereastra Change(Browse,Append etc.).

O alta sursa (pe langa tastatura) pentru incarcarea unui camp "memo" poate fi continutul unui fisier de pe disc. Comanda folosita in acest caz este APPEND MEMO, care preia continutul fisierului specificat in clauza FROM si-l incarca in campul "memo" specificat. Daca in comanda se include clauza OVERWRITE, continutul fisierului nu va fi adaugat la sfarsitul campului "memo", ci va fi copiat peste acesta, vechiul continut al campului pierzandu-se.

 Se va adauga o noua inregistrare la tabela ANGAJATI, campul adresa fiind completat din fisierul ADD.TXT ce contine informatiile respective.

USE angajati

     APPEND BLANK

     REPLACE cod WITH ,C02'

     APPEND MEMO adresa FROM ADD.txt OVERWRITE

     USE

Operatia inversa, de copiere a continutului unui camp "memo" dintr-o tabela intr-un fisier text, este realizata din comanda COPY MEMO. Fisierul in care se copiaza se specifica in clauza To, optiunea ADDITIVE folosindu-se atunci cand continutul campului "memo" se doreste a fi adaugat la fisier, si nu va inlocui vechiul continut al acestuia.

Se vor copia adresele primelor persoane din tabela ANGAJATI in fisierul ADD.TXT

USE angajati

NOTE                                                 se copiaza prima adresa

COPY MEMO adresa TO add.txt

     GOTO 2

NOTE                                                 se adauga a doua adresa

COPY MEMO adresa TO add.txt ADDITIVE

GOTO 3

NOTE                                                 se adauga a treia adresa

COPY MEMO adresa TO add.txt ADDITIVE

     NOTE                       se consulta fisierul ,add.txt'

     MODIFY FILE  add.txt NOEDIT

     USE

            Se poate realiza si copierea datelor intre campurile "memo" (din aceeasi tabela sau din tabele diferite), folosindu-se pentru aceasta comanda REPLACE (campurile "memo" vor fi utilizate ca si celelalte campuri). De asemenea, pentru copierea dintr-un camp "memo" in altul se pot folosi diversi intermediari, cum ar fi de exemplu fisiere text sau variabile.

            Sa consideram tabela ANGAJATI in care se doreste schimbarea intre ele a adreselor din inregistrarile 2 si 4. vom folosi ca intermediar fisierul add.txt.

CLOSE ALL

     NOTE                          se deschide tabela ,angajati' in zona de lucru 1

USE angajati

NOTE                         se deschide tabela ,angajati' si in zona 2

USE angajati IN 2 AGAIN

GOTO 2

     NOTE                           se copiaza campul memo adresa al inregistrarii 2 in fisierul add.txt

COPY MEMO adresa TO add.txt

     GOTO 4 IN B

     NOTE                           se inlocuieste campul memo adresa al inregistrarii 2 (zona 1) cu campul memo adresa al inregistrarii 4 (zona 2)

REPLACE adresa WITH b.adresa

     GOTO 4

     NOTE                           se copiaza continutul fisierului add.txt in campul adresa al inregistrarii 4 (zona 1)

APPEND MEMO adresa FROM add.txt OVERWRITE

     BROWSE

     CLOSE ALL

1 - COPY MEMO

ANGAJATI.DBF

ADRESA 2

2 - REPLACE

ADRESA 4

ADD.TXT


              3 - APPEND MEMO

            Observam linia a 7-a a programului: REPLACE adresa WITH b.adresa

in care primul camp, se refera la zona de lucru A cea activa, iar cel de-al doilea camp, b.adresa se refera la zona de lucru B. In ambele zone de lucru avem deschisa aceeasi tabela, in momentul in care se executa instructiunea a 7-a in prima zona de lucru fiind pozitionati pe inregistrarea 2, iar in cea de-a doua pe inregistrarea 4.

            Putem folosi in locul fisierului add.txt din exemplul de mai sus si o variabila de memorie, ca in urmatorul exemplu.

     CLOSE ALL

     USE angajati

     USE angajati IN 2 AGAIN

     GO TO 2

     V=adresa

     GO TO 4 IN B

     REPLACE adresa WITH b.adresa

     GO TO 4

     REPLACE adresa WITH v

     BROWSE

     CLOSE ALL

Tehnica folosita in acest al doilea exemplu este asemanatoare cu cea din primul exemplu, cu deosebire ca s-a folosit ca intermediar, in locul fisierului add.txt, o variabila de memorie, v.

 Deci, vom avea urmatoarea schema de functionare:                            1 - COPY MEMO

ANGAJATI.DBF

ADRESA 2

2 - REPLACE

ADRESA 4

ADD.TXT


              3 - APPEND MEMO

            Observam instructiunea din linia a 9-a: REPLACE adresa WITH v in care continutul campului "memo" adresa se inlocuieste cu valoarea variabilei v (incarcate anterior tot cu continutul unui camp "memo"). Variabila v, care se creeaza in linia a 5-a, va fi o variabila de tip "memo", ce va contine datele stocate in campul "memo".

            Acest tip de variabila este tratat ca un sir de caractere, asupra lui putandu-se aplica toate functiile ce au fost prezentate la acest tip de date. Exista insa doua functii speciale pentru manipularea campurilor "memo", care se aplica numai acestui tip de campuri. Ele sunt MEMLINES () si MLINE (). Prima returneaza numarul de linii continute de campul "memo" priit ca parametru. Cea de-a doua functie returneaza efectiv linia cu numarul n, unde n este valoarea numerica transmisa functiei pe pozitia celui de-al doilea parametru, dupa numele campului "memo" din care se extrage. Daca functiei MLINE () i se transmite si un al treilea parametru, acesta va fi interpretat ca deplasament in cadrul liniei de returnat, in sensul ca nu va fi returnata toata linia, ci numai incepandu-se de la pozitia indicata prin parametrul respectiv (valoarea numerica).

            Sa presupunem ca in campul adresa al inregistrarii curente din tabela ANGAJATI avem urmatorul text:

Bucuresti

     Strada Cuza Voda, nr. 54

     sector

     ? MEMLINE (adresa)

     NOTE                         numarul de linii din campul memo

     ? MEMLINE (adresa,2)

     Strada Cuza Voda, nr.54

     ? MLINE (adresa,1,0)

     Bucuresti

     ? MLINE (adresa,1,1)

     Bucuresti

     ? MLINE (adresa,1,11)

     Strada Cuza Voda, nr.54

     ? MLINE (adresa,1,12)

     Strada Cuza Voda, nr.54

     ? MLINE (adresa,4)==""

     .T.

    Campurile "memo" reprezinta un tip special de campuri, prin care sunt manipulate textele de lungimi mari sau care difera foarte mult de la o inregistrare la alta. Asupra campurilor "memo" se poate opera atat cu functiile cunoscute pentru sirurile de caractere, dar exista si doua functii special destinate acestui tip.





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate