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




Proiectarea si exploatarea bazelor de date in FoxPro

foxpro


Proiectarea si exploatarea bazelor de date in FoxPro

Cunostinte generale despre bazele de date

O baza de date simpla este organizata sub forma unui tabel in care coloanele poarta numele de campuri, liniile se numesc inregistrari, capul de tabel, in ansamblu, fiind echivalentul structurii bazei de date.



Pentru a putea depune date pe suportul de memorare, mai intai trebuie creata aceasta structura, operatia purtand numele de “crearea bazei de date”. Specificarea structurii unei baze de date presupune furnizarea tuturor campurilor care alcatuiesc aceasta baza cat si a caracteristicilor acestora.

Un camp este caracterizat de:

- numele campului - un nume simbolic prin care acesta se identifica (Nume, Prenume, etc.)

- tipul campului - apartine multimii:

Character - sir de caractere C

Numeric - numeric N

Date - data calendaristica D

Logical - logic L

Memo - memo M

Float - numeric, in virgula mobila F

Acesta are ca scop identificarea tipului datelor care pot fi memorate in campul respectiv.

- lungimea campului - identifica numarul maxim de caractere care pot fi memorate in campul respectiv

- numar de zecimale - are semnificatie numai pentru campurile Numeric si Float, indicand cate zecimale se iau dupa punctul zecimal.

Dupa specificarea structurii bazei de date se poate trece la lucru cu aceasta, ceea ce poate insemna:

- incarcarea de date in baza de date (adica completarea tabelului)

- modificarea unor date deja introduse

- stergerea unor date din baza de date

- cautari de date care sa indeplineasca anumite conditii

- selectari de date dupa anumite criterii

Modul de lucru ca bazele de date este urmatorul:

- mai intai se deschide baza de date dorita

- se efectueaza prelucrarile dorite

- la sfarsit se inchide baza de date

Deschiderea unei baze de date presupune din partea sistemului atribuirea unei zone de lucru in care sant memorate informatiile necesare manipularii bazei de date respective, cum ar fi locul unde se afla pe disc fisierul continand baza de date, numarul de inregistrari din aceasta.

Închiderea bazei de date presupune desfacerea legaturii dintre baza de d 555g62f ate si zona de lucru, salvarea pe disc a tuturor modificarilor efectuate, eliberarea zonei de lucru.

FoxPro 2.0 are 25 de zone de lucru, deci poate avea 25 de baze de date deschise simultan.

Crearea unei baze de date. Structura bazei de date

Pentru a crea o baza de date se foloseste comanda CREATE ce are urmatoarea sintaxa:

CREATE [<fisier> | ?]

unde: <fisier> reprezinta numele fisierului de baza de date ce va fi creat. Daca pentru acest fisier nu se specifica nici o extensie, FoxPro asociaza automat extensia .DBF.

Daca nu se specifica numele fisierului, sau daca se specifica parametrul ?, pe ecran apare o fereastra, unde se va introduce numele bazei de date ce se va crea.

Cea de-a doua metoda de creare a unei baze de date este reprezentata de comanda CREATE TABLE. Sintaxa comenzii este:

CREATE TABLE | DBF <nume_dbf>( <nume_camp1> <tip>

[ ,<nume_camp2>.]) | FROM ARRAY

in care:

<nume_dbf> - este numele bazei de date de creat

<nume_camp1>, <nume_camp2> - este numele campurilor structurii bazei de date

<tip> - o singura litera reprezentand tipul campului

Exemplu: Baza de date agenda.dbf poate fi creata folosind secventa:

CREATE TABLE agenda (nume C(12), prenume C(20));,

telefon N(9), nascut D, sex L, adresa M)

ATENTIE:

Aceasta baza de date va constitui exemplu in continuare pentru celelalte functii si comenzi noi introduse.

Deschiderea si inchiderea unei baze de date

Selectarea unei zone de lucru se face folosind comanda SELECT.

SELECT <expN> | <expC>

unde <expN> - reprezinta numarul zonei de lucru ce va fi activata.

Exemplu:

SELECT 1 && zona curenta va fi zona 1

SELECT A && echivalenta cu prima comanda

Pentru a afla care este zona de lucru curenta se foloseste functia SELECT(), aceasta returnand numarul zonei de lucru curente sau numarul ultimei zone de lucru nefolosite.

Sintaxa comenzii este:

SELECT([0 | 1])

unde pentru:

0 - functia returneaza numarul zonei de lucru curente.

1 - functia returneaza numarul ultimei zone de lucru nefolosite.

Pentru lucrul cu o baza de date este necesara mai intai deschiderea bazei de date in zone de lucru ale FoxPro. Acest lucru se realizeaza folosind comanda USE, cu urmatoarea sintaxa:

USE [<fisier> | ?] [IN <zona de lucru>]

[AGAIN]

[ALIAS <alias>]

unde:

<fisier> -reprezinta fisierul bazei de date ce va fi deschis

? - fisierul bazei de date ce va fi deschis va fi selectat interactiv.

Comanda USE fara parametri permite inchiderea bazei de date din zona curenta

Exemplu:

? SELECT() && afiseaza zona de lucru curenta

1

USE agenda && s-a deschis baza de date agenda in zona 1

USE && s-a inchis baza de date agenda

USE agenda IN 2 && s-a deschis baza de date agenda in zona 2

USE && s-a inchis baza de date agenda din zona 2

Închiderea bazelor de date se poate realiza si cu comenzile CLOSE ALL si CLOSE DATABASE, dar acestea pe langa bazele de date, inchid si alte fisier, ferestre, deci trebuie utilizate cu atentie.

CLOSE ALL && inchide toate fisierele din toate zonele de lucru si selecteaza zona de lucru 1.

CLOSE DATABASE && inchide toate bazele de date si selecteaza zona de lucru 1

La deschiderea unei baze de date acesteia i se atribuie un nume, prin care aceasta se poate identifica, care poarta numele de alias. Atribuirea aliasului unei baze de date se face fie de catre programator, fie de catre FoxPro, in cazul in care programatorul nu a facut acest lucru. Programatorul poate atribui un alias unei baze de date specificand in comanda USE clauza ALIAS cu sintaxa:

USE

.

[ALIAS <alias>]

in care <alias> reprezinta aliasul ce se atribuie bazei de date.

Exemplu:

USE agenda IN 2 ALIAS tabel && se deschide baza de date agenda in zona 2, atribuindu-i aliasul 'tabel'

Aliasul implicit ce se atribuie unei baze de date, la deschidere, de catre FoxPro este numele fisierului bazei de date, fara extensie.

Manipularea structurii unei BD

In lucrul cu bazele de date apare deseori necesitatea modificarii structurii unei baze de date, adica adaugarea unor campuri, stergerea altora, modificarea caracteristicilor campurilor bazei de date.

Comanda MODIFY STRUCTURE cu sintaxa:

MODIFY STRUCTURE

realizeaza modificarea structurii bazei de date prin deschiderea unei ferestre de dialog, aceeasi ca la crearea bazei de date, unde se vor realiza modificarile

Daca in zona de lucru curenta avem deschisa o baza de date, atunci comanda se refera la aceasta. In caz contrar, apare o fereastra de dialog, de unde se va selecta baza de date a carei structura se va modifica.

Dupa efectuarea modificarilor FoxPro copiaza continutul bazei de date vechi in baza noua de date, cu modificarile respective, operatie transparenta pentru utilizator.

Vizualizarea structurii unei baze de date se face cu comenzile DISPLAY STRUCTURE sau LIST STRUCTURE. Acestea au urmatoarea sintaxa:

DISPLAY STRUCTURE [IN <expN> | <expC>]

[TO PRINTER | TO FILE <fisier>]

[NOCONSOLE]

LIST STRUCTURE [IN <expN> | <expC>]

[TO PRINTER | TO FILE <fisier>]

[NOCONSOLE]

unde: <expN> sau <expC> specifica zona de lucru, respectiv baza de date la care se refera comanda.

NOCONSOLE - afisarea pe ecran este inhibata.

Comenzile sunt asemanatoare, singura deosebire fiind aceea ca prima face pauza dupa umplerea unui ecran cu informatii, pe cand cea de-a doua nu face aceasta pauza, pe ecran derulandu-se toate informatiile, pana la sfarsit.

Manipularea campurilor unei BD

Accesul la campurile unei BD este controlat de comanda SET FIELDS, care are urmatoarea sintaxa:

SET FIELDS ON | OFF

SET FIELDS TO [ [ <camp1> [< camp2 >] ] | ALL ]

unde:

< camp1 >, < camp2 > -reprezinta lista campurilor ce pot fi accesate in cazul SET FIELDS ON.

Observatie: Comanda se refera la baza de date curenta.

SET FIELDS TO ALL - permite accesul la toate campurile bazei de date chiar daca starea lui SET FIELDS este ON.

SET FIELDS TO - face ca lista campurilor sa fie vida, deci nici un camp nu va putea fi accesat in cazul lui SET FIELDS ON.

Exemplu:

Pentru a se permite accesul doar la campurile nume si nascut din baza de date agenda.dbf se va introduce urmatoarea secventa de instructiuni:

SET FIELDS ON

SET FIELDS TO nume, nascut

iar pentru a reveni la normal, se introduce fie

SET FIELDS TO ALL

fie

SET FIELDS OFF

Numarul campurilor dintr-o baza de date este returnat de functia FCOUNT( ), ce are urmatoarea sintaxa:

FCOUNT ( [ < expN > | < expC > ])

unde:

<expN >- zona de lucru in care este deschisa baza de date.

<expC> - aliasul bazei de date respective.

Daca nu se specifica aici zona de lucru, nici baza de date se considera ca functia se refera la baza de date deschisa in zona de lucru curenta. Daca in zona de lucru specificata nu este deschisa nici o baza de date functia va returna valoarea 0.

Functia FIELD( ) returneaza numele unui camp dintr-o baza de date identificat prin numarul campului in cadrul structurii bazei de date.

FIELD ( < expN1 > [ , < expN2 > | < expC >] )

in care :

< expN1 > -identifica numarul de ordine al campului

< expN2 > sau < expC> - identifica baza de date la care se refera functia.

Functia returneaza un sir de caractere continand numele cimpului specificat, scris cu majuscule.

Daca < expN2 > si < expC > nu se specifica, functia se refera la zona de lucru curenta, in caz ca nu este deschisa aici nici o baza de date va returna un sir de caractere vid.

Exemplu:

CLOSE ALL

USE agenda

? FIELD(1) && afiseaza numele primului camp al bazei de date deschisa in zona de lucru curenta.

USE agenda IN 2 Again

? FIELD (1, 2) && ca efect este echivalenta cu functia FIELD anterioara

Nume

? FIELD ( FCOUNT ( ) ) && afiseaza numele ultimului camp

ADRESA

Functia care returneaza marimea unui camp al unei baze de date, specificat prin numele sau este functia FSIZE (). Sintaxa functiei este:

FSIZE ( < expC1 > [, <expN > | < expC2> ] )

unde: < expC1> - este un sir de caractere ce reprezinta numele campului bazei de date.

< expN> sau < expC2 > - specifica zona de lucru, respectiv B.D. la care se refera functia. Daca acestea lipsesc se considera implicit zona de lucru curenta.

Exemplu:

CLOSE ALL

USE agenda

? FSIZE ( ' Nume ' )

USE

Domeniul inregistrarilor

Exista comenzi in FoxPro care actioneaza asupra mai multor inregistrari ale unei baze de date. Multimea inregistrarilor selectate formeaza 'domeniul inregistrarilor', la care se refera comanda. Domeniul inregistrarilor se specifica prin clauzele < domeniu >, FOR si WHILE incluse optional in comanda respectiva.

Clauza <domeniu > se va inlocui cu una din urmatoarele constructii , in functie de necesitati:

- ALL - selecteaza toate inregistrarile din B.D.

- NEXT <expN> - se refera la urmatoarele <expN> inregistrari incepand de la cea curenta, inclusiv.

- RECORD <expN> - actioneaza numai asupra inregistrarii cu numarul <expN>.

- REST - selecteaza inregistrarile incepand cu cea curenta si pana la sfarsit.

Clauza FOR<expL> - se foloseste pentru selectarea inregistrarilor in functie de o conditie logica <expL>. Se selecteaza acele inregistrari pentru care <expL> este adevarata.

Clauza WHILE < expL > - selecteaza inregistrarile in functie de <expL>, pentru valoarea adevarata a acesteia.

Spre deosebire de clauza FOR care dupa gasirea unei inregistrari ce nu respecta conditia <expL> continua testarea celorlalte, clauza WHILE intrerupe testarea inregistrarilor cand gaseste o inregistrare ce nu respecta conditia data.

Adaugarea de inregistrari la o baza de date

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

1. adaugarea de inregistrari noi la sfarsitul bazei de date.

2. introducerea de inregistrari noi in interiorul bazei de date.

Prima metoda se realizeaza cu comenzile FoxPro APPEND, APPEND FROM, APPEND FROM ARRAY.

La comanda APPEND informatiile sunt furnizate de utilizator, in mod iteractiv ( exceptie facand clauza BLANK). Sintaxa comenzi este:

APPEND [ BLANK ]

APPEND BLANK - are ca efect adaugarea unei noi inregistrari ' blank' la sfarsitul bazei de date.

APPEND - determina deschiderea unei ferestre de editare in care utilizatorul poate introduce camp cu camp informatiile inregistrarii ce se va adauga.

Pentru a edita un camp de tip memo, cand cursorul se afla in campul respectiv, se apasa combinatia de taste Ctrl +PgDn dupa care se intra intr-o fereastra de editare a campului memo. Iesirea cu salvare din aceasta fereastra se face cu Ctrl+ End.

Terminarea introducerii tuturor inregistrarilor se realizeaza prin Ctrl+ End, fereastra de editare inchizandu-se dupa aceasta.

Introducerea datelor in fereastra de editare corespunzatoare comenzi APPEND este influentata de comanda SET CARRY. Comanda are urmatoarea sintaxa:

SET CARRY ON | OFF

SET CARRY TO [ < lista campuri > [ ADDITIVE] ]

Clauza ON determina copierea inregistrarii curente in cea noua pe cand clauza OFF opreste aceasta copiere. Optiunea implicita este OFF.

Cea de-a doua forma a comenzii se foloseste cand se doreste copierea numai a anumitor campuri ale inregistrarii curente in noua inregistrare.

Prima forma a comenzii, SET CARRY ON | OFF, se refera la toate zonele de lucru pe cand cea de-a doua forma , SET CARRY TO, se refera doar la zona de lucru curenta.

Adaugarea de inregistrari la sfarsitul unei baze de date, cand continutul inregistrarilor este preluat dintr-un alt fisier, se realizeaza cu ajutorul comenzii APPEND FROM care are urmatoarea sintaxa:

APPEND FROM < fisier > | ?

[ FIELDS < campuri > ]

[ FOR < expL > ]

unde:

< fisier > - este numele fisierului din care se preiau inregistrarile

- se da posibilitatea utilizatorului sa selecteze fisierul printr-o fereastra de dialog.

FIELDS < campuri > -doar campurile specificate in lista se vor prelua.

Daca nu se specifica FIELDS < campuri > intreg fisierul va fi adaugat la sfarsitul bazei de date.

Cea de-a doua metoda de adaugare a unei inregistrari noi la o baza de date o reprezinta inserarea inregistrarii in interiorul bazei de date, folosind comanda INSERT. Comanda INSERT are urmatoarea sintaxa:

INSERT [ BEFORE ] [ BLANK ] && are ca efect inserarea unei inregistrari dupa inregistrarea curenta.

unde:

BLANK - se adauga o inregistrare blank

Clauza BEFORE determina adaugarea unei inregistrari noi inaintea inregistrarii curente.

Ca si la comanda APPEND, completarea campurilor este influientata de comanda SET CARRY.

Exemplu:

USE agenda_n

GOTO 2 && se pozitioneaza indicatorul de inregistrari pe inregistrarea 2

INSERT BEFORE && se insereaza o noua inregistrare in pozitia 2

LIST

USE

Utilizarea comenzilor SCATTER si INSERT INTO

Uneori avem nevoie sa mutam un grup de inregistrari dintr-o baza de date in alta. De exemplu, daca consideram ca avem o baza de date care contine note de plata neachitate, cand acestea sunt achitate trebuiesc mutate intr-o alta baza de date cu o structura identica, ce contine note de plata achitate. Secventa de program descrisa mai jos realizeaza aceasta operatie.

SELECT neach

SCAN FOR aprob

SELECT ach

APPEND BLANK

REPLACE camp1 WITH neach.camp1,;

camp2 WITH neach.camp2

&& si asa mai departe pentru toate campurile bazei de date

SELECT neach

ENDSCAN

Folosind comenzile SCATTER si INSERT INTO putem muta intreaga inregistrare folosind un masiv.

Rescriem secventa de instructiuni astfel:

SELECT neach

SCAN FOR aprob

SCATTER TO x

INSERT INTO ach FROM ARRAY x

ENDSCAN

RELEASE x

În acest exemplu SCATTER creeaza un masiv x cu FCOUNT() elemente si copiaza valoarea din camp1 in x[1], valoarea din camp2 in x[2] si asa mai departe. Apoi INSERT adauga o inregistrare in baza de date destinatie si inverseaza procesul.

Combinatia SCATTER TO <masiv> si INSERT INTO este mai rapida decat folosirea combinatiei SCATTER si GATHER.

Rescriem secventa folosind SCATTER si GATHER.

SCATTER TO x

SELECT ach

APPEND BLANK

GATHER FROM x

SELECT neach

Modificarea continutului unei baze de date

Modificarea informatiilor stocate intr-o baza de date se face cu comenzile: CHANGE, EDIT, BROWSE si REPLACE.

Comanda CHANGE ( sau EDIT ) permite editarea continutului unei baze de date intr-o fereastra de editare. Sintaxa comenzii este:

CHANGE | EDIT

[ FIELDS < lista campuri > ]

[ < domeniu > ] [ FOR < expL1 > ] [ WHILE < expL2 > ]

..

Iesirea din fereastra de editare CHANGE si salvarea modificarilor se face folosind CTRL+ END.

Clauza FIELDS are ca efect afisarea spre editare doar a campurilor specificate in lista < lista campuri >. Daca aceasta clauza lipseste, sunt afisate spre editare toate campurile bazei de date. In lista campurilor pot fi incluse si campuri ale unei baze de date deschise intr-o alta zona de lucru de cat cea curenta.

<domeniu>, FOR, WHILE - specifica domeniul inregistrarilor ce vor fi accesibile spre editare.

Exemplu:

Avand baza de date agenda.dbf, vom deschide o fereastra de editare in care vom afisa doar campurile nume, varsta, sex. Primul si ultimul sunt campuri ale bazei de date, varsta fiind un camp calculat in functie de data nasterii.

CLOSE ALL

USE agenda

CHANGE FIELDS nume, varsta =(DATE() - nascut) /365

USE

Spre deosebire de fereastra de editare CHANGE unde campurile sunt afisate unul sub altul in cadrul aceleasi inregistrari, in fereastra de editare BROWSE aceste campuri sunt asezate pe orizontala unul sub altul. Sintaxa comenzii BROWSE este urmatoarea:

BROWSE

[ FIELDS < lista campuri > ]

[ FOR < expL1 > ]

Modificarea continutului unei baze de date se poate face si cu comanda REPLACE, care spre deosebire de cele 3 nu deschide o fereastra in care utilizatorul introduce noile valori ale campurilor bazei de date, ci realizeaza propriu-zis actualizarea bazei de date cu datele precizate prin comanda. Sintaxa comenzii este urmatoarea:

REPLACE

< camp1 > WITH < expr1 > [ADDITIVE]

[,< cimp2 > WITH < expr2 > [ADDITIVE]]

[< domeniu > ] [FOR < expL1>] [WHILE < expL2 >]

Comanda inlocuieste vechea valoare din < camp1 > cu valoarea rezultata in urma evaluarii expresiei < expr1 > s.a.m.d. Pentru campuri memo, specificand clauza ADDITIVE, acestea nu sunt inlocuite, expresia fiind adaugata la sfarsitul lor.

<domeniu>, FOR, si WHILE specifica domeniul inregistrarilor la care se refera comanda REPLACE, domeniul implicit fiind inregistrarea curenta.

Exemplu:

La baza de date agenda.dbf se va adauga o noua inregistrare cu urmatorul continut :

Nume: Toma

Prenume: Daniel

secventa de comenzi care realizeaza acest lucru fiind:

USE agenda

APPEND BLANK

REPLACE nume WITH 'Toma'

REPLACE prenume WITH 'Daniel'

LIST

USE

Vizualizarea continutului unei baze de date

Afisarea informatiilor dintr-o baza de date pe ecran, la imprimanta sau intr-un fisier se face folosind comenzile LIST si DISPLAY.

Comanda DISPLAY afiseaza continutul bazei de date din zona de lucru curenta, avand sintaxa:

DISPLAY [ [FIELDS ] < lista campuri >]

[< domeniu >] [ FOR < expL1 >] [ WHILE < expL2 >]

[ OFF ]

[ TO PRINTER | TO FILE < fisier > ]

[NOCONSOLE ]

Afisarea informatiilor se face in urmatorul format :

- prima linie reprezinta lista campurilor, identificat prin numele acestora

- urmatoarele linii reprezinta inregistrarea din baza de date (fiecare linie reprezinta cate o inregistrare). Pe prima pozitie, campul 0, se afiseaza numarul de ordine al inregistrarilor din baza de date.

Exemplu:

USE agenda

DISPLAY ALL FIELDS nume, prenume, telefon

&& se afiseaza doar campurile nume, prenume, telefon

USE

Clauza FIELDS se foloseste cu scopul de a afisa doar campurile specificate in < lista campuri >. Absenta acestei clauze determina afisarea tuturor campurilor bazei de date, in ordinea in care apar in structura bazei de date.

< domeniu >, FOR, WHILE determina inregistrarile ce vor fi afisate cu comanda DISPLAY. Daca aceste clauze lipsesc se va afisa doar inregistrarea curenta acesta fiind domeniul implicit al inregistrarilor pentru comanda DISPLAY.

Clauza OFF determina disparitia din formatul de afisare a coloanei 0 reprezentand numarul de ordine al inregistrarilor din baza de date.

Clauza NOCONSOLE - pentru inhibarea afisarii pe ecranul monitorului.

Clauza TO PRINTER - pentru afisarea la imprimanta

Clauza TO FILE - pentru afisarea in fisierul <fisier>

Exemplu:

USE agenda

DISPLAY ALL OFF NOCONSOLE TO PRINTER

&& afisarea doar la imprimanta a continutului bazei de date fara numarul de inregistrari.

Comanda LIST este asemanatoare cu DISPLAY (are aceeasi sintaxa, cu aceleasi semnificatii ale clauzelor) cu urmatoarele diferente:

- domeniul implicit pentru comanda DISPLAY este NEXT 1 (adica inregistrarea curenta) pe cand cel al comenzii LIST este ALL (toate inregistrarile).

- comanda DISPLAY are ca efect afisarea continutului bazei de date, ecran cu ecran, la comanda LIST afisarea este continua, pauza dintre ecrane lipsind.

- comanda LIST nu afiseaza inregistrarile marcate pentru stergere cand avem SET DELETED ON pe cand DISPLAY le afiseaza pe acestea.

Formatul de afisare al comenzilor LIST si DISPLAY contine pe prima linie un antet reprezentand denumirile campurilor afisate. Pentru ca acest antet sa nu apara in formatul de afisare se foloseste comanda:

SET HEADING ON | OFF

unde: ON - determina afisarea antetului

OFF - determina inhibarea afisarii acestuia

Optiunea implicita este ON.

Exemplu:

USE agenda

SET HEADING OFF

LIST && afiseaza fara antet

Indicatorul de inregistrari.

Acesta este asociat unei baze de date la deschidere si este sters la inchiderea bazei de date. Indicatorul de inregistrari contine numarul inregistrarii curente, intr-o baza de date avand la un moment dat o singura inregistrare curenta. La deschiderea unei baze de date indicatorul de inregistrari va indica spre prima inregistrare a bazei de date, adica inregistrarea 1.

Aflarea inregistrarii curente dintr-o baza de date, deci a continutului indicatorului de inregistrari se face folosind functia RECNO( ) cu urmatoarea sintaxa:

RECNO ( [< expN > | < expC >])

Aceasta functie returneaza numarul inregistrarii curente din baza de date cu aliasul < expC > sau deschisa in zona de lucru < expN >. Daca ambele expresii (<expC>, <expN>) lipsesc, functia se refera la baza de date activa.

Schimbarea inregistrarii curente se realizeaza prin intermediul unor comenzi FoxPro, cum ar fi GOTO, SKIP, etc.

Comanda GO sau GOTO, pozitioneaza indicatorul de inregistrari pe o anumita inregistrare dintr-o baza de date. Sintaxa comenzii este urmatoarea:

GO | GOTO [ RECORD ] < expN1 > [IN < expN2 > | < expC >]

GO | GOTO TOP | BOTTOM [ IN < expN2 > | < expC> ]

Prima forma are ca efect pozitionarea indicatorului de inregistrari din baza de date cu aliasul < expC > sau din zona de lucru < expN2> pe inregistrarea cu numarul <expN1>. Forma a doua a comenzii se foloseste pentru pozitionarea indicatorului de inregistrari la extremele bazei de date.

Exemplu:

USE

GOTO 2

? RECNO ( )

GO RECORD RECNO()+1

&& pozitionare pe inregistrarea urmatoare

DISPLAY NEXT 1

GO TOP && pozitionare pe inregistrarea 1

? RECNO ( )

GO BOTTOM && pozitionare pe ultima inregistrarea

USE

Un alt tip de deplasare a indicatorului de inregistrari, este realizat cu ajutorul comenzii SKIP, acesta muta indicatorul peste un numar de inregistrari relativ la inregistrarea curenta. Sintaxa comenzii este urmatoarea:

SKIP [ < expN1 > || < expN2 > || < expC > ]

unde:

< expN1 > - reprezinta numarul de inregistrari peste care se sare ( poate fi atat pozitiv cat si negativ ).

< expN2 > sau < expC > - specifica baza de date la care se refera functia, prin zona in care este deschisa ( < expN2 > ) sau prin aliasul corespunzator ( < expC > ).

Comanda SKIP este echivalenta cu SKIP 1.

Exemplu:

Pentru a insera cate o inregistrare blank pe pozitia 2 si 4 a bazei de date agenda.dbf se foloseste urmatoarea secventa:

USE agenda

GO TO 2

INSERT BLANK BEFORE

SKIP 2

INSERT BLANK BEFORE

USE

Numarul de inregistrari dintr-o baza de date este returnat de functia RECCOUNT(), cu urmatoarea sintaxa:

RECCOUNT ( [< expN > | < expC > ])

Dimensiunea unei inregistrari se obtine cu functia RECSIZE() , care are sintaxa:

RECSIZE ( [ <expN > | <expC > ])

Daca nu se specifica o baza de date ultimele doua functii prezentate, se refera la baza de date curenta.

Stergerea inregistrarilor dintr-o baza de date

Marcarea pentru stergere a uneia sau mai multor inregistrari se face cu ajutorul comenzi DELETE, ce are urmatoarea sintaxa:

DELETE

[< domeniu >] [ FOR < expL1 >] [ WHILE < expL2 >]

[ NOOPTINIZE ]

unde:

<domeniu> FOR si WHILE identifica inregistrarile ce vor fi marcate pentru stergere. Domeniul implicit este inregistrarea curenta.

Accesul la inregistrarile marcate pentru stergere este controlat de comanda SET DELETED care are urmatoarea sintaxa:

SET DELETED ON | OFF

unde:

ON - inregistrarile marcate pentru stergere nu vor fi accesibile celorlalte comenzi

OFF - inregistrarile sunt accesibile indiferent de marcajul de stergere. Starea initiala este OFF.

Exemplu:

USE agenda

CLEAR

SET DELETED OFF

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

&& se sterg inregistrarile cu numar par

LIST && toate inregistrarile din baza de date sunt afisate, cele sterse avand un asterisc in dreptul lor

GOTO 2

DISPLAY && inregistrarea este afisata chiar daca este marcata pentru stergere

DISPLAY

USE

Testarea marcajului de stergere in interiorul unui program se face cu functia DELETED(). Functia returneaza valoarea .T. daca inregistrarea curenta e marcata pentru stergere si valoarea .F. in caz contrar.

Înlaturarea marcajului de stergere se face cu comanda RECALL ce are urmatoarea sintaxa:

RECALL

[< domeniu >] [ FOR < expL1 >] [ WHILE < expL2 >]

[ NOOPTINIZE ]

Înregistrarile care nu sunt marcate pentru stergere nu sunt afectate de comanda RECALL. Domeniul implicit al acestei comenzi este inregistrarea curenta.

Pentru stergerea la nivel fizic se foloseste comanda PACK cu urmatoarea sintaxa:

PACK [MEMO] [DBF]

Comanda realizeaza stergerea fizica a tuturor inregistrarilor marcate pentru stergere, din baza de date.

Clauza MEMO a comenzii PACK are ca efect diminuarea spatiului nefolosit din fisierul MEMO asociat, fara a afecta fisierul bazei de date propriu-zis.

Clauza DBF se foloseste pentru a sterge fizic inregistrarile marcate pentru stergere din baza de date fara a modifica fisierul MEMO asociat.

Comanda PACK fara nici o clauza se refera atat la fisierul bazei de date, cat si la fisierul memo asociat.

O ultima comanda cu privire la stergerea inregistrarilor din baza de date este comanda ZAP cu sintaxa:

ZAP

Comanda sterge fizic toate inregistrarile din baza de date activa.

Accesul la inregistrarile unei baze de date

Pe langa cele doua metode de stergere a inregistrarilor, logica si fizica, care determina daca o inregistrare exista sau nu intr-o baza de date, din punct de vedere al unei comenzi FoxPro, mai exista o metoda de control a accesului la inregistrarile dintr-o baza de date.

Metoda de control al accesului este data de comanda SET FILTER, ce are urmatoarea sintaxa:

SET FILTER TO [<expL>]

Ca efect al comenzi in baza de date vor aparea doar inregistrarile care indeplinesc conditia <expL>.

SET FILTER TO, fara conditie, face ca toate inregistrarile din baza de date sa poata fi accesate.


Document Info


Accesari: 2060
Apreciat: hand-up

Comenteaza documentul:

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


Creaza cont nou

A fost util?

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


in pagina web a site-ului tau.




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

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )