Borland Delphi
De la Clubul de inteligenţă artificială
Cuprins |
[modifică] Introducere
- Delphi este un limbaj de programare si un mediu de dezvoltare pentru programe produs de firma americana Borland. Limbajul Delphi este cunoscut ca Pascal orientat pe obiecte (Pascal cu obiecte). Initial a fost facut pentru sistemele de operare Windows, dar acum se fac versiuni si pentru Linux (denumit Kylix) si Microsoft .NET Framework.
- Bazat pe modelul de obiecte VCL este şi mediul de dezvoltare C plus plus Builder produs de aceeaşi companie.
[modifică] De ce Delphi ?
- Pentru dezvoltarea aplicatiei Visual TLA era necesar un mediu de programare care sa ofere urmatoarele facilitati:
- compilare rapida intr-un limbaj orientat-obiect
- interogare nativa si facila a bazelor de date ( intr-o multitudine de formate ) atit la nivel local, cit si la distanta
- suport pentru programare vizuala si unelte de constructie de noi componente vizuale.
- Aceste deziderate sint implinite de Borland DELPHI.
[modifică] Ciclul de viaţă al unui form in Delphi
- În Windows, cele mai multe elemente ale interfeţei cu utilizatorul sunt ferestre. În Delphi, fiecare proiect are cel puţin o fereastră – fereastra principală a proramului. Toate ferestrele unei aplicaţii Delphi sunt bazate pe obiectul TForm.
[modifică] Form: definitie
- Obiectele form sunt blocurile de bază care formează o aplicaţie Delphi, chiar ferestrele cu care interacţionează un utilizator atunci cand vor să ruleze o aplicaţie. Form-urile işi au propriile evenimente, proprietăţi şi metode cu care se pot controla înfăşişarea şi comportamentul. Un form este, de fapt, o componentă Delphi, dar spre deosebire de celelalte, un form nu apare în categoria componentelor.
- În mod normal, creăm un obiect de tip form începând o nouă aplicaţie (File | New Application). Acest nou form creat va fi, de la sine, obiectul principal al aplicaţiei – primul form creat în momentul execuţiei.
- Pentru a adăuga un form adiţional la un proiect Delphi, om selecta File | New Form. Există, de asemenea, şi alte modalităţi de a face acest lucru.
[modifică] Apariţia unui form
- OnCreate
- Evenimntul OnCreate este apelat atunci când este creat pentru prima şi singura dată un TForm. Declaraţia raspunzatoare pentru crearea sa se află in codul sursă al proiectului (dacă form-ul este setat pentru a fi creat automat de proiect). Atunci cand este creat un form si proprietatea Visible este setată True, vor aparea următoarele evenimente în aceată ordine: OnCreate, OnShow, OnActivate, OnPaint.
- Ar trebuie utilizat mereu evenimentul OnCreate pentru a iniţializa cum ar fi, de exemplu, alocarea listelor de şiruri.
- Orice obiect creat cu ajutorul evenimentului OnCreate ar trebui eliberat de evenimentul OnDestroy.
- OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint ...
- OnShow
- Acest eveniment indică faptul că este afişat form-ul. OnShow este apelat doar înainte ca un form să devină vizibil. În afară de form-urile principale, acest eveniment are loc atunci când se setează proprietatea form-urilor Visible laTrue sau când se apelează metodele Show ori ShowModal.
- OnActivate
- Evenimentul se apelează când programul activează form-ul – şi asta, atunci când se focalizează pe acesta. Se utilizează acest eveniment pentru a schimba controlul care primeşte de fapt focus, dacă iniţial nu este cel dorit.
- OnPaint, OnResize
- Evenimentele ca OnPaint şi OnResize sunt apelate întotdeauna după ce este creat iniţial form-ul, dar se pot apela şi apoi repetitiv. OnPaint are loc înainte ca alte controale din form sun desenate.
- Life
- După cum am vazut, crearea unui form nu este chiar atât de interesantă cum pot fi viaţa şi distrugerea acestuia. În timp ce este creat form-ul şi toate controalele aşteaptă să preia evenimente, programul rulează până când cineva va încerca să închidă form-ul.
- Death
- Orice aplicaţie bazată pe evenimente se opreşte atunci când orice form este închis şi nu mai este executat nici un cod. Dacă mai există vreun form ascuns atunci cand ultimul vizibil este închis, aplicaţia va părea că se opreşte (deoarece nu mai există nici un form vizibil), de fapt, însă, va continua să ruleze până când acele form-uri ascunse vor fi oprite.
- ... OnCloseQuery -> OnClose -> OnDeactivate -> OnHide -> OnDestroy
- OnCloseQuery
- Atunci când se încearcaa se închide un form utilizând metoda Close sau, altfel, (Alt+F4), este apelat evenimentul OnCloseQuery. Se foloseşte acesta pentru a întreba utilizatorii dacă chiar sunt siguri că vor să închidă form-ul
- procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean) ;
- begin
- if MessageDlg('Really close this window?', mtConfirmation, [mbOk, mbCancel], 0) = mrCancel then CanClose := False;
- end;
- Handler-ul pentru evenimentul OnCloseQuery conţine o varabilă CanClose care determină dacă un form are dreptul de a fi închis sau nu.
- OnClose
- Dacă OnCloseQuery indică faptul că form-ul trebuie închis, se va apela evenimentul OnClose. Acest eveniment ne dă o ultimă şansă de a preveni inchiderea form-ului. Handler-ul evenimentului OnClose are un parametru Action, cu următoarele 4 valori posibile:
- caNone: form-ul nu are dreptul de a fi închis. E ca şi cum am seta False evenimentul CanClose în OnCloseQuery;
- caHide: se ascunde form-ul, în loc să se închidă;
- caFree: form-ul este închis, aşa că memoria alocată acestuia se eliberează de către Delphi;
- caMinimize: form-ul este minimizat şi nu închis.
- OnDestroy
- După ce se procesează metoda OnClose şi este închis form-ul, se apelează evenimentul OnDestroy. Se utilizează pentru operaţiile opus celor din evenimentul OnCreate, mai exact pentru dealocarea obiectelor care ar avea vreo legatură cu form-ul şi eliberarea memoriei.
[modifică] Scurt istoric
- DELPHI este un produs al companiei Borland International, fiind un compilator rapid care ruleaza sub Windows si oferind mijloace de programare vizuala similare celor de la Visual Basic sau Visual C++, plus o manipulare comoda a bazelor de date. Limbajul de baza este Object Pascal, o extensie a Pascal-ului orientat-obiect din implementarea Turbo Pascal incepind cu versiunea 5.5.
- Borland ofera doua pachete:
- DELPHI ( deseori referit sub numele de Delphi Desktop ) si
- DELPHI Client/Server
- amindoua fiind lansate la inceputul anului 1995.
- DELPHI este descendent al Turbo Pascal-ului care a fost prima data comercializat in 1983 pentru sistemul de operare CP/M. Turbo Pascal a fost portat apoi ( in 1984 ) pe MS-DOS si a reprezentat in timpul istoriei timpurii si mijlocii a calculatoarelor personale cel mai popular limbaj de dezvoltare de aplicatii serioase, aceasta deoarece Turbo Pascal ingloba alaturi de un real compilator eficace, si un editor de programe si depanator.
- Dupa mai multe versiuni pentru DOS ( 4.0, 5.0, 5.5, 6.0 ), in 1990 apare Turbo Pascal pentru Windows. Ultima versiune cunoscuta sub denumirea de Borland Pascal ( multi-platforma: DOS, DOS in mod protejat, Windows ) este versiunea 7.0 ( la sfirsitul anului 1992 ).
- Proiectarea mediului DELPHI a inceput in 1993 si pe data de 14 februarie 1995 a fost anuntata oficial aparitia si inceperea comercializarii primei versiunii DELPHI ( din 28 februarie acelasi an ). Curind va apare pe piata DELPHI 3.0.
- Pentru implementarea aplicaţiei Visual TLA am folosit prima versiune DELPHI, care genereaza cod executabil pe 16-biti pentru Windows 3.1 si pentru emulatoarele sale ( incluse in alte sisteme de operare ). DELPHI poate crea atit fisiere executabile de sine statatoare (.EXE), cit si biblioteci cu legare dinamica (.DLL).
- Mediul de dezvoltare a unei aplicatii este un proiect DELPHI (.DPR). Acesta include toate meniurile, dialogurile, interfata de editare ( combinatiile de taste active si actiunile asociate lor ), interfata de depanare ( managementul punctelor de oprire, boxele de dialog de evaluare a expresiilor etc. ), proiectantul de forme ( form designer ), inspectorul proprietatilor si evenimentelor asociate unui obiect ( object inspector ). Cu alte cuvinte, partea vizuala a ceea ce reprezinta DELPHI este scrisa utilizind DELPHI. Baza este conceputa insa intr-un alt limbaj. De exemplu, compilatorul si editorul de legaturi sint scrise in limbaj de asamblare ( pastrindu-se aproape aceeasi tehnologie de compilare de la Turbo Pascal 4.0 ). Nucleul de depanare ( PASDBK16 ) si cel de editare ( DELPHIED si DELPHIKB ) sint scrise in C in comun cu echipa de programatori care lucreaza la BC++.
[modifică] Detalii de implementare
- Punctul de plecare este proiectul DELPHI: Visual TLA, in fapt un program sursa Pascal unde se initializeaza aplicatia ( Application: TApplication ) si se incarca toate celelalte forme definite ( ferestre, cutii de dialog ). Fiecarei forme ( form de tip TForm ) ii corespunde o unitate ( unit ). O forma este un fisier binar .DFM in care se stocheaza anumite informatii introduse in momentul proiectarii aplicatiei ( design time ) ca de exemplu dimensiunea ferestrei, modul de afisare a meniului sistem, icon-ul asociat etc. Orice forma poate include obiecte vizuale ( un cimp de editare: TEdit, TMemo, un button: TButton, TBitBtn, TSpeedButton si altele ) sau non-vizuale ( o baza de date: TTable, TDataBase, un raport: TReport, un masurator de timp: TTimer etc. ). Un fisier unitate .PAS poate fi independent sau nu de o forma, dar reciproca nu-i adevarata.Pentru cazul cind un unit este interdependent de o forma, acel unit va contine toate declaratiile tipurilor de obiecte utilizate si mostenirile respective, plus toate actiunile asociate diferitelor evenimente ( mesaje ) la care interactioneaza componentele introduse in forma. Aceste actiuni vor fi metode ale noului obiect definit de forma proiectata de utilizator.
- Interfaţa
- Am adoptat o interfata intuitiva, bazata pe simboluri grafice, meniuri si boxe de dialog, utilizind:
- componente vizuale puse la dispozitie de DELPHI, incluse in VCL, ca:
- TForm ( forma ce include celelalte controale )
- TBitBtn ( buton insotit de o imagine )
- TSpeedButton ( buton imagine )
- TImage ( imagine afisata )
- TLabel ( afiseaza un text )
- TListBox ( o boxa continind o lista de siruri de caractere )
- TPopupMenu ( meniu pop-up )
- TEdit ( pentru editarea de siruri )
- TTabbedNotebook ( forma avind mai multe pagini selectabile )
- TScrollBox ( o zona de navigare )
- TRadioGroup ( grupeaza o serie de butoane radio )
- componente non-vizuale pentru stocarea programului si a extinderilor definite:
- TStringList ( o lista de siruri de caractere carora li se pot asocia obiecte )
- IniFile ( obiect de manipulare a fisierului de initializare ( LEDA.INI ) a unor parametri ai aplicatiei )
- TOpenDialog ( fereastra de dialog pentru deschiderea unui fisier )
- SaveDialog ( fereastra de dialog pentru salvarea unui fisier )
- componente de manipulare a bazelor de date ( in particular .DBF )
- TDatabase ( stabileste si mentine conexiunea intre aplicatie si un server de baze de date )
- TTable ( conecteaza o baza de date fizica - Paradox, dBase, FoxPro, Oracle etc. - la aplicatie )
- TDBNavigator ( un navigator printre inregistrarile bazei de date )
- TDBEdit ( o extensie a lui TEdit, utilizat pentru a edita o inregistrare )
- noi componente definite pe baza celor existente
- Deoarece aveam nevoie in cadrul editorului vizual de un buton care sa reactioneze la apasarea butonului drept al mouse-ului, am definit TExtSpeedButton derivat din TSpeedButton adaugind o proprietate noua si anume aceea de a stoca o procedura eveniment ( TNotifyEvent ).
- La editorul de programe am folosit o componenta nou definita mostenind clasa TCustomPanel, o bara de stare ( TStatus ) care afiseaza data si timpul curente, starea tastelor Num, Cap si Ins si hint-urile asociate controalelor introduse in forma unde este amplasata si aceasta bara.
- Deoarece aveam nevoie in cadrul editorului vizual de un buton care sa reactioneze la apasarea butonului drept al mouse-ului, am definit TExtSpeedButton derivat din TSpeedButton adaugind o proprietate noua si anume aceea de a stoca o procedura eveniment ( TNotifyEvent ).
- Generatorul de cod
- Fiecare extindere ( in fapt fiecare instructiune a limbajului ) este reprezentata de o clasa, care poseda o serie de metode descriindu-i semantica. In momentul conceperii unui nou program, se creeaza o lista de clase care va contine intructiunile introduse de utilizator pe parcursul editarii vizuale. Ulterior, aceasta lista va fi procesata pentru a genera programul Visual TLA si pentru a genera cod Pascal. Generatorul de cod Pascal va construi pentru fiecare extensie definita ( in urma consultarii bazei de date extensibile ) o clasa avind ca membri data declaratiile interne ale elementului extins si ca metoda Run semantica acestei extinderi.
[modifică] Noutăţi
- Borland Delphi 2006 pentru Microsoft .NET reprezinta trecerea catre revolutia .NET. Simplifica aceasta migrare folosind mediul de dezvoltare RAD pentru Windows, incluzand aici forme ca VCL, Windows, ASP.NET, Web, ADO.NET si multe altele.
- Programatorii isi pot utiliza rapid unostintele dobandite de-a lungul timpului în Delphi. Delphi 2005 include Borland Enterprise Core Objects (ECO) destinat accelerarii ritmului de dezvoltare al aplicatiilor si Borland Optimizeit Profiler pentru Microsoft .NET cu scopul ajutarii programatorilor în identificarea si eliminarea problemelor de performanta. Contine C# Builder for Microsoft .NET.
- Noile caracteristici includ:
- Cadrul inovativ Enterprise Core Objects III (ECO III), ce ofera "object relational mapping", "transparent object persistence" si un nou suport pentru "executable state diagrams".
- Libraria de componente virtuale (VCL) este mai usor de folosit, grabind astfel dezvoltarea GUI.
- Together® Modeling si LiveSource® permit migrarea si reutilizarea codului deja existent.
- Noul sistem "live code templates" accelereaza viteza de scriere a codului, crescand astfel productivitatea.
- Ca parte a Borland Developer Studio, Delphi 2006 schimba complet conceptia despre programarea web, GUI si pentru baze de date, pentru Win32, .NET, C# si C/C++
[modifică] DLL-uri în DELPHI
[modifică] Ce sunt DLL-urile, caracteristici si avantaje
- În acest articol este prezentată pe scurt modalitatea prin care pot fi create şi utilizate librăriile legate dinamic în limbajul Borland Delphi.
- Librăriile legate dinamic (Dynami Linked Libraries - DLL) sunt module executabile care conţin cod şi date care pot fi utilizate de către alte aplicaţii Windows.
- Motivul principal pentru care au fost introduse DLL-urile este următorul: ocuparea a cât mai puţină memorie în cazul în care rulează mai multe aplicaţii care folosesc aceeaşi rutină.
- Astăzi acest motiv nu mai pare suficient de important având în vedere evoluţia extraordinară a calculatoarelor, dar trebuie să ne gândim la primele versiuni ale Windows-ului care rulau pe calculatoare care aveau la dispoziţie doar 256 KB de memorie.
- Totuşi, era necesar ca în acest spaţiu să poată rula mai multe aplicaţii. Soluţia a venit prin introducerea DLL-urilor.
- Avantajele acestor librării sunt multiple: economisirea spaţiului pe disc, posibilitatea de a înnoi anumite aplicaţii fără a le schimba în întregime etc. Conceptual un DLL este foarte asemănător cu un unit Deplhi; există unele mici deosebiri şi anume:
- un unit poate fi folosit doar de proiecte Delphi, datorită faptului că are un format recunoscut doar de aplicaţiile Pascal; un DLL poate fi folosit de către orice aplicaţii Windows, datorită faptului că el conţine direct cod executabil.
- un unit poate exporta funcţii, proceduri şi date; un DLL poate exporta numai funcţii sau proceduri;
- un unit trebuie să fie prezent încă din faza de editare de legături a aplicaţiilor, în timp ce un DLL poate lipsi.
- un unit este legat static de aplicaţie, în timp ce un DLL este legat dinamic de aplicaţie; astfel, dacă două aplicaţii care rulează în acelaşi timp folosesc aceeaşi funcţie dintr-un unit înseamnă că două rutine identice sunt prezente în sistem în acela şi timp; acest lucru nu se întâmplă în cazul DLL-urilor.
[modifică] Crearea DLL-urilor
- Mediul Delphi uşurează munca depusă de utilizator în crearea DLL-urilor, şi anume prin electarea itemului (File/New/New/DLL) este creat un fişier având următoarea structură:
- library Project1;
- { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL -- even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. }
- uses
- SysUtils,
- Classes;
- begin
- end.
- uses
- Primul cuvânt al fişierului generat este library; aceasta arată faptul că dorim să definim o bibliotecă de funcţii şi proceduri. În comentariul care apare în fişierul generat suntem avertizaţi că în cazul în care dorim să folosim şiruri de caractere trebuie ca primul unit din clauza USES să fie SHAREMEM.pas care este, de fapt, o interfaţă la DELPHIMM.DLL.
- Declararea şi crearea funcţiilor şi procedurilor într-un DLL se realizează la fel ca în cazul unui unit. Exportarea lor se realizază cu ajutorul construcţiei EXPORTS în care vor fi enumerate toate metodele exportate spre exterior. Sintaxa unei astfel de construcţii este următoarea:
- exports
- Identificator metodă clauză_de_export
- ...;
- unde clauză_de_export poate fi:
- index număr de ordine (un număr cuprins între 1 şi 2.147.483.647); dacă nici un număr de ordine nu este atribuit i se asignează automat unul.
- nume şir de caractere constant (un şir de caractere care arată numele cu care poate fi importată metoda); în cazul în care acest şir nu este specificat importul după nume se poate realiza folosind numele real al metodei.
[modifică] Observatii
- O funcţie sau procedură trebuie mai întâi declarată şi apoi exportată. Este de preferat exportul după index deoarece este mai rapid.
- Indexul trebuie să fie o valoare cât mai mică.
- Vom prezenta acum un exemplu în care este creat un DLL care exportă o funcţie numită max:
- library Project1;
- uses SysUtils,Classes;
- function max(x,y:Integer): Integer;
- begin
- if x > y then
- max := x
- max := x
- else
- max := y;
- max := y;
- if x > y then
- end;
- exports
- max index 1;</UL>
- max index 1;</UL>
- begin
- end
- Datorită faptului că modul de apel în Pascal este implicit registry, iar în alte medii de programare modul de apel implicit nu este acelaşi, DLL-ul creat nu va funcţiona decât cu Delphi.
- Pentru ca DLL-ul să funcţioneze pentru orice aplicaţie Windows va trebui să definim funcţia max cu directiva stdcall (în Windows pe 16 biţi funcţiile erau exportate folosind convenţia PASCAL, dar în Win32 este de preferat apelul STDCALL deoarece este recunoscut şi de către alte limbaje de programare).
- library Project1;
- uses SysUtils,Classes;
- function
- max(x,y:Integer):Integer;
- stdcall;
- begin
- if x > y then max := x
- else max := y;
- end;
- exports
- max index 1; </UL>
- max index 1; </UL>
- begin
- end.
[modifică] Utilizarea DLL-urilor
- Importul metodelor dintr-un DLL se poate realiza atât static, cât şi dinamic. În cazul importului static trebuie precizat mai întâi modul de import, care poate fi:
- prin nume
- procedure import_prin_nume; external 'testlib.dll';
- prin nume nou
- procedure import_prin_nume_nou; external 'testlib.dll' name nume_real;
- în momentul definirii procedura a fost numită nume_real, iar în momentul în care este folosită de aplicaţia care importă DLL-ul, ea va fi apelată folosindu-se numele import_prin_nume_nou.
- prin număr de ordine (index)
- procedure import_prin_numar; external 'testlib.dll' index 5
- procedura import_prin_numar este intrarea cu indexul 5 în DLL.
[modifică] Exemple
- Prezentăm în continuare o aplicaţie care importă libăria legată dinamic project1.dll, şi constă dintr-o formă, două căsuţe de text şi un buton. La apăsarea butonului va apărea un mesaj care va conţine maximul dintre cele două numere din cele două căsuţe de text.
- unit Unit1;
- interface
- uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
- type
- TForm1 = class(TForm)
- Edit1, Edit2: TEdit;
- Button1: TButton;
- procedure Button1Click(Sender:TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var Form1: TForm1;
- implementation
- {$R *.DFM}</UL>
- function max(x,y:Integer):Integer;
- stdcall;external 'c:\proj.dll', index 1;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- showmessage(inttostr( max(strtoint(edit1.text), strtoint(edit2.text))))
- end;
- end.
- Încărcarea dinamică a unui DLL se realizează în momentul execuţiei programului, prin folosirea a trei metode:
- LoadLibrary este o funcţie API cu un singur parametru de tip şir de caractere care reprezintă numele (şi opţional calea) fişierului .DLL; căutarea fişierului .DLL se realizează (în această ordine) în:
- directorul din care este încărcată aplicaţia;
- directorul curent;
- directorul System al sistemului de operare Windows;
- directorul în care este instalat sistemul de operare Windows;
- directoarele care apar în variabila sistem PATH;
- GetProcAdres este o funcţie care returnează adresa unei funcţii exportate de către un DLL sub forma unui pointer fără tip; ea are doi parametri: un handle la DLL (obţinut cu ajutorul funcţiei LoadLibrary) şi numele metodei exportate.
- 'FreeLibrary este o funcţie API care are ca parametru un handle la DLL-ul încărcat şi eliberează librăria; se returnează true în caz de succes şi false în caz contrar.Următoarea aplicaţie încarcă dinamic funcţia max din project1.dll.
- unit Unit1;
- nterface
- uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
- type
- TForm1 = class(TForm)
- Edit1, Edit2: TEdit;
- Button1: TButton;
- procedure Button1Click(Sender:TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- Tmax = function(x,y:Integer): Integer;
- var Form1: TForm1; Hand: THandle;
- Max: Tmax;
- var Form1: TForm1; Hand: THandle;
- implementation
- {$R *.DFM}
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- hand := LoadLibdary('c:\proj.dll');
- if hand <> 0 then
- begin
- @max := getprocadress(hand,'max');
- if max <> nil thenV
- begin
- showmessage(inttostr( max( strtoint(edit1.text), strtoint(edit2.text))))
- end;
- freelibrary(hand);
- begin
- end;
- @max := getprocadress(hand,'max');
- implementation
- end;
- end.
[modifică] Arhitectura unei baze de date in Delphi
[modifică] Tipuri de baze de date
- Lista următoare este luată de pe helpul Delphi online de la secţiunea ”Using Databases” (”Folosire bazelor de date”). Referinşele din listă pot fi deasemenea găsite în helpul online. Ne referim informaţiile găsite aici deoarece Borland descrie cel mai bine tipurile de date suportate de arhitectura Delphi:
- Pagina BDE a „Component Palette” conţine componente care folosesc Borland Database Engine (BDE). BDE defineşte o interfaţă API largă pentru interacţiunea cu bazele de date. Dintre toate mecanismele de acces la date, BDE suportă o varietate largă de funcţii şi vine cu o sumedenie de utilităţi. Este cea mai bună cale de a lucra cu date în tabele Paradox sau dBASE. Totuşi, este deasemeni şi cel mai complicat mecanism de lucru.
- Pagina ADO a „Component Palette” conţine componente care folosesc ActiveX Data Objects (ADO) pentru a accesa informaţiile din bazele de date prin OLEDB. ADO este un standard Microsoft. Multitudinea de drivere ADO este disponibila pentru conectarea la diferite servere de baze de date. Folosind componente bazate pe ADO vă este permisă integrarea aplicaţiei dumneavoastră într+un mediu bazat pe ADO (de exemplu, să folosiţi serverele de aplicaţii bazate pe ADO).
- Pagina dbExpress a „Component Palette” conţine componente care folosesc dbExpress pentru a accesa informaţiile din bazele de date. dbExpress este un set de drivere care facilitează cel mai rapid acces la informaţiile din baza de date. În plus, componentele dbExpress sunt disponibile si pe platforma Linux.
- Pagina InterBase a „Component Palette” conţine componente care accesează direct bazele de date InterBase, fără să treacă printr-un engine layer separat.
[modifică] Arhitectura bazei de date
- Arhitectura bazei de date Delphi este alcătuită din componente care reprezintă şi încapsulează propriu-zis informaţiile din baza de date. Figura de mai jos ilustrează relaţiile aşa cum sunt definite în helpul online al Delphi 6 – ”Database Architecture”.

[modifică] Conectarea la serverul bazei de date
- Dacă doriţi să lucraţi cu baze de date, primul lucru pe doriţi să-l aflaţi este cum faceţi conexiunile între Delphi şi baza de date dorită. În această secţiune, veţi descoperi mai multe moduri în care Delphi permite conexiunea la servere.
- Privire de ansamblu aspupra conectivităţii bazelor de date
- Dataseturile trebuie sa fie conectate la serverele bazei de date. Acest lucru se face printr-o componentă de tip conexiune. Componentele conexiune încapsulează conectivitatea la un server al unei baze de date şi serveşte drept punct de conexiune unic pentru toate dataseturile aplicaţiei.
- Componentele de tip conexiune sunt incluse în componenta TCustomConnection.
[modifică] Lucrul cu Dataset-uri
- Un dataset e o colecţie de linii şi coloane de date. Fiecare coloană este de un tip de dată omogen şi ficare linie este compusă dintr-o colecţie de date ale ficărei coloane. O coloană se mai numeşte şi câmp, iar o linie se mai numeşte înregistrare. VCL încapsulează un dataset într-o componentă abstractă numiă TDataSet. TDataSet conţine multe proprietăţi şi metode necesare pentru a manipula şi naviga printr-un dataset şi este privită ca o componentă din care descend tipuri speciale ale diferitelor dataseturi.
[modifică] Lucrul cu câmpuri
- Delphi faciliteză accesul la câmpurile oricărui dataset prin intermediul obiectului TField şi descendenţii acestuia. Nu numai că puteţi seta sau obţine valoarea unui câmp dat din înregistrarea curentă a unui dataset, dar puteţi modifica şi comprtamentul unui câmp prin modificarea proprietăţilor acestuia. Puteţi chiar modifi şi datasetul însuşi, prin schimbarea ordinii vizuale a câmpurilor, prin ştergerea de câmpuri, sau chiar prin creearea de noi câmpuri.
Valorile câmpurilor
- Este foarte uşor să accesţi valorile câmpurilor din Delphi. TDataSet furnizează o listă numită FieldValues[]care întoarce valoarea unui camp particular. Deoarece FieldValues[] este lista implicită, nu este necesar să specificaţi numele proprităţii pentru a accesa lista. De exemplu, bucata următoare de cod atribuie valoarea câmpului CustName din tabela Table1 stringului S:
- S := Table1 [’CustName’];
[modifică] Link-uri utile
- Delphi 5 "Object Pascal Language Guide" (PDF, Windows Help)
- Delphi 1.0 Object Pascal Language Reference Guide
- Object Pascal Style Guide
- http://delphi.about.com/od/beginners/l/aa011999.htm
- http://delphi.about.com/od/formsdialogs/a/delphiformlife.htm
- http://en.wikipedia.org/wiki/Delphi_programming_language
- http://safari.oreilly.com/0672321157/part03

