Sunteți pe pagina 1din 15

1 INIIERE N LIMBAJUL DE PROGRAMARE DELPHI

1.1 INTRODUCERE

Clasele i obiectele sunt noiuni strns legate una de alta. n particular fiecare obiect este un exemplu a unei careva clase, iar clasa poate crea orice numr de obiecte. n majoritatea cazurilor clasele sunt statice, adic toate particularitile i coninutul lor sunt determinate n procesul de compilare. De aici rezult c orice obiect creat se refer la o clas strict determinat. Obiectele, invers, n procesul de execuie a programului se creaz i se distrug foarte des noiune dat de Gadi Buci.
Metodele claselor permit adresarea la informaia intern despre clas, fr crearea exemplarelor clasei obiectelor. Orice obiect are proprieti i evenimente. Proprietile sunt caracteristicile obiectului dat, iar evenimentele sunt aciunile ce se efectueaz n momente necesare. Fcnd o analogie cu un obiect real, cum ar fi de exemplu un avion, o proprietate de-a lui este lungimea, iar un eveniment este luarea stratului dup nceperea lucrului motorului. Proprietile i evenimentele obiectelor se stabilesc in Object Inspector, n paginile respective. Trebuie de menionat c deoarece unele componente provin de la acela tip, ele au i unele proprieti, evenimente asemntoare.

1.1.1 Mai mult productivitate

Doar cerinele utilizatorilor de azi privind funcionalitatea aplicaiilor cresc la fel de repede precum scad termenele de predare. Presiunea sporit asupra dezvoltatorilor de programe face ca acetia s nu se mai mulumeasc doar cu un compilator foarte rapid; dezvoltarea este frnat de numeroi factori si soluiile nsumate pot duce la salturi spectaculoase de productivitate. Object Pascal a dispus ntotdeauna de avantajele tradiionale ale compilatorului care depisteaz erori logice provenite din cod incorect ori ambiguu, ca si de verificrile stricte de tip. n noua versiune, compilatorul continu s compileze codul chiar si dup gsirea primei erori, oferind o imagine complet a corectitudinii programelor, util mai ales n depanarea proiectelor mari. Contrar compilatoarelor C++, rareori o prim eroare induce raportarea unei ntregi serii de erori fr relevant.

Compilatorul ofer acum un sistem de diagnosticare a erorilor mult mai complet incluznd detectarea utilizrii de variabile sau pointeri neiniializai, variabile neutilizate, rezultate neutilizate returnate de funcii, bucle goale si nepotriviri de tipuri. Analizorul sintactic a devenit mai subtil, permindu-si sugestii utile mai ales programatorilor nceptori. Tot acetia din urm au tendina de a comasa ntregul cod ntr-o singur unitate greu de ntreinut si depanat. Pentru a-l ncuraja sa-si separe n mod logic munca n uniti distincte cu interfee strict delimitate, Delphi le ofer selecia vizual a unitilor care se includ n clauza uses. Urmtorul pas logic pentru ncurajarea programrii modulare a fost referina automat la componente coninute n forme diferite. Dei proprietile sau metodele componentelor din alte forme dect cea curent erau accesibile programatic (prin scrierea de cod), n faza de design erau inaccesibile. Facilitatea de a referi componente din alte forme ale proiectului n timpul dezvoltrii vizuale permite separarea modulelor care ncapsuleaz structurile de date ca si relaiile dintre acestea de modulele care implementeaz interfaa cu utilizatorul. n acelai context se nscrie si noul tip de obiect vizual - DataModule - destinat stocrii componentelor non-vizuale cum ar fi tabelele, query-urile si sursele de date pentru a ncuraja separarea logicii de baze de date si de calcul de elementele de prezentare vizual pentru interaciune cu utilizatorul. Structura bazei de date poate fi definit n mod consistent ntr-un modul de date o singur dat pentru ntregul proiect, iar obiectele coninute de acesta pot fi referite apoi din diverse alte forme. Poate cea mai important obiecie a puritilor programrii obiectuale fat de tehnica vizual a precedentei versiuni a lui Delphi a fost imposibilitatea de a deriva - vizual - noi forme prin motenirea celor existente. Este natural - ntr-un mediu complex de proiectare s creezi obiecte standard, din care urmeaz s fie derivate obiecte concrete care s moteneasc imediat orice modificare s-ar efectua n obiectele de baz. Delphi 2 preia aceast caracteristic fundamental OOP si o extinde la mediul vizual de dezvoltare. Prin

tehnica motenirii vizuale se pot crea - n faza de design - noi forme care s preia proprietile, evenimentele si metodele formei originale pe oricte nivele de motenire, fr a induce penalizri de performant n aplicatia final. Pentru formele cu caracter mare de generalitate - utilizabile n mai multe proiecte Delphi 2 ofer un mediu de stocare - Object Repository - partajabil chiar de membrii unei echipe ntr-o reea local. Tot aici pot fi stocate module de date, biblioteci DLL sau experi. Orice aplicaie poate moteni, referi sau copia un obiect din Object Repository.
1.1.2 Suport extins pentru aplicaiile de baze de date

Numeroase snt extensiile de baze de date care pot fi regsite n actuala versiune de Delphi si care uureaz considerabil surmontarea problemelor specifice ridicate de proiectele de baze de date. Dicionarul de date stocheaz si utilizeaz informaia despre coninutul si comportamentul datelor din tabele. Aici se pot specifica atribute extinse de cmpuri precum valorile minim, maxim si implicit, opiunile de formatare n afiare si editare. Este locul ideal pentru a stabili si asigura integritatea datelor. Formele n care urmeaz s fie utilizate vor prelua instantaneu caracteristicile si vor stabili conexiunile la selectarea cmpurilor de date. Componentele de acces la bazele de date au fost rescrise n ntregime pstrnd ns interfaa versiunilor precedente. Astfel, tabelele si query-urile snt completate cu proprieti si evenimente de filtrare dinamic a datelor si ofer evenimente suplimentare pentru tratarea extins a erorilor. Exist o proprietate care permite utilizarea facilitii de stocare n cache a modificrilor (detalii despre cache updates mai jos). Tabelele pot face uz de tehnica special BDE de filtrare a datelor printr-o expresie de tip SQL care garanteaz obinerea unui set editabil de nregistrri (ceea ce nu ntotdeauna este posibil printr-un query) cu minimum de consum de memorie. Paleta de acces la baze de date s-a mbogit cu o form special de query TUpdateSQL - care preia operaiunile de tergere, inserare si actualizare de nregistrri spre

deosebire de clasicul TQuery, care este rezervat acum doar pentru operaiuni de interogare. Remarcabil este editorul vizual de compunere rapid a frazei SQL, inclus n toate versiunile pachetului spre deosebire de editorul lui TQuery rezervat n continuare pentru greu accesibilul pachet Delphi Client-Server. De o atenie deosebit se bucur si componentele vizuale de prezentare si editare a datelor. Obiectele DBLookupCombo si DBLookupList snt pstrate numai pentru compatibilitate; nlocuitoarele lor mai versatile si mai performante snt acum DBLookupComboBox si DBLookupListBox. Omniprezentul DBGrid este semnificativ mbogit cu faciliti de formatare la nivel de coloan si include tehnici de cutare si lookup n cmpul curent. Un nou component - DBCtrlGrid permite prezentarea mai multor nregistrri dintr-o tabel, fiecare avnd rezervat propriul spaiu de afiare n care se pot plasa toate celelalte tipuri de controale de date pentru editarea cmpurilor. Afiarea unei liste de imagini dintr-o tabel se poate face astfel fr a mai scrie vreo linie de cod. n precedenta versiune a bibliotecii de componente se resimea puternic absenta unui set de componente pentru dezvoltarea vizual de rapoarte. Greul Report Smith era n mod evident destinat aplicaiilor de corporaie bazate pe server-e SQL, fr a se potrivi cu necesitile unei aplicaii desktop. Din fericire industria shareware a produs rapid cteva asemenea soluii, dintre care Borland a cumprat-o pe cea mai reuit si a inclus-o n toate pachetele de Delphi. QuickReport reprezint un set de 11 componente care se integreaz perfect cu componentele de acces la bazele de date (TTable, TQuery), dar pot prelua datele si din vectori, liste sau orice fel de variabile. Rapoartele se redacteaz sub forma clasic de benzi care pot include titluri, cmpuri calculate, de nsumare si de sistem, dar si imagini bitmap sau metafile ori forme geometrice simple. Snt posibile rapoarte master-detail pe mai multe nivele sau cu mai multe seturi detail si grupate pe criterii foarte diverse, inclusiv cmpuri calculate. Benzile pot reprezenta seturi detail, antete sau subsoluri de pagin, grup sau raport si pot fi organizate pe mai multe coloane sau n format de etichete multiple, iar calculele pot fi iniializate la nivel de band. Datele se pot previzualiza n faza de design iar un component special permite previzualizarea lor n timpul rulrii. Pentru baze de date mici (de ordinul zecilor de mii de nregistrri) Quick Report este cu un ordin de mrime mai

rapid dect Report Smith. Ca urmare ns a includerii lor n fiierul executabil sub form de resurse, rapoartele snt complet inaccesibile utilizatorului final pentru modificri.
1.1.3 Mai mult putere n motorul de baze de date

Prezentarea lui Delphi 2 nu putea omite noua versiune pe 32 bii a lui Borland Database Engine, pe care se bazeaz performantele obinute de programele Delphi de baze de date, aceleai de altfel cu cele obinute cu Paradox sau Visual dBASE. BDE comport o arhitectur obiectual care permite un acces simplu si nativ din limbajele obiectuale la funciile ncorporate de un nivel foarte nalt, de la operaiuni cu seturi de date prin interogri SQL sau QBE si filtre pn la suport navigational complet prin relaii masterdetail si lookup. Noua concepie pe 32 bii se reflect n suportul pentru multitasking preemptiv: mai multe programe pot fi deservite simultan de BDE si pot accesa aceeai baz de date n acelai timp. n plus, n cadrul aceluiai program se pot executa simultan mai multe operatiuni BDE separate n fire de execuie diferite. Este posibil astfel execuia de queryuri multiple n spate n timp ce n fat utilizatorul editeaz o tabel. BDE suport acum nume lungi, descriptive (260 caractere incluznd si spatii) de tabele desktop, inclusiv n fraze SQL sau QBE. Numele de tabele SQL snt n general limitate la 30 de caractere de server-le SQL corespunztoare. Accesul la bazele de date de pe server-e se poate efectua acum prin utilizarea conveniei UNC (convenia numelui universal) preferat de Win95 si NT maprii discurilor logice. Nucleul de interogare SQL este complet rescris si separat acum de nucleul QBE. Performanta interogrilor SQL pe tabele desktop a crescut substanial si au czut o serie de restricii din subsetul Local SQL, care se apropie acum si chiar depete standardul SQL 92. Snt posibile includerea de subquery-uri n clauzele WHERE si HAVING, utilizarea de expresii n funciile de agregare (gen SUM( Cmp1+Cmp2) sau chiar SUM( MIN(Cmp1))), ca si n clauzele GROUP BY si ORDER BY, precum si utilizarea

operatorului UNION. n parantez fie spus, bug-ul care mpiedica un full outer join cu cmpuri multiple de legtur persist nc si n noua versiune. Subseturile de nregistrri returnate de interogri asupra mai multor tabele pot fi editate cu reflectarea modificrilor n tabelele originale. Subseturile rezultate din query-uri pot fi suplimentar rafinate prin utilizarea de filtre. O mbuntire care va ndeprta comarul multor dezvoltatori de baze de date desktop este suportul tranzacional complet pentru tabele Paradox si dBASE. Modificrile tabelelor pot fi grupate ntr-o tranzacie si efectuate (commit) sau anulate (rollback) integral, asigurnd actualizarea bazei de date de o manier consistent si cu pstrarea integritii refereniale. Driver-ul pentru tabele Paradox > ver.6 este capabil de index secundar unic, index cu ordonare descresctoare si cmpuri care se auto-incrementeaz, n timp ce driver-ul dBASE suport acum ncriptarea tabelelor si index n format Clipper. Facilitatea de efectuare local a modificrilor (cached updates) permite utilizatorilor s efectueze operaiuni asupra bazei de date ntr-o perioad mai lung de timp fr a modifica imediat baza de date de pe server, reducnd la minimum consumul de resurse pe server ca si traficul pe reea. Dezvoltatorii de aplicaii client-server SQL vor aprecia posibilitatea de a monitoriza frazele SQL care se transmit server-ului la fiecare execuie de funcie BDE, ca si utilizarea de guvernatori care limiteaz numrul de nregistrri din seturile de date returnate de server n scopuri de accelerare a procesului de dezvoltare.
1.2 SPECIFICUL REALIZRII SQL N DELPHI Aplicaiile Delphi se adreseaz la date prin intermediul BDE (Borland Database Engine). Tipul de acces la bazele de date variaz n funcie de tipul bazei de date. Bazele de date locale Paradox, dBASE, MS Access i FoxPro sunt apelate de BDE prin intermediul driver-ilor standarde. Datele din serverele SQL snt primite datorit utilizrii sistemului special de driver-e SQL Links. Un rol important n prelucrarea i trimiterea cererii l joac sistemul de prelucrare a cererilor component a procesorului BD. Toate sistemele de gestionare a bazelor de date nu utilizeaz limbajul SQL ca mijloc principal n lucru cu datele. Cu toate acestea, BDE cu ajutorul driver-ului standard respectiv transleaz cererile ce vin de la aplicaii ntr-o form neleas de sistemul de gestiune al

bazei de date i primete rspuns. Deoarece cererea ctre orice BD local se execut de un singur mecanism, exist o sintax unic SQL pentru lucru a astfel de date. Aceast variant poart denumirea de SQL local i este o parte component din standardul SQL92. Toate serverele BD care lucreaz cu BDE prin SQL Links sunt nite sisteme industriale complicate i lucreaz pe baza extensiilor proprii ale limbajului. n acest caz BDE pur i simplu transmite cererea la server, fr a o transla sau modifica. Este evident c, n acest caz elaboratorul aplicaiei trebuie s cunoasc aceast variant SQL.

1.2.1 Mecanismul de funcionare a cererilor n aplicaiile BD Delphi

Rolul principal n pregtirea i dispecerizarea cererilor SQL l joac BDE. nsi prelucrarea cererilor este efectuat de sistemul de prelucrare a cererilor un element special al arhitecturii procesorului BD, care identific setul de date al cererii, ndeplinete analiza sintaxei i, n dependen de parametrii BDE setai, transmite varianta local a cererii driver-ului standard al BD respective sau adreseaz cererea serverului BD prin sistemul de driver-e SQL Links. n calitate de iniiator al cererii este programul aplicaie. Pentru crearea i executarea cererilor se folosete componenta TQuery, care conine textul cererii i ncapsuleaz setul de date cu rezultatul executrii cererii. Acest set de date poate fi utilizat la fel ca i orice alt set de date creat cu ajutorul componentei TTable. Primind comanda de executare a cererii, componenta TQuery iniializeaz pregtirea cererii ctre executare, care include cteva etape. Sarcina principal de pregtire a cererii crearea legturii dintre sistemul de gestiune al BD care va executa cererea, i setul de date al componentei TQuery respective. Dac acest lucru a fost realizat, atunci se determin modalitatea de executare a cererii accesul local prin intermediul driver-ului standard sau transmiterea textului cererii la server. Dup aceasta se seteaz valorile pentru variabilele parametrilor cererii. Dac cererea se execut local, atunci ea se transmite prin intermediul driver-ului standard la sistemului de gestiune al BD respectiv pentru a fi executat de acesta. Prin legtura creat la pregtirea cererii rezultatul se transmite n setul de date al aplicaiei. Dac cererea a fost adresat serverului SQL, atunci se presupune c ea are o sintax specific, corespunztoare serverului dat. n acest caz toat pregtirea special a parametrilor cererii se execut de partea serverului. BDE

asigur numai transmiterea cererii i ntoarcerea rezultatului de execuie la setul de date al aplicaiei. nc o modalitate de executare a cererilor pentru serverul SQL adresarea direct la funciile API a serverului respectiv. Aceasta ns, este metoda cea mai rapid, dar i cea mai complicat pentru elaboratori.
1.2.2 Componenta TQuery

Componenta TQuery, la fel ca i componenta TTable se utilizeaz pentru crearea i gestionarea cu setul de date. Pentru componenta TTable este necesar de a seta proprietatea DatabaseName, care determin baza de date, i proprietatea TableName, care determin tabelul din baza de date sursa nemijlocit a datelor. Pentru componenta TQuery se fixeaz de asemenea proprietatea DatabaseName, iar pentru setarea sursei datelor servete proprietatea SQL, care conine textul cererii. De fapt, acesta tot este denumire a tabelului (n cerere ea se conine ntotdeauna), numai cu condiii adugtoare de selectare a datelor. De exemplu, cererea de mai jos:

Select * from RFinanciar


conine un set de date identic cu cel al tabelului RFinanciar i prezint faciliti similare de lucru cu aceste date. Ierarhia prinilor acestor dou componente este de asemenea similar: TDataSet TBDEDataSet TDBDataSet. Aceasta ne dovedete nc odat, c menirea principal a componentei TQuery crearea setului de date i asigurrii accesului la el din aplicaie. Cu toate acestea componenta TQuery reprezint un instrument puternic i flexibil de realizare i susinere a funciilor de baz i secundare a aplicaiei. Cu ajutorul acestei componente pot fi uor soluionate astfel de probleme, care cu ajutorul componentei TTable se soluioneaz mult mai greu, sau nu se soluioneaz deloc. Nu trebuie s uitm c aceste avantaje asigur nu nsi componenta TQuery, dar limbajul SQL. La elaborarea aplicaiilor client pentru servere SQL aceast component trebuie s joace rolul principal. n cazul aplicaiilor locale de asemenea exist un numr mare de probleme, care pot fi soluionate mai comod cu ajutorul componentei TQuery. ns exist multe situaii, n care utilizarea componentei TTable este mai avantajoas. n afar de asta, componenta TQuery creaz un set de date cu o structur numai din acele cmpuri, care snt indicate n textul cererii. Structura

setului de date a componentei TTable coincide cu structura tabelului BD (dac obiectele cmpurilor snt dinamice). Din aceast cauz n lucrul cu cteva cmpuri din setul de date foarte mare componenta TQuery permite de a economisi resurse. Lucrul cu cmpurile din componenta TQuery este similar ca i cu TTable. Obiectele cmpurilor pot fi statice i dinamice. Cmpurile calculabile pot fi create cu ajutorul redactorului cmpurilor sau prin crearea expresiei calculabile n cadrul cererii. Datorit motenirii, componenta TQuery are posibilitatea de a aplica mecanismele de filtrare, cutare, etc. asupra nscrierilor din setul su de date. Aceasta i asigur componentei TQuery o flexibilitate adugtoare. Reprezentarea datelor pentru componenta TQuery se efectuiaz prin intermediul componentei TDataSource. Proprietile i metodele componentei TQuery snt prezentate n tabelul de mai jos.

Proprietile i metodele componentei TQuery Declararea Proprietile


property boolean Constrained: public

Tab. 1

Tipul

Descrierea

n cazul valorii true interzice introducerea n setul de date astfel de valori, care nu corespund condiiilor de selectare a cererii. Se utilizeaz numai n cazul BD locale.

property TDataSource

DataSource:

public

Face

referin

la

componenta

TDataSource, din setul de date al creia se seteaz valorile parametrilor.

property Local: boolean

read only

Valoarea

true

nseamn,

cererea apeleaz tabelul local n cazul valorii true parametrii

property

ParamCheck:

public

boolean

cererii

se

rennoiesc

odat

cu

modificarea proprietii SQL n timpul executrii. property word property word]:TParams Params[Index: ParamCount: read only public ntoarce numrul de parametri ai cererii. Lista indexat a obiectelor

TParams, fiecare corespunztor unui parametru a cererii.

property boolean

Prepared:

public

ntoarce executare.

rezultatul

executrii

operaiei de pregtire a cererii de

property boolean property integer

RequestLive:

public

n cazul valorii false rezultatul cererii nu poate fi redactat.

RowsAffected:

read only

ntoarce modificate a

numrul setului de

nscrierilor date din

momentul ndeplinirii ultimei cereri. property SQL: TStrings public Conine textul cererii. (continuare) Tab. 1 property PChar property HDBIStmt StmtHandle: read only SQLBynary: public Proprietate intern de asigurare a lucrului cu BDE. ntoarce obiectului un exemplar cererii al din

corespunztor

BDE. Se folosete la chemarea direct a funciilor BDE. property Text: PChar read only property boolean UniDirectional: public Pointer la masivul de simboluri care conine textul cererii trimis n BDE. Fixeaz tipul cursorului de date utilizat.

Metodele Procedure ExecSQL procedure GetDetailLinkFields


(MasterFields, DetailFields: TList); override public Execut cererea fr deschiderea setului de date.

public

Complecteaz MasterFields i DetailFields

listele cu

exemplarele obiectelor cmpurilor a dou tabele ale cererii, care se gsesc n relaia unul la mai muli.

procedure GetProviderAttributes (List: TList); override function ParamByName(const Value: string): TParam

public

ntoarce

parametrul

List

valorile parametrilor setului de date.

public

ntoarce referin la un exemplar al obiectului parametrului cu numele transmis n parametrul funciei Value.

procedure Prepare procedure UnPrepare

public public

Pregtete cererea de executare. Elibereaz resursele ocupate la pregtirea cererii de executare.

Textul cererii este determinat de proprietatea SQL, la setarea cruia se utilizeaz redactorul simplu care se activeaz prin apsarea butonului proprietii din Object Inspector. Executarea cererii poate fi realizat prin trei metode. Dac cererea ntoarce rezultatul n setul de date (de exemplu, folosete operatorii INSERT, DELETE, UPDATE), atunci se folosete metoda ExecSQL. Dup executarea cererii setul de date al componentei nu se deschide. ncercarea de a folosi metoda Open pentru astfel de cerere va duce la eroare. Pentru a permite redactarea setului de date a cererii este necesar de a seta valoarea True proprietii RequestLive. Aceast proprietate nu va fi activat pentru cererea, rezultatul creia nu se modific din definire.

Pentru pregtirea de execuie a cererii se folosete metoda Prepare. Dei aceast operaie se execut automat de ctre BDE, poate aprea totui o situaie n care elaboratorul va fi nevoit s foloseasc aceast metod. Metoda UnPrepare elibereaz resursele alocate n procesul de pregtire a cererii. Proprietatea Params permite elaboratorului de a modifica condiiile de selectare a cererii n dependen de situaia curent. Aceast proprietate reprezint un set de parametri a cererii ce pot fi modificai. 1.3 DELPHI I PARADOX

Paradoxul asocierii unui compilator cu un sistem de gestiune a bazelor de date este numai aparent. Desi un mediu RAD nu este obligatoriu si un mediu de dezvoltare de aplicatii de baze de date, nealinierea la cererea principal a pietii poate scoate din competitie cel mai performant sistem. Borland dispunea nu numai de atuul unui compilator remarcabil ci si de o tehnologie avansat de baze de date, completat n ultima vreme cu dezvoltarea Interbase SQL si achizitionarea lui ReportSmith. Iar cum produsul n care a investit cel mai mult se numeste Paradox, cu ce altceva dect Paradox putea s semene cel mai mult suportul de baze de date al lui Delphi!? Delphi, intrinsec, nu are ncorporat nici un fel de suport de baze de date. Totusi, componentele specializate n acces la baze de date livrate n standard sunt att de complete nct transform efectiv dezvoltarea unei forme ntr-o familiar editare de machet cu tabele si query-uri n cele mai variate relatii de one-to-many, many-to-many, one-to-manyto-many-to...etc., cu controale din cele mai diverse, de la cmpuri de editare cu validare la cmpuri calculate, de la tabele cu editare in-place la cmpuri lookup combo box sau list box. Nu lipseste nici clasicul navigator cu butoane de nainte-napoi, stergere, inserare, actualizare, etc. Dezvoltatorul detine un control total asupra interactiunilor dintre utilizator si baza de date prin intermediul unui set complet de evenimente generate de obiecte dataset (tabele si query-uri) si datasource (interfat ntre dataset si cmpurile de editare). Exist astfel posibilitatea de a efectua validri nainte de actualizarea modificrilor n tabel, de a primi

controlul naintea inserrii sau stergerii unei noi nregistrri sau la prima tentativ de modificare a nregistrrii curente. Iar lista de posibilitti rmne deschis. Cel mai bine se vor simti programatorii de Paradox care vor regsi aceeasi filozofie n manipularea tabelelor prin operatiuni familiare precum Insert, Edit, Cancel, Post (Do_It), Next, First, Last, etc. Cmpurile unei nregistrri sunt accesibile ca obiecte componente distincte prin intermediul editorului de cmpuri al tabelei, existnd tipuri distincte pentru fiecare format, inclusiv imagine, memo sau cmp binar (BLOB). Adesea, singura operatiune cu cmpuri efectuat prin program este atribuirea sau citirea valorii unui cmp. Accesul se face prin intermediul propriettii Value si mentinerea sincronizrii cmpului cu controlul de editare asociat sau cu tabela se face automat prin metodele mostenite. n spatele scenei se gseste o implementare deosebit de puternic a accesului la baze de date. Obiectul tabel trateaz n mod unitar att o tabel Paradox sau dBase ct si una SQL. Nu este necesar nici un fel de modificare n cod sau n propriettile tabelei pentru a muta o aplicatie de pe o baz de date local pe o baz de date echivalent de pe un server SQL! Nu exist de asemenea nici o limitare n lucrul simultan cu tabele provenind din surse diferite. Pe aceeasi form pot coexista tabele SQL si un spreadsheet Excel provenind dintr-o surs ODBC. Remarcabil este si aducerea la un numitor comun a diverselor specii de index, programatorul utiliznd transparent un index secundar Paradox, un index DBase sau unul SQL. ntruct editoarele de componente nu dispun de facilitti de creare, editare sau interogare de baze de date n scopuri de testare a aplicatiilor, Delphi este nsotit de Database Desktop - un Paradox miniatural capabil s creeze si restructureze tabele Paradox si DBase dar si SQL, fr capabilitti de forme si rapoarte - evident.
1.4 SQL CUVNTUL LA MOD

Doar utilizarea tabelelor, chiar cu filtre si legate n relatii complexe, nu mai satisface adesea nici mcar n scopuri de editare. Iar a interoga navignd prin tabele si testnd relatii a devenit nu numai desuet si neproductiv dar chiar generator de bug-uri.

Utilizarea obiectele tip TQuery deschide perspective remarcabile ctre cele mai diverse scheme de prelucrare sau editare a datelor. Query-urile sunt n esent obiecte de executie a unei comenzi SQL asupra unor tabele putnd proveni din surse eterogene, Paradox, DBase, ODBC sau servere SQL diferite. Fiind un descendent al tipului TDataset, query-ul are numeroase trsturi comune cu tabela, putnd fi integrat n relatii, navigat, chiar editat n anumite conditii cnd se comport ca un dynaset si actualizeaz tabelele de provenient a datelor. Evident, comenzile SQL admit variabile care permit schimbarea dinamic a rezultatelor query-ului si chiar legarea query-ului de valori din nregistrarea curent a altei tabele sau query. Un obiect specializat n copierea si adugarea de dataset-uri, TBatchMove, permite nlntuirea query-urilor atunci cnd nu se poate ajunge la rezultatul dorit printr-o singur interogare SQL. Dezvoltatorii nefamiliari cu SQL pot folosi Database Desktop pentru a construi vizual un query-by-example pe care l pot traduce apoi n comand SQL si integra n obiectul query, dac nu sunt cumva fericitii posesori ai versiunii client-server care include un editor vizual de query-uri. Nu orice QBE se poate traduce n SQL si invers. Utilizarea de query-uri reduce dramatic timpul de dezvoltare a unei baze de date si creaz premize spre migrarea acesteia spre suport SQL. Folosirea lui pe baze de date locale simplific dezvoltarea dar abuzul se plteste scump. Astfel, crearea un obiect query necesit cam 100 KBytes de memorie, n timp ce un obiect tabel se multumeste cu ctiva KBytes. Cine este responsabil de interpretarea si executia query-ului, ca si de acces la baze de date n general? Borland si-a bazat toate produsele, de la Paradox la Delphi pe al su Borland Database Engine (o implementare a standardului IDAPI - alternativ viabil la ODBC-ul lui Microsoft). Prin BDE este posibil accesul att la surse native cum sunt Paradox si dBase precum si la conexiuni ODBC, pentru care interpreteaz si execut comenzile SQL, ct si la servere SQL, crora le transmite cererile SQL si optimizeaz modul de acces la rezultate. Din punct de vedere al performantei pe baze de date locale,

driver-ele native Paradox si DBase sunt net mai rapide dect cele similare disponibile prin ODBC, astfel nct acesta din urm rmne doar ca alternativ de conectare la formate mai ciudate de tabele. Dornic s apelez direct functii BDE am descoperit - nedocumentat binenteles interfata de programare BDE (fisierele dbiprocs.int, dbierrs.int, dbitypes.int). Desi cutam numai o functie de actualizare a cache-ului pe disc am descoperit stupefiat functii de un nivel foarte nalt de operare cu query-uri, seturi de date, tranzactii, operatiuni de tip batch, stabilire de relatii, sortare, s.a.m.d. Se explic astfel capabilittile remarcabile ale obiectelor tabel si query din Delphi, care nu sunt dect simple mpachetri obiectuale ale functionalittii unui motor de baze de date foarte avansat. Aplicatiile Delphi au n spate performanta nativ a Paradox-ului si DBase-ului for Windows. Desi oferta este covrsitoare, Borland pluseaz din nou integrnd si Local Interbase Server - o versiune local de server SQL, mono-utilizator si multi-instant, n scopul declarat de testare local de aplicatii Delphi pe baze de date SQL naintea scalrii acestora pe servere reale Interbase, Oracle, Sybase sau Informix. M-am ntrebat desigur cam ce monstruozitate va trebui distribuit clientului si pe cte CD-uri? Ei bine, o aplicatie tipic de baze de date cuprinde un executabil selfconsistent de 500-700 KBytes si motorul de baze de date BDE, care ocup 3 MBytes cu totul din care vreo 800 KBytes utili. n rulare, o aplicatie complex MDI cu sase-opt forme de date deschise simultan nu consum mai mult de un megabyte din memoria disponibil, incluznd si cache-ul BDE, si galopeaz pe un 386SX cu 4 MBytes de RAM.