Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
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:
Incarcarea unor date intr-un camp "memo" se face astfel:
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:
modificarilor in tabela, sau prin apasarea tastei Escape, pentru iesire fara salvare;
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.
Copyright © 2024 - Toate drepturile rezervate