73735600 Initiere in Limbajul de Program Are Delphi
-
Upload
igor-chiriac -
Category
Documents
-
view
19 -
download
0
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.