73735600 Initiere in Limbajul de Program Are Delphi

15
 1 INIŢIERE ÎN LIMBAJUL DE PROGRAMARE DELPHI 1.1 INTRODUCERE „Clasele şi obiectele sunt noţiuni strâns legate una de alta. În particular fiecare obiect este un exemplu a unei careva clase, iar clasa poate crea orice număr de obiecte. În majoritatea cazurilor clasele sunt statice, adică toate particularităţile şi conţinutul 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 execuţie a programului se crează şi se distrug foarte des” – noţiune dată de Gadi Buci. Metodele claselor permit adresarea la informaţia internă despre clasă, fără crearea exemplarelor clasei – obiectelor. Orice obiect are proprietăţi şi evenimente. Proprietăţile sunt caracteristicile obiectului dat, iar evenimentele sunt acţiunile ce se efectuează în momente necesare. Făcând 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. Proprietăţile şi evenimentele obiectelor se stabilesc in Object Inspector , în paginile respective. Trebuie de menţionat că deoarece unele componente provin de la acelaş tip, ele au şi unele proprietăţi, evenimente asemăn ătoare. 1.1.1 Mai multă productivitate Doar cerinţele utilizatorilor de azi privind funcţionalitatea aplicaţiilor cresc la fel de repede precum scad termenele de predare. Presiunea sporită asupra dezvoltatorilor de  programe face ca aceştia să nu se mai mulţumească doar cu un compilator foarte rapid; dezvoltarea este frânată de numeroşi factori si soluţiile însumate pot duce la salturi spectaculoase de productiv itate. Object Pascal a dispus întotdeauna de avantajele tradiţionale ale compilatorului care depistează erori logice provenite din cod incorect ori ambiguu, ca si de verificările stricte de tip. În noua versiune, compilatorul continuă să compileze codul chiar si după găsirea 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 fără relevantă.

Transcript of 73735600 Initiere in Limbajul de Program Are Delphi

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 1

1 INIŢIERE ÎN LIMBAJUL DE PROGRAMARE DELPHI

1.1 INTRODUCERE

„Clasele şi obiectele sunt noţiuni strâns legate una de alta. În particular fiecare

obiect este un exemplu a unei careva clase, iar clasa poate crea orice număr de obiecte. Înmajoritatea cazurilor clasele sunt statice, adică toate particularităţile şi conţinutul 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 execuţie a programului se crează

şi se distrug foarte des” – noţiune dată de Gadi Buci.

Metodele claselor permit adresarea la informaţia internă despre clasă, fărăcrearea exemplarelor clasei – obiectelor.

Orice obiect are proprietăţi şi evenimente. Proprietăţile sunt caracteristicileobiectului dat, iar evenimentele sunt acţiunile ce se efectuează în momentenecesare. Făcând o analogie cu un obiect real, cum ar fi de exemplu unavion, o proprietate de-a lui este lungimea, iar un eveniment este luareastratului după începerea lucrului motorului.

Proprietăţile şi evenimentele obiectelor se stabilesc in Object Inspector , înpaginile respective. Trebuie de menţionat că deoarece unele componenteprovin de la acelaş tip, ele au şi unele proprietăţi, evenimente asemănătoare.

1.1.1 Mai multă productivitate

Doar cerinţele utilizatorilor de azi privind funcţionalitatea aplicaţiilor cresc la fel

de repede precum scad termenele de predare. Presiunea sporită asupra dezvoltatorilor de

 programe face ca aceştia să nu se mai mulţumească doar cu un compilator foarte rapid;

dezvoltarea este frânată de numeroşi factori si soluţiile însumate pot duce la salturi

spectaculoase de productivitate.

Object Pascal a dispus întotdeauna de avantajele tradiţionale ale compilatoruluicare depistează erori logice provenite din cod incorect ori ambiguu, ca si de verificările

stricte de tip. În noua versiune, compilatorul continuă să compileze codul chiar si după

găsirea 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 fără relevantă.

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 2

Compilatorul oferă acum un sistem de diagnosticare a erorilor mult mai complet

incluzând detectarea utilizării de variabile sau pointeri neiniţializaţi, variabile neutilizate,

rezultate neutilizate returnate de funcţii, bucle goale si nepotriviri de tipuri. Analizorul

sintactic a devenit mai subtil, permiţându-si sugestii utile mai ales programatorilor 

începători.

Tot aceştia din urmă au tendinţa de a comasa întregul cod într-o singură unitate

greu de întreţinut si depanat. Pentru a-l încuraja sa-si separe în mod logic munca în unităţi

distincte cu interfeţe strict delimitate, Delphi le oferă selecţia vizuală a unităţilor care se

includ în clauza uses.

Următorul pas logic pentru încurajarea programării modulare a fost referinţa

automată la componente conţinute în forme diferite. Deşi proprietăţile sau metodele

componentelor din alte forme decât 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 dezvoltării vizuale permite separarea modulelor care

încapsulează structurile de date ca si relaţiile dintre acestea de modulele care

implementează interfaţa cu utilizatorul.

În acelaşi context se înscrie si noul tip de obiect vizual - DataModule - destinatstocării 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 interacţiune 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 conţinute de acesta pot fi referite apoi din diverse alte forme.

Poate cea mai importantă obiecţie a puriştilor programării obiectuale fată de

tehnica vizuală a precedentei versiuni a lui Delphi a fost imposibilitatea de a deriva -vizual - noi forme prin moştenirea celor existente. Este natural - într-un mediu complex

de proiectare - să creezi obiecte standard, din care urmează să fie derivate obiecte

concrete care să moştenească imediat orice modificare s-ar efectua în obiectele de bază.

Delphi 2 preia această caracteristică fundamentală OOP si o extinde la mediul vizual de

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 3

dezvoltare. Prin tehnica moştenirii vizuale se pot crea - în faza de design - noi forme care

să preia proprietăţile, evenimentele si metodele formei originale pe oricâte nivele de

moştenire, fără a induce penalizări 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 reţea locală. Tot aici pot fi stocate module de date, biblioteci DLL sau

experţi. Orice aplicaţie poate moşteni, referi sau copia un obiect din Object Repository.

1.1.2 Suport extins pentru aplicaţiile de baze de date

 Numeroase sînt extensiile de baze de date care pot fi regăsite în actuala versiune

de Delphi si care uşurează considerabil surmontarea problemelor specifice ridicate de proiectele de baze de date.

Dicţionarul de date stochează si utilizează informaţia despre conţinutul si

comportamentul datelor din tabele. Aici se pot specifica atribute extinse de câmpuri

 precum valorile minimă, maximă si implicită, opţiunile de formatare în afişare 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

câmpurilor de date.

Componentele de acces la bazele de date au fost rescrise în întregime păstrând

însă interfaţa versiunilor precedente. Astfel, tabelele si query-urile sînt completate cu

 proprietăţi si evenimente de filtrare dinamică a datelor si oferă evenimente suplimentare

 pentru tratarea extinsă a erorilor. Există o proprietate care permite utilizarea facilităţii de

stocare în cache a modificărilor (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ă obţinerea unui set editabil de înregistrări (ceea ce nu întotdeauna este posibil

 printr-un query) cu minimum de consum de memorie.

Paleta de acces la baze de date s-a îmbogăţit cu o formă specială de query -

TUpdateSQL - care preia operaţiunile de ştergere, inserare si actualizare de înregistrări

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 4

spre deosebire de clasicul TQuery, care este rezervat acum doar pentru operaţiuni 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 atenţie deosebită se bucură si componentele vizuale de prezentare si editare

a datelor. Obiectele DBLookupCombo si DBLookupList sînt păstrate numai pentru

compatibilitate; înlocuitoarele lor mai versatile si mai performante sînt acum

DBLookupComboBox si DBLookupListBox. Omniprezentul DBGrid este semnificativ

îmbogăţit cu facilităţi de formatare la nivel de coloană si include tehnici de căutare si

look-up în câmpul curent. Un nou component - DBCtrlGrid permite prezentarea mai

multor înregistrări dintr-o tabelă, fiecare având rezervat propriul spaţiu de afişare în carese pot plasa toate celelalte tipuri de controale de date pentru editarea câmpurilor. Afişarea

unei liste de imagini dintr-o tabelă se poate face astfel fără a mai scrie vreo linie de cod.

În precedenta versiune a bibliotecii de componente se resimţea puternic absenta

unui set de componente pentru dezvoltarea vizuală de rapoarte. Greul Report Smith era în

mod evident destinat aplicaţiilor de corporaţie bazate pe server-e SQL, fără a se potrivi cu

necesităţile unei aplicaţii desktop. Din fericire industria shareware a produs rapid câteva

asemenea soluţii, dintre care Borland a cumpărat-o pe cea mai reuşită si a inclus-o întoate 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, câmpuri calculate, de însumare si de

sistem, dar si imagini bitmap sau metafile ori forme geometrice simple. Sânt posibile

rapoarte master-detail pe mai multe nivele sau cu mai multe seturi detail si grupate pe

criterii foarte diverse, inclusiv câmpuri 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 iniţializate la nivel de bandă. Datele

se pot previzualiza în faza de design iar un component special permite previzualizarea lor 

în timpul rulării. Pentru baze de date mici (de ordinul zecilor de mii de înregistrări) Quick 

Report este cu un ordin de mărime mai rapid decât Report Smith. Ca urmare însă a

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 5

includerii lor în fişierul executabil sub formă de resurse, rapoartele sînt complet

inaccesibile utilizatorului final pentru modificări.

1.1.3 Mai multă putere în motorul de baze de date

Prezentarea lui Delphi 2 nu putea omite noua versiune pe 32 biţi a lui Borland

Database Engine, pe care se bazează performantele obţinute de programele Delphi de

 baze de date, aceleaşi de altfel cu cele obţinute cu Paradox sau Visual dBASE. BDE

comportă o arhitectură obiectuală care permite un acces simplu si nativ din limbajele

obiectuale la funcţiile încorporate de un nivel foarte înalt, de la operaţiuni cu seturi de

date prin interogări SQL sau QBE si filtre până la suport navigational complet prin relaţii

master-detail si lookup.

 Noua concepţie pe 32 biţi se reflectă în suportul pentru multitasking preemptiv:

mai multe programe pot fi deservite simultan de BDE si pot accesa aceeaşi bază de date

în acelaşi timp. În plus, în cadrul aceluiaşi program se pot executa simultan mai multe

operatiuni BDE separate în fire de execuţie diferite. Este posibilă astfel execuţia de

query-uri multiple în spate în timp ce în fată utilizatorul editează o tabelă.

BDE suportă acum nume lungi, descriptive (260 caractere incluzând si spatii) de

tabele desktop, inclusiv în fraze SQL sau QBE. Numele de tabele SQL sînt în general

limitate la 30 de caractere de server-le SQL corespunzătoare.

Accesul la bazele de date de pe server-e se poate efectua acum prin utilizarea

convenţiei UNC (convenţia numelui universal) preferată de Win95 si NT mapării

discurilor logice.

 Nucleul de interogare SQL este complet rescris si separat acum de nucleul QBE.

Performanta interogărilor SQL pe tabele desktop a crescut substanţial si au căzut o serie

de restricţii din subsetul Local SQL, care se apropie acum si chiar depăşeşte standardul

SQL 92. Sânt posibile includerea de subquery-uri în clauzele WHERE si HAVING,

utilizarea de expresii în funcţiile de agregare (gen SUM( Cîmp1+Cîmp2) sau chiar SUM(

MIN(Cîmp1))), ca si în clauzele GROUP BY si ORDER BY, precum si utilizarea

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 6

operatorului UNION. În paranteză fie spus, bug-ul care împiedica un full outer join cu

câmpuri multiple de legătură persistă încă si în noua versiune. Subseturile de înregistrări

returnate de interogări asupra mai multor tabele pot fi editate cu reflectarea modificărilor 

în tabelele originale. Subseturile rezultate din query-uri pot fi suplimentar rafinate prin

utilizarea de filtre.

O îmbunătăţire care va îndepărta coşmarul multor dezvoltatori de baze de date

desktop este suportul tranzacţional complet pentru tabele Paradox si dBASE.

Modificările tabelelor pot fi grupate într-o tranzacţie si efectuate (commit) sau anulate

(rollback) integral, asigurând actualizarea bazei de date de o manieră consistentă si cu

 păstrarea integrităţii referenţiale. Driver-ul pentru tabele Paradox > ver.6 este capabil de

index secundar unic, index cu ordonare descrescătoare si câmpuri care se auto-incrementează, în timp ce driver-ul dBASE suportă acum încriptarea tabelelor si index în

format Clipper.

Facilitatea de efectuare locală a modificărilor (cached updates) permite

utilizatorilor să efectueze operaţiuni asupra bazei de date într-o perioadă mai lungă de

timp fără a modifica imediat baza de date de pe server, reducând la minimum consumul

de resurse pe server ca si traficul pe reţea.

Dezvoltatorii de aplicaţii client-server SQL vor aprecia posibilitatea de a

monitoriza frazele SQL care se transmit server-ului la fiecare execuţie de funcţie BDE, ca

si utilizarea de guvernatori care limitează numărul de înregistrări din seturile de date

returnate de server în scopuri de accelerare a procesului de dezvoltare.

1.2 SPECIFICUL REALIZĂRII SQL ÎN DELPHI

Aplicaţiile Delphi se adresează la date prin intermediul BDE (Borland

Database Engine). Tipul de acces la bazele de date variază în funcţie de tipulbazei de date. Bazele de date locale Paradox, dBASE, MS Access şi FoxProsunt apelate de BDE prin intermediul driver-ilor standarde. Datele dinserverele SQL sânt primite datorită utilizării sistemului special de driver-eSQL Links. Un rol important în prelucrarea şi trimiterea cererii îl joacăsistemul de prelucrare a cererilor – componentă a procesorului BD. Toatesistemele de gestionare a bazelor de date nu utilizează limbajul SQL ca mijlocprincipal în lucru cu datele. Cu toate acestea, BDE cu ajutorul driver-ului

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 7

standard respectiv translează cererile ce vin de la aplicaţii într-o formă înţeleasă de sistemul de gestiune al bazei de date şi primeşte răspuns.Deoarece cererea către 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 niştesisteme industriale complicate şi lucrează pe baza extensiilor proprii alelimbajului. În acest caz BDE pur şi simplu transmite cererea la server, fără a otransla sau modifica. Este evident că, în acest caz elaboratorul aplicaţieitrebuie să cunoască această variantă SQL.

1.2.1 Mecanismul de funcţionare a cererilor în aplicaţiile BD Delphi

Rolul principal în pregătirea şi dispecerizarea cererilor SQL îl joacă BDE.Însăşi prelucrarea cererilor este efectuată de sistemul de prelucrare a

cererilor – un element special al arhitecturii procesorului BD, care identificăsetul de date al cererii, îndeplineşte analiza sintaxei şi, în dependenţă deparametrii BDE setaţi, transmite varianta locală a cererii driver-ului standardal BD respective sau adresează cererea serverului BD prin sistemul de driver-e SQL Links.

În calitate de iniţiator al cererii este programul aplicaţie. Pentru crearea şiexecutarea cererilor se foloseşte componenta TQuery, care conţine textulcererii şi încapsulează setul de date cu rezultatul executării cererii. Acest set

de date poate fi utilizat la fel ca şi orice alt set de date creat cu ajutorulcomponentei TTable.

Primind comanda de executare a cererii, componenta TQueryiniţializează pregătirea cererii către executare, care include câteva etape.

Sarcina principală de pregătire a cererii – crearea legăturii dintresistemul de gestiune al BD care va executa cererea, şi setul de date alcomponentei TQuery respective. Dacă acest lucru a fost realizat, atunci sedetermină modalitatea de executare a cererii – accesul local prin intermediuldriver-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 intermediuldriver-ului standard la sistemului de gestiune al BD respectiv pentru a fiexecutată de acesta. Prin legătura creată la pregătirea cererii rezultatul setransmite în setul de date al aplicaţiei.

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 8

Dacă cererea a fost adresată serverului SQL, atunci se presupune căea are o sintaxă specifică, corespunzătoare serverului dat. În acest caz toatăpregătirea specială a parametrilor cererii se execută de partea serverului.BDE asigură numai transmiterea cererii şi întoarcerea rezultatului de execuţiela setul de date al aplicaţiei.

Încă o modalitate de executare a cererilor pentru serverul SQL – adresareadirectă la funcţiile API a serverului respectiv. Aceasta însă, este metoda ceamai 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 TTableeste necesar de a seta proprietatea DatabaseName, care determină baza dedate, şi proprietatea TableName, care determină tabelul din baza de date –sursa nemijlocită a datelor. Pentru componenta TQuery  se fixează deasemenea proprietatea DatabaseName, iar pentru setarea sursei datelorserveşte proprietatea SQL, care conţine textul cererii. De fapt, acesta tot estedenumire a tabelului (în cerere ea se conţine întotdeauna), numai cu condiţiiadăugătoare de selectare a datelor.

De exemplu, cererea de mai jos:

Select * from RFinanciar 

conţine un set de date identic cu cel al tabelului RFinanciar şi prezintăfacilităţi similare de lucru cu aceste date.

Ierarhia părinţilor acestor două componente este de asemeneasimilară: TDataSet – TBDEDataSet – TDBDataSet. Aceasta ne dovedeşte încăodată, că menirea principală a componentei TQuery – crearea setului de dateşi asigurării accesului la el din aplicaţie.

Cu toate acestea componenta TQuery reprezintă un instrument puternic şiflexibil de realizare şi susţinere a funcţiilor de bază şi secundare a aplicaţiei.Cu ajutorul acestei componente pot fi uşor soluţionate astfel de probleme,care cu ajutorul componentei TTable se soluţionează mult mai greu, sau nuse soluţionează deloc.

Nu trebuie să uităm că aceste avantaje asigură nu însăţi componentaTQuery, dar limbajul SQL.

La elaborarea aplicaţiilor client pentru servere SQL aceastăcomponentă trebuie să joace rolul principal. În cazul aplicaţiilor locale deasemenea există un număr mare de probleme, care pot fi soluţionate mai

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 9

comod cu ajutorul componentei TQuery . Însă există multe situaţii, în careutilizarea componentei TTable este mai avantajoasă.

În afară de asta, componenta TQuery crează un set de date cu ostructură numai din acele câmpuri, care sînt indicate în textul cererii.

Structura setului de date a componentei TTable coincide cu structuratabelului BD (dacă obiectele câmpurilor sînt dinamice). Din această cauză înlucrul cu câteva câmpuri din setul de date foarte mare componenta TQuery 

permite de a economisi resurse.

Lucrul cu câmpurile din componenta TQuery este similar ca şi cuTTable. Obiectele câmpurilor pot fi statice şi dinamice. Câmpurile calculabilepot fi create cu ajutorul redactorului câmpurilor sau prin crearea expresieicalculabile în cadrul cererii.

Datorită moştenirii, componenta TQuery are posibilitatea de a aplica

mecanismele de filtrare, căutare, etc. asupra înscrierilor din setul său dedate. Aceasta îi asigură componentei TQuery o flexibilitate adăugătoare.

Reprezentarea datelor pentru componenta TQuery se efectuiază prinintermediul componentei TDataSource.

Proprietăţile şi metodele componentei TQuery sînt prezentate întabelul de mai jos.

Proprietăţile şi metodele componentei TQuery Tab. 1

DeclarareaTipul Descrierea

Proprietăţile

  property Constrained:

boolean

 public În cazul valorii true interziceintroducerea în setul de date astfel devalori, care nu corespund condiţiilor deselectare a cererii.

Se utilizează numai în cazul BDlocale.

  property DataSource:

TDataSource

 public Face referinţă la componenta

TDataSource, din setul de date al

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 1

căreia se setează valorile parametrilor.

 property Local: boolean read

only 

Valoarea true înseamnă, că

cererea apelează tabelul local

  property ParamCheck:

boolean

 public În cazul valorii true parametrii

cererii se reînnoiesc odată cu

modificarea proprietăţii SQL în timpul

executării.

  property ParamCount:

word

read

only 

Întoarce numărul de parametri ai

cererii.

  property Params[Index:

word]:TParams

 public Lista indexată a obiectelor

TParams, fiecare corespunzător unui

parametru a cererii.

  property Prepared:

boolean

 public Întoarce rezultatul executării

operaţiei de pregătire a cererii de

executare.

  property RequestLive:

boolean

 public În cazul valorii false rezultatul

cererii nu poate fi redactat.

  property RowsAffected:

integer 

read

only 

Întoarce numărul înscrierilor

modificate a setului de date dinmomentul îndeplinirii ultimei cereri.

 property SQL: TStrings public Conţine textul cererii.

(continuare) Tab. 1

  property SQLBynary:

PChar 

 public Proprietate internă de asigurare

a lucrului cu BDE.

  property StmtHandle:

HDBIStmt 

read

only 

Întoarce un exemplar al

obiectului corespunzător cererii dinBDE. Se foloseşte la chemarea directă

a funcţiilor BDE.

 property Text: PChar read

only 

Pointer la masivul de simboluri

care conţine textul cererii trimis în

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 1

BDE.

  property UniDirectional:

boolean

 public Fixează tipul cursorului de date

utilizat.

Metodele

Procedure ExecSQL public Execută cererea fără

deschiderea setului de date.

 procedure

GetDetailLinkFields

(MasterFields,

DetailFields: TList); override

 public Complectează listele

MasterFields şi DetailFields cu

exemplarele obiectelor câmpurilor a

două tabele ale cererii, care se găsesc

 în relaţia “unul la mai mulţi”.

 procedure

GetProviderAttributes (List: TList);

override

 public Întoarce în parametrul List 

valorile parametrilor setului de date.

function

ParamByName(const Value: string):

TParam

 public Întoarce referinţă la un exemplar

al obiectului parametrului cu numele

transmis în parametrul funcţiei Value.

 procedure Prepare public Pregăteşte cererea de

executare.

 procedure UnPrepare public Eliberează resursele ocupate la

pregătirea cererii de executare.

 Textul cererii este determinat de proprietatea SQL, la setarea căruia seutilizează redactorul simplu care se activează prin apăsarea butonuluiproprietăţii din Object Inspector.

Executarea cererii poate fi realizată prin trei metode.

Dacă cererea întoarce rezultatul în setul de date (de exemplu,foloseşte operatorii INSERT, DELETE, UPDATE), atunci se foloseşte metodaExecSQL. După executarea cererii setul de date al componentei nu se

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 1

deschide. Încercarea de a folosi metoda Open pentru astfel de cerere va ducela eroare.

Pentru a permite redactarea setului de date a cererii este necesar de aseta valoarea True proprietăţii RequestLive. Această proprietate nu va fi

activată pentru cererea, rezultatul căreia nu se modifică din definire.Pentru pregătirea de execuţie a cererii se foloseşte metoda Prepare.

Deşi această operaţie se execută automat de către BDE, poate apărea totuşio situaţie în care elaboratorul va fi nevoit să folosească această metodă.

Metoda UnPrepare eliberează resursele alocate în procesul depregătire a cererii.

Proprietatea Params permite elaboratorului de a modifica condiţiile deselectare a cererii în dependenţă de situaţia curentă. Această proprietatereprezintă un set de parametri a cererii ce pot fi modificaţi.

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 decât 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 atât de

complete încât 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-many-to-many-to...etc., cu controale din cele mai diverse, de la câmpuri de editare

cu validare la câmpuri calculate, de la tabele cu editare in-place la câmpuri lookup combo

 box sau list box. Nu lipseste nici clasicul navigator cu butoane de înainte-înapoi, stergere,

inserare, actualizare, etc.

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 1

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 câmpurile de editare). Există

astfel posibilitatea de a efectua validări înainte de actualizarea modificărilor în tabelă, de

a primi controlul înaintea inserării sau stergerii unei noi înregistrări sau la prima tentativă

de modificare a înregistrării curente. Iar lista de posibilităti rămâne deschisă.

Cel mai bine se vor simti programatorii de Paradox care vor regăsi aceeasi

filozofie în manipularea tabelelor prin operatiuni familiare precum Insert, Edit, Cancel,

Post (Do_It), Next, First, Last, etc. Câmpurile unei înregistrări sunt accesibile ca obiecte

componente distincte prin intermediul editorului de câmpuri al tabelei, existând tipuri

distincte pentru fiecare format, inclusiv imagine, memo sau cîmp binar (BLOB). Adesea,singura operatiune cu câmpuri efectuată prin program este atribuirea sau citirea valorii

unui câmp. Accesul se face prin intermediul proprietătii Value si mentinerea sincronizării

câmpului cu controlul de editare asociat sau cu tabela se face automat prin metodele

mostenite.

În spatele scenei se găseste o implementare deosebit de puternică a accesului la

 baze de date. Obiectul tabelă tratează în mod unitar atât o tabelă Paradox sau dBase cât si

una SQL. Nu este necesară nici un fel de modificare în cod sau în proprietătile 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 utilizând transparent un index secundar 

Paradox, un index DBase sau unul SQL.

Întrucât editoarele de componente nu dispun de facilităti 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, fără capabilităti de forme si rapoarte - evident.

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 1

1.4 SQL – CUVÂNTUL LA MODĂ

Doar utilizarea tabelelor, chiar cu filtre si legate în relatii complexe, nu mai

satisface adesea nici măcar în scopuri de editare. Iar a interoga navigând prin tabele si

testând relatii a devenit nu numai desuet si neproductiv dar chiar generator de bug-uri.

Utilizarea obiectele tip TQuery deschide perspective remarcabile către 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 putând proveni din surse eterogene,

Paradox, DBase, ODBC sau servere SQL diferite. Fiind un descendent al tipului

TDataset, query-ul are numeroase trăsături comune cu tabela, putând fi integrat în relatii,

navigat, chiar editat în anumite conditii când 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 adăugarea de dataset-uri, TBatchMove,

 permite înlăntuirea query-urilor atunci când 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 plăteste scump. Astfel, crearea un obiect querynecesită cam 100 KBytes de memorie, în timp ce un obiect tabelă se multumeste cu

câtiva 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 său

5/13/2018 73735600 Initiere in Limbajul de Program Are Delphi - slidepdf.com

http://slidepdf.com/reader/full/73735600-initiere-in-limbajul-de-program-are-delphi 1

Borland Database Engine (o implementare a standardului IDAPI - alternativă viabilă la

ODBC-ul lui Microsoft). Prin BDE este posibil accesul atât la surse native cum sunt

Paradox si dBase precum si la conexiuni ODBC, pentru care interpretează si execută

comenzile SQL, cât si la servere SQL, cărora 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 decât cele similare disponibile

 prin ODBC, astfel încât acesta din urmă rămâne doar ca alternativă de conectare la

formate mai ciudate de tabele.

Dornic să apelez direct functii BDE am descoperit - nedocumentată bineînteles -

interfata de programare BDE (fisierele dbiprocs.int, dbierrs.int, dbitypes.int). Desi

căutam numai o functie de actualizare a cache-ului pe disc am descoperit stupefiat functiide 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 capabilitătile remarcabile ale

obiectelor tabelă si query din Delphi, care nu sunt decât simple împachetări obiectuale ale

functionalitătii 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 covârsitoare, Borland plusează din nou integrând si Local

Interbase Server - o versiune locală de server SQL, mono-utilizator si multi-instantă, înscopul declarat de testare locală de aplicatii Delphi pe baze de date SQL înaintea scalării

acestora pe servere reale Interbase, Oracle, Sybase sau Informix.

M-am întrebat desigur cam ce monstruozitate va trebui distribuită clientului si pe

cîte 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ă, incluzând si cache-ul BDE, si galopează pe un 386SX cu 4 MBytes de RAM.