|
FOXPRO sub DOS
1. Generalitati
O baza de date este un fisier cu articole de structura fixa, fiind similara cu un tabel. Articolele fisierului constituie linii in tabel, iar campurile reprezinta coloane ale tabelului.
Structura bazei de date se defineste la crearea sa. Definirea - crearea - unei baze de date presupune definirea urmatoarelor elemente:
- numele bazei de date si extensia numelui
Implicit, extensia numelui este .DBF.
- structura bazei de date (structura articolelor)
Definirea structurii consta in stabilirea numelui, a tipului si a lungimii fiecarui camp al bazei.
Asupra unei baze de date se aplica operatii asemanatoare cu cele care se aplica asupra fisierelor obisnuite:
- deschiderea unei baze de date;
- scrierea de noi articole in baza de date;
- actualizarea bazei de date: modificari, adaugari si stergeri de articole;
- copierea in totalitate sau prin selectie a articolelor bazei de date.
In afara operatiilor mentionate, asupra unei baze de date se pot aplica si alte operatii cum ar fi: modificarea structurii bazei de date, sortarea bazei de date, precum si operatii specifice bazelor de date. O caracteristica importanta a operatiilor asupra bazelor de date - efectuate in FOXPRO - este aceea ca acestea se pot realiza si interactiv. Astfel, introducerea si actualizarea datelor se poate face atat prin program cat si interactiv, avand la dispozitie facilitati puternice de control si de verificare a datelor introduse.
Operatiile asupra bazelor de date se realizeaza prin apelul unor comenzi si functii care au un grad ridicat de abstractizare, utilizatorul fiind astfel degrevat de elementele ce tin de reprezentarea fizica a diverselor structuri si de modul de implementare a acestora.
Comenzi si functii:
CREATE [<fisier> | ?]
Construieste o noua baza de date
Prin aceasta comanda se creeaza o baza de date al carei nume este cel specificat prin parametrul <fisier>. Numele campurilor, tipul si dimensiunea acestora se specifica in cadrul unui dialog care este afisat in momentul lansarii comenzii CREATE. Daca nu se specifica numele bazei de date sau daca se specifica argumentul "?", numele bazei va fi dat in cadrul dialogului mentionat anterior.
COPY STRUCTURE TO <fisier> [FIELDS <lista_campuri>]
[[WIDTH] CDX | [WIDTH] PRODUCTION]
Copiaza structura unei baze de date
Creeaza o noua baza de date, vida, cu numele <fisier> si cu aceeasi structura ca a bazei de date curente. Daca se specifica clauza FIELDS, atunci noua baza de date va contine numai campurile mentionate in lista de campuri <lista_campuri>. Daca baza de date originala are un fisier de index structural compus, atunci si noua baza va avea un fisier de index identic, daca se specifica clauza CDX. Clauza PRODUCTION are acelasi efect ca si clauza CDX.
CLOSE DATABASES
Inchide toate bazele de date
Comanda CLOSE DATABASES inchide toate bazele de date deschise, toate fisierele de index, memo si format. Aceasta comanda selecteaza zona de lucru cu numarul 1.
USE [<fisier> | ?] [IN <expN1<] [AGAIN]
[INDEX <lista_fisiere_index> | ?
[ORDER [<expN2> | <fisier_index_idx>
| [TAG] <nume_eticheta> [OF <fisier_cdx>]
[ASCENDING | DESCENDING]]]]
[ALIAS <alias> ] [EXCLUSIVE] [SHARED] [NOUPDATE]
Deschide o baza de date si fisiere index asociate
Comanda USE deschide o baza de date in zona de lucru curenta, sau intr-o zona specificata. Daca in zona de lucru curenta sau in cea specificata exista o baza deschisa, aceasta va fi inchisa ca urmare a apelului comenzii USE. Apelul comenzii USE fara parametrii determina inchiderea unei eventuale baze deschise in zona de lucru curenta.
Prin parametrul <fisier> se specifica numele bazei de date ce urmeaza a fi deschisa. Daca se specifica caracterul ?, se va afisa un dialog OPEN si lista bazelor de date disponibile, din care se va selecta baza de date dorita.
Prin clauza IN <expN1> se specifica numarul zonei de lucru in care va fi deschisa baza de date; daca se omite acest parametru, baza de date va fi deschisa in zona de lucru curenta.
Parametrul <expN1> din clauza IN poate avea valoarea 0; in acest caz baza de date va fi deschisa intr-o zona de lucru libera, zona care are cel mai mic numar de zona.
Clauza AGAIN: aceeasi baza de date, deschisa intr-o zona de lucru, poate fi deschisa si in alte zone de lucru.
Clauza INDEX <lista_fisiere_index> | ?: aceasta clauza determina deschiderea fisierelor de index, asociate bazei de date, ale caror nume sunt specificate in lista <lista_fisiere_index>.
Clauza ORDER permite sa se specifice explicit un fisier index de control diferit de primul fisier din lista de fisiere de index, sau o intrare index de control.
Clauzele ASCENDING | DESCENDING specifica ordinea de acces la articole, in raport cu valorile cheii de index.
Clauza ALIAS <alias> determina crearea unui alias pentru baza de date in curs de deschidere. Alias-ul este utilizat pentru referirea bazei de date in diverse comenzi si functii. La deschiderea unei baze de date, acesteia i se atribuie automat drept alias numele bazei de date. Rolul clauzei ALIAS este de a permite stabilirea unui alias, diferit de numele bazei de date.
Daca se deschide o baza de date simultan (cu clauza AGAIN) in mai multe zone de lucru, pentru fiecare zona de lucru se construieste implicit cate un alias.
Clauza EXCLUSIVE: Daca se lucreaza in retea, o baza de date poate fi destinata utilizarii exclusive de catre utilizatorul care a deschis-o, prin specificarea clauzei EXCLUSIVE in comanda de deschidere USE.
Clauza SHARED determina, in cadrul unei retele, utilizarea partajata a bazei de date care se deschide.
Clauza NOUPDATE interzice modificarea structurii bazei de date in curs de deschidere.
APPEND [BLANK]
Adauga articole la o baza de date
Aceasta comanda, in absenta optiunii BLANK, deschide o fereastra de editare pentru introducerea de noi articole in baza de date curenta. Daca se specifica optiunea BLANK, efectul comenzii consta in adaugarea unui nou articol ale carui campuri vor fi completate ulterior.
La adaugarea de noi articole sunt actualizate toate fisierele de index deschise.
APPEND FROM <fisier> | ? [FIELDS < lista_campuri> ] [FOR <expL>]
Adauga articolele unui fisier la o baza de date
Adauga la sfarsitul bazei de date curente articolele din fisierul specificat prin parametrul <fisier>.
Clauza FIELDS <lista_campuri>: determina importarea datelor numai pentru campurile specificate in lista de campuri.
Pentru a prelua numai anumite articole din fisierul sursa, se poate utiliza o expresie de filtrare specificata prin expresia logica <expL> din clauza FOR. Nu sunt importate articolele marcate pentru stergere din baza de date sursa. Daca nu este specificata clauza FOR, vor fi importate toate articolele din fisierul sursa.
DELETE [<domeniu>] [FOR<expL1]
[WHILE <expL2>] [NOOPTIMIZE]
Marcheaza pentru stergere articole ale unei baze de date curenta. Vor fi marcate pentru stergere numai acele articole care apartin domeniului specificat prin <domeniu> si pentru care expresia logica <expL1> din clauza FOR are valoarea adevarat. Operatia de marcare continua atata timp cat expresia logica <expL2> din clauza WHILE este adevarata.
Pentru domeniu pot fi specificate valorile:
- ALL;
- NEXT <expN>;
- RECORD <expN>;
- REST.
Valoarea implicita pentru domeniu este articolul curent (NEXT 1).
PACK
Elimina din baza de date curenta toate articolele marcate pentru stergere
Daca baza de date a fost deschisa cu fisiere de index, acestea vor fi actualizate in urma operatiei de stergere.
Dupa operatia de stergere articolele sterse nu mai pot fi recuperate nici intr-un mod.
SORT TO <fisier> ON <camp1> [/A | /D] [/C]
[,<camp2> [/A | /D] [/C] ] [ASCENDING | DESCENDING]
[<domeniu>] [FOR <expL1>] [WHILE <expL2>]
[FIELDS <lista_campuri>] [NOOPTIMIZE]
Sorteaza articolele unei baze de date
Comanda SORT TO sorteaza articolele bazei de date curente, dupa unul sau mai multe campuri si creeaza o noua baza de date cu articolele astfel sortate. Numele noii baze de date sortate este specificat prin parametrul <fisier>. Operatia de sortare determina ordinea fizica a articolelor; accesul la articolele unei baze de date deschise fara fisier de index se face conform acestei ordini.
Specificarea criteriilor de sortare: Ordonarea articolelor se face dupa valorile campurilor <camp1>, <camp2>, ale bazei de date active si care sunt specificate in comanda; este necesara specificarea cel putin a unui camp. Primul camp specificat constituie campul primar de sortare: prima ordonare a articolelor se face dupa valorile acestui camp. Daca in baza de date activa exista mai multe articole pentru care campul <camp1> are aceeasi valoare, atunci articolele cu aceeasi valoare a campului <camp1> vor fi sortate dupa valorile campului <camp2> - campul al doilea de sortare - s.a.m.d.
Campurile de sortare nu pot fi campuri de tip memo sau general.
Parametrii /A si /D, specificati dupa numele de camp, au urmatoarea semnificatie: /A determina o ordonare crescatoare dupa valorile campului respectiv, iar /D determina o ordonare descrescatoare.
Parametrul /C determina nediferentierea majusculelor, aceasta in cazul in care campul asociat este de tip sir de caractere. Daca nu se specifica /C, implicit, comparatia valorilor de tip caracter este senzitiva la majuscule.
Clauzele ASCENDING | DESCENDING: daca se specifica una din aceste clauze, aceasta este valabila pentru toate campurile de sortare pentru care nu sunt prevazuti parametrii /A sau /D. Clauza ASCENDING determina sortarea conform ordinii crescatoare a valorilor campurilor in cauza, iar DESCENDING sortarea conform ordinii descrescatoare a valorilor acestor campuri.
Filtrarea articolelor la sortare: Prin comanda SORT TO se sorteaza numai acele articole ale bazei de date curente care apartin domeniului specificat prin <domeniu> si pentru care este indeplinita conditia <expL1> din clauza FOR. Argumentul <domeniu> poate avea valorile:
- ALL;
- NEXT <expN>;
- RECORD <expN>;
- REST.
Valoarea implicita pentru <domeniu> este ALL.
Copierea articolelor continua atata timp cat valoarea <expL2> din clauza WHILE este adevarata - daca este specificata o astfel de clauza.
Clauza FIELDS <lista_campuri>: noua baza de date care se obtine dupa sortare poate sa contina mai putine campuri decat baza de date originala, daca se specifica clauza FIELDS: noua baza de date va contine numai acele campuri ale bazei de date active care sunt specificate in lista de campuri <lista_campuri>.
Introducerea interactiva a datelor
@ <linie,coloana> GET <var> | <camp> [FUNCTION <expC1>] [PICTURE <expC2>]
[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>]
Creaza o zona de editare GET
Aceasta comanda creeaza o zona de editare a valorii unei variabile sau a unui camp al unei baze de date. Activarea zonelor de editare GET se face prin comanda READ.
Parametrii <linie,coloana> determina locul unde este afisata zona de editare GET.
Prin parametrii <var> | <camp> se specifica numele variabilei, respectiv numele campului pentru care se creeaza zona de editare.
Iesirea din fereastra de editare a unui camp, cu salvarea modificarilor, se face prin tastarea combinatiei Ctrl+W. Daca se tasteaza Escape, se iese din fereastra de editare fara a salva modificarile efectuate.
Clauzele FUNCTION <expC1> | PICTURE <expC2> contin coduri speciale care controleaza modul de afisare si de editare a valorii variabilei specificate in comanda GET.
Clauza DEFAULT <expr1>: in cazul in care se specifica aceasta clauza, iar variabila nu exista, aceasta se va crea automat; expresia <expr1> va determina tipul si valoarea initiala a variabilei.
Clauzele ENABLE | DISABLE permit/interzic accesul la zona de editare in cauza. O zona de editare cu acces interzis nu poate fi selectata. Implicit, este activa clauza ENABLE. Daca toate zonele de editare GET definite sunt interzise, apelul unei comenzi READ este inefectiv.
Clauza MESSAGE <expC5>: daca se specifica aceasta clauza, sirul de caractere specificat prin <expC5> este afisat pe ultima linie a ecranului, in momentul selectarii zonei de editare create prin comanda GET.
Clauza [OPEN] WINDOW <nume_fereastra> este utilizata pentru a edita un camp memo intr-o fereastra definita de utilizator, creata anterior apelului comenzii GET.
Daca in specificarea clauzei WINDOW este inclus cuvantul cheie OPEN, fereastra de editare a campului memo se deschide automat la apelul comenzii READ.
Clauza RANGE [<expr2>] [,<expr3>] este util[ pentru a elimina, cat mai mult posibil, erorile de introducere a datelor. Cele doua expresii <expr2> si <expr3> definesc domeniul de valori ale variabilei sau ale campului unei baze de date, specificat in comanda GET. Daca valoarea introdusa nu este cuprinsa intre cele doua limite <expr2> si <expr3>, se emite un mesaj de eroare. Nu se face controlul de domeniu, daca la editare se tasteaza Enter si daca nu a fost modificata variabila sau campul din comanda GET.
Clauza SIZE <expN2>,<expN3> permite controlul asupra lungimii si inaltimii zonei de editare GET. Implicit, inaltimea zonei de editare este egala cu inaltimea unei linii. Daca se specifica clauza SIZE, se poate crea o zona a carei inaltime sa fie mai mare decat inaltimea unei linii. Prin parametrul <expN2> se specifica inaltimea zonei in numar de linii, iar prin parametrul <expN3> se specifica lungimea zonei in numar de coloane.
Clauza VALID <expL1> | <expN4> determina ca la tentativa de iesire din zona de editare GET sa se evalueze expresia <expL1>; daca aceasta expresie are valoarea adevarat, se considera ca datele introduse sunt corecte si se iese din zona de editare, iar daca valoarea expresiei este fals, se emite un mesaj de eroare. In cazul unei erori, eventualele inlocuiri facute in zona de editare nu afecteaza variabila sau campul din GET. Dupa emiterea mesajului de eroare, se tasteaza cheia Spatiu si se incearca reintroducerea datelor.
Clauza ERROR <expC6>: daca se doreste ca mesajul de eroare, emis cu ocazia evaluarii clauzei VALID, sa fie un mesaj propriu utilizatorului, se va specifica acest mesaj prin parametrul <expC6> din clauza ERROR. Textul mesajului din <expC6> va inlocui mesajul de eroare implicit.
Clauza WHEN <expL2>: accesul la zona de editare GET este conditionat de valoarea expresiei logice <expL2>, daca este specificata in clauza WHEN. Daca valoarea acestei expresii este adevarata (.T.), se poate intra in zona de editare, iar daca aceasta valoare este fals (.F.), zona de editare este inaccesibila si este activat urmatorul obiect GET.
Prin clauzele COLOR SCHEME <expN5> | COLOR <lista_perechi_culori> se poate specifica fie o schema de culori existenta, fie un set de perechi de culori.
@ <linie,coloana> SAY <expr> [FUNCTION <expC1>] [PICTURE <expC2>]
[SIZE [<expN1>,<expN2>] [COLOR SCHEME <expN4> |
COLOR <lista_perechi_culori>]
Afiseaza date pe ecran sau intr-o fereastra
Aceasta comanda afiseaza date pe ecran sau intr-o fereastra definita de utilizator, intr-o pozitie si cu un format specificate.
Daca este activata comanda SET DEVICE TO SCREEN, comanda SAY afiseaza datele pe ecran sau intr-o fereastra definita de utilizator. In schimb daca este activa comanda SET DEVICE TO PRINTER, scrierea datelor are loc la imprimanta.
Parametrii <linie,coloana> se specifica prin expresii numerice, ale caror valori trebuie sa fie mai mari sau egale cu 0. Aceste coordonate determina locul in care incepe scrierea datelor. Pe ecran, prima linie are numarul 0 si ocupa aceeasi pozitie ca bara meniului sistem. Liniile sunt numarate de sus in jos.
In cazul imprimantei, prima linie are numarul 1, iar numarul maxim de linii este determinat de dimensiunea fizica a paginii si de numarul de linii pe pagina.
Pe ecran prima coloana are numarul 0, iar coloanele sunt numarate de la stanga la dreapta. Pentru imprimanta, prima coloana are numarul 1, coloanele sunt numarate de la stanga la dreapta, iar numarul maxim de coloane este determinat de dimensiunea fizica a paginii.
Daca scrierea datelor este directionata spre o fereastra definita de utilizator, cele doua coordonate sunt relative la fereastra respectiva.
Parametrul <expr> determina afisarea/imprimarea valorii expresiei specificate.
@ <linie1,coloana1>, < linie2,coloana2> BOX [<expC>]
Deseneaza o caseta
Aceasta comanda deseneaza o caseta pe ecran sau intr-o fereastra definita de utilizator.
Parametrii <linie1,coloana1> constituie coordonatele coltului din stanga-sus al casetei, iar <linie2,coloana2> coordonatele coltului din dreapta-jos.
Sirul specificat prin <expC> poate contine noua caractere, care se vor utiliza pentru trasarea elementelor casetei. Aceste caractere corespund, in ordinea specificarii, urmatoarelor elemente ale casetei:
- coltul din stanga-sus;
- latura de sus;
- coltul din dreapta-sus;
- latura din dreapta;
- coltul din dreapta-jos;
- latura de jos;
- coltul din stanga-jos;
- latura din stanga.
Cel de al noualea caracter corespunde interiorului casetei. Daca este specificat un singur caracter, chenarul casetei va fi construit cu acest caracter. Daca este omis parametrul <expC>, chenarul casetei este trasat cu linie simpla.
De exemplu, comanda:
@ 10,20,14,60 BOX '*.*.*.*.'
traseaza un chenar avand laturile linii punctate, iar colturile fiind asteriscuri.
2. Accesul la articole
Exista doua moduri de acces la articolele unei baze de date:
- acces secvential;
- acces indexat (direct).
Accesul secvential: presupune articolele ordonate dupa criteriul pozitiei fizice a acestora in fisierul-baza de date. Pozitia articolelor in fisier este data de ordinea cronologica in care au fost create articolele sau de apelul unei comenzi de sortare, prin care se modifica ordinea fizica existenta a articolelor. In accesul secvential articolele sunt afisate si reperate conform ordinii fizice. Reperarea unui articol in acces secvential necesita citirea tuturor articolelor care il preced.
Accesul indexat: constituie unul din mecanismele cele mai importante ale sistemelor de gestiune a bazelor de date. Importanta acestui mecanism rezida atat in posibilitatile de prelucrare oferite, cat si in performantele de timp care se obtin. In cadrul accesului indexat articolele sunt accesate si afisate conform unei relatii de ordine, data de valorile unei expresii speciale - expresia de index; fiecarui articol din baza de date ii corespunde o singura valoare a acestei expresii, valoare care se numeste cheia de index a articolului. Articolele sunt, deci, ordonate dupa valorile cheilor lor de index. Cheile de index ale articolelor unei baze de date sunt memorate impreuna cu 'adresele' articolelor intr-un fisier special, numit fisier de index. Fisierul de index se construieste prin comanda INDEX ON pe baza expresiei de index stabilita de utilizator.
Pentru ca articolele unei baze de date sa poata fi accesate in mod indexat, baza de date trebuie sa fie deschisa cu fisier de index. Pentru aceeasi baza de date pot exista mai multe fisiere de index si, deci, articolele aceleiasi baze de date pot fi accesate dupa mai multe relatii de ordine.
INDEX ON <expr> TO <fisier_idx> | TAG <nume_eticheta> [OF <fisier_cdx>]
[FOR <expL>] [COMPACT] [ASCENDING | DESCENDING]
[UNIQUE] [ADDITIVE]
Creeaza un fisier de index
Creeaza un fisier de index simplu sau un fisier de index compus sau o intrare de index intr-un fisier compus, toate acestea pentru baza de date curenta. Articolele unei baze de date indexate sunt vizualizate si accesate in ordinea data de valoarea expresiei de index <expr>. Prin indexarea unei baze de date nu se modifica ordinea fizica a articolelor acesteia.
Specificarea expresiei de index: expresia de index <expr> poate contine unul sau mai multe nume de campuri ale bazei de date active. Pentru fiecare articol al bazei de date pentru care expresia <expL> din clauza FOR are valoarea adevarat, se evalueaza expresia <expr>, obtinandu-se cate o cheie de index; aceste chei de index formeaza fisierul de index asociat bazei de date curente. Pe baza acestor chei de index se realizeaza accesul indexat la articolele bazei de date.
Specificarea fisierului de index: comanda INDEX creeaza un fisier de index de tip IDX, daca se specifica clauza TO <fisier_idx>. Fisierul de index de tip IDX are extensia implicita .IDX; aceasta poate fi modificata prin specificarea explicita a unei alte extensii sau prin modificarea in fisierul de configurare FOXPRO a extensiei implicite pentru fisierele de index de tip IDX.
Comanda INDEX creeaza un fisier de index compus, daca se specifica clauza:
TAG <nume_eticheta> [OF <fisier_cdx>]
Un fisier de index compus este un fisier de index independent, care consta din mai multe intrari de index (etichete). Fiecare intrare de index este identificata printr-un nume unic <nume_eticheta>. Numarul intrarilor de index nu este limitat.
Fisierele de index compuse sunt intotdeauna compacte si au extensia .CDX.
Pot fi create doua tipuri de fisiere de index compus: unul, fisier de index structural compus, iar celalalt, fisier de index compus independent.
Fisierul de index structural compus se specifica cu TAG <nume_eticheta> si fara clauza OF <fisier_cdx>; acesta are acelasi nume cu baza de date careia ii este asociat si este deschis automat, odata cu deschiderea bazei de date.
Fisierul de index compus, nestructural se specifica prin clauza:
TAG <nume_eticheta> OF <fisier_cdx>
Acesta trebuie deschis explicit printr-o comanda SET INDEX sau USE cu clauza INDEX. Daca fisierul de index compus a fost deja creat printr-o comanda INDEX anterioara si este deschis, atunci, prin clauza TAG <nume_eticheta> se mai adauga acestuia o intrare de index. Daca fisierul de index compus nu exista, el este automat creat.
Specificarea celorlalte clauze din comanda INDEX ON: Prin clauza FOR <expL> se specifica o conditie de filtrare a articolelor bazei de date: se vor crea chei de index numai pentru articolele pentru care este verificata conditia <expL> si deci, numai aceste articole vor fi accesibile prin operatiile de acces indexat la baza de date.
Clauza COMPACT permite crearea unui fisier de tip .IDX compact.
Clauzele ASCENDING si DESCENDING stabilesc ordinea crescatoare sau descrescatoare in raport cu valorile cheilor de index la crearea fisierelor .CDX.
Clauza DESCENDING nu poate fi specificata la crearea unui fisier de index de tip .IDX. Ordinea descrescatoare pentru un astfel de fisier poate fi stabilita prin comanda SET INDEX sau SET ORDER.
Clauza UNIQUE determina includerea in fisierul de index .IDX sau in intrarea de index, numai a primului articol cu o valoare data a cheii de index.
Ca urmare a executiei comenzii INDEX ON, se inchid toate fisierele de index asociate bazei de date curente si anterior deschise (exceptand fisierul de index structural compus). Pentru ca aceste fisiere sa ramana deschise in continuare se va utiliza clauza ADDITIVE.
SET INDEX TO [<lista_fisiere_index> | ?]
[ORDER <expN> | <fisier_index_idx> | [TAG] <nume_eticheta> [OF <fisier_cdx>]
[ASCENDING | DESCENDING] ] [ADDITIVE]
Deschide fisiere sau intrari de index
Comanda SET INDEX TO deschide unul sau mai multe fisiere de index pentru baza de date curenta.
Fisierele de index care urmeaza a fi deschise se specifica prin numele lor, separate prin virgula, in lista de fisiere de index <lista_fisiere_index>. Aceasta lista poate contine orice combinatie de fisiere .IDX sau .CDX.
Daca baza de date curenta are asociat un fisier de index structural compus, acesta se deschide automat odata cu deschiderea bazei de date.
Daca in comanda SET INDEX TO se specifica ?, se va afisa un dialog OPEN si o lista de fisiere de index .IDX din care se va selecta fisierul dorit.
Apelul comenzii SET INDEX TO, fara nici un argument, determina inchiderea tuturor fisierelor de index asociate bazei de date curente, cu exceptia fisierului de index structural compus.
Un singur fisier de index sau o singura intrare de index stabileste, la un moment dat ordinea de acces si de afisare a articolelor bazei de date; acest fisier sau intrare de index se numeste fisier index de control (master), respectiv intrare index de control. Implicit primul fisier de index deschis este fisier de index de control, respectiv prima intrare din fisierele .CDX deschise, este intrare index de control.
Clauza ORDER <fisier_index_idx> stabileste fisierul cu numele <fisier_index_idx> drept fisier index de control.
Daca nu se specifica clauza ADDITIVE, toate fisierele de index deschise anterior apelului comenzii SET INDEX vor fi inchise, cu exceptia fisierului de index structural compus.
Clauza ADDITIVE permite deschiderea unor noi fisiere de index, fara inchiderea celor anterior deschise.
3. Identificarea unei baze de date - zone de lucru si alias-ul unei baze de date
Pentru a putea prelucra o baza de date, aceasta trebuie mai intai sa fie deschisa, operatie care se realizeaza prin comanda USE. Pot fi deschise concomitent mai multe baze de date.
In apelul anumitor comenzi si functii, bazele de date sunt identificate si specificate printr-un asa numit numar de zona de lucru. Zona de lucru corespunde blocului de descriere al unui fisier obisnuit (FDB), in care sunt memorate informatii despre fisier si starea acestuia pe parcursul prelucrarii. Numarul de zona de lucru este un mijloc de identificare dinamic si flexibil a unei baze de date, asemanator cu codul de identificare a unui fisier obisnuit. Utilizarea numarului de zona de lucru, pentru specificarea (in comenzi si functii) a unei baze, permite ca apelul comenzii respective sa fie independent de numele bazei.
Numarul de zona de lucru este asociat automat bazei de date, cu ocazia deschiderii acesteia. FOXPRO permite utilizarea a 255 de zone de lucru, in consecinta pot fi deschise simultan 255 baze de date. In fiecare moment este activa o singura zona de lucru; la deschiderea unei baze de date, implicit, acesteia i se asociaza numarul zonei de lucru active. Baza de date deschisa in zona de lucru activa se numeste baza de date curenta. Referirea campurilor bazei de date curente se face simplu, prin specificarea numelui de camp. Pentru referirea unui camp al unei baze de date deschise intr-o zona de lucru diferita de cea activa, este necesara prefixarea numelui de camp cu alias-ul bazei de date. Activarea unei zone de lucru este la dispozitia utilizatorului si se face prin comanda SELECT. de exemplu, prin urmatoarele comenzi:
SELECT 1
USE baza_x
SELECT 2
USE baza_y
se deschide baza de date cu numele baza_x in zona de lucru 1 si baza de date baza_y in zona de lucru 2; zona de lucru activa este zona cu numarul 2, deci baza de date curenta este baza_y.
Un alt mijloc de specificare dinamica a unei baze de date este alias-ul bazei de date. Alias-ul unei baze este un nume care se creeaza si se asociaza bazei de date la deschiderea sa; alias-ul bazei va putea fi in continuare utilizat pentru identificarea bazei respective, pana la inchiderea acesteia.
4. Reperarea articolelor - pointerul de articol
Fiecarei baze de date deschise i se asociaza o variabila interna, a carei valoare indica articolul curent al bazei de date. Aceasta variabila se numeste pointer de articol. Valoarea acestei variabile coincide cu numarul de ordine in fisier al articolului curent si se poate obtine prin apelul functiei predefinite RECNO(). La deschiderea unei baze de date, fara fisier de index, pointerul de articol are valoarea 1 - repereaza primul articol al bazei de date. In urma unor operatii de cautare de articol, pointerul de articol va repera articolul gasit. De asemenea, pointerul de articol este actualizat si prin deplasarea barei de defilare din fereastra BROWSE sau in urma unor operatii care prin natura lor schimba articolul curent al bazei de date.
Comanda BROWSE afiseaza articolele bazei de date curente si permite actualizarea ei.
RECNO([<expN> <expC>)
Furnizeaza numarul articolului curent
Functia RECNO() furnizeaza numarul articolului curent al bazei de date care este deschisa in zona de lucru cu numarul <expN> sau al bazei de date cu alias-ul <expC>. Daca nu se specifica nici un parametru, functia RECNO() se aplica bazei de date curente.
5. Instructiuni, comenzi si functii de baza ale limbajului FOXPRO
MODIFY COMMAND [<fisier>
Deschide o fereastra de editare, care permite crearea sau modificarea unui program.
Inchiderea cu salvare a ferestrei de editare se realizeaza fie prin tastarea combinatiei de taste CTRL+W, fie prin selectarea optiunii CLOSE din meniul FILE.
Inchiderea fara salvare a ferestrei de editare se face prin tastarea combinatiei de taste CTRL+Q sau prin tastarea cheii ESCAPE.
Prin parametrul <fisier> se poate specifica numele programului care urmeaza sa se editeze. Daca acest nume nu are prevazuta extensia de nume, se presupune implicit extensia .PRG.
Daca se omite parametrul <fisier>, se va deschide o fereastra de editare pentru un program cu numele initial UNTITLED.PRG. La inchiderea acestei ferestre de editare se poate specifica un alt nume pentru fisierul care se salveaza.
Daca in comanda se prevede simbolul ?, se initiaza un dialog Open si se afiseaza o lista cu fisierele existente, din care se va face selectia fisierului dorit; fisierele afisate sunt cele care au una din urmatoarele extensii: .PRG, .MPR, .SPR sau .QPR.
DO <fisier1> [WITH <lista_par>] [IN <fisier2>]
Apeleaza un program sau o procedura
Executa un program sau o procedura, al caror nume este specificat prin <fisier1>. Unitatea apelata poate contine alte comenzi DO, nivelul de imbricare al acestora fiind limitat la 32. Revenirea din unitatea apelata se produce la intalnirea uneia din comenzile RETURN, CANCEL, QUIT sau la atingerea sfarsitului de fisier in care se afla unitatea apelata.
Clauza WITH este utilizata pentru transmiterea de parametrii unitatii apelate. Parametrii specificati in lista de parametrii <lista_par> se separa prin virgula si constau din expresii.
Numarul maxim de parametrii ce pot fi transmisi este limitat la 24.
Prin clauza IN se precizeaza ca unitatea apelata se afla in fisierul <fisier2>.
QUIT
Inchide o sesiune de lucru FOXPRO