Active X Data Objects, sau mai scurt obiectele ADO ofer o interfa ctre o surs de date OLE DB. ADO este prevzut ca interfaa standard de programare pentru OLE DB. Componentele din aceast pagin permit realizarea aplicaiilor cu baze de date ADO Delpi. !e utilizeaz baze de date "i obiecte Active# din $icrosoft, sistemul dispun%nd de obiecte DB &baz de date' care pot furniza conecsiunile la sursa de date "i accesul la acele date. ADO provider reprezint o variant "i un tip de acces direct la obiectele bazelor de date de pe diferite drivere. Dac aplicaiile utilizeaz SQL database, au fost realizate (n Microsoft SQL Server sau Oracle se solicit conectarea lor la sursa de date prin intermediul componentei ADOConection. Logarea unei componente la sursa de date se realizeaz de ctre proprietatea Connection!tring. !istemul realizeaz) Logarea la server* $anagementul tranzaciilor* Lucru cu baze de date asociate* Obinerea de metadate. Fig nr. 3.. !agina ADO a paletei de co"ponente +unciile celor "apte componente din pagina ADO sunt centralizate (n tabelul urmtor) ,abelul nr. -... Funiie c!"#!nente!$ %in #a&ina ADO 'u"e Desc$ie$e ADO#onnection /ealizeaz controlul atributelor de conectare la sursa de date. ADO#o""and Diri0eaz accesul la sursele de date accesate prin Active #. ADODataSet /ealizeaz accesul direct la tabelul cutat utiliz%nd Data $anipulation Language &D$L' sau prin intermediul instruciunilor de tip !1L. ADO$able Acceseaz datele dintr2un singur tabel al bazei de date conectate prin ADO#onnection. ADOQuer% /ealizeaz accesul direct la una sau mai multe tabele din baza de date activ prin instruciuni !1L. ADOStored!roc 3rocedur utilizat (n aplicaiile de tip client, cuprinde un grup de instruciuni pentru metadate &legturi (ntre tabele din baze de date diferite, inde4ri ".a.'. &DS#onnection 5ndepline"te rolul unui manager ce coordoneaz multi2 applications utiliz%nd baze de date de tip business &Application !ervers'. Delp'i i"ple"enteaz( obiecte vizuale ADO pentru a permite dezvoltatorilor crearea celor mai performante "i rapide aplicaii cu suport pentru bazele de date. 3entru a putea lucra cu ADO, este nevoie s cunoa"tem obiectele, coleciile, proprietile "i metodele pe care le implementeaz, (n scopul facilitrii accesului la bazele de date. . 6 CO()O'E'*ELE U*+L+,A*E -' .ES*+U'EA BA,ELOR DE DA*E Componentele non-visuale #o"ponenta $able #o"ponenta DataSource #o"ponenta #onnection Componentele visuale (de date) !ropriet(i co"une ale co"ponentelor de date #o"ponenta D)*rid #o"ponenta D)+avigator #o"ponenta D)$e,t ntrebri i rspunsuri Chestionar Exerciii 5n procesul de gestiune a bazelor de date sistemul De#/i utilizeaz dou categorii de componente) Componente non-visuale (componente de acces la date )) component $able pentru descrierea bazei de date* o component DataSource de transmisie a datelor (ntre componenta de descriere a bazelor de date "i componentele vizuale* o component #onnection cu rolul de a conecta forma la sursa de date. Componente vizuale (componente de vizualizare a datelor), care permit afi"area, editarea "i actualizarea articolelor unei baze de date, de e4emplu D)*rid, D)+avigator, D)$e,t, D)-dit, D)Me"o, D)."age, D)#'ec/)o,, D)List)o,, D)#o"bo)o,, D)&adio*roup, D)Loo/upList)o,, D)Loo/up#o"bo)o,, D)&ic'-dit, D)#trl*rid, D)#'art "i Decision #ube. CO()O'E'*ELE 'O'01+SUALE Componenta Table ( ) Componenta Table, reprezentat de clasa $$able, ofer un acces simplu "i rapid la un tabel. !e gse"te (n pagina de componente ADO. ,abelele sunt cele mai utilizate pentru ma0oritatea aplicaiilor simple de baze de date. De obicei, se va folosi componenta ,able c%nd se gestioneaz baze de date locale. 3roprietatea Dataame &de tip string'. 3rin intermediul ei se specific calea complet spre directorul &dosarul' (n care este memorat baza de date ce urmeaz a fi prelucreat. 3roprietatea Tableame &de tip string'. 5n proprietatea $able+a"e se va specifica numele tabelului din baza de date activ. !e selecteaz tabelul, din lista afi"at, dup desciderea acesteia. - 3roprietatea !ctive &de tip )oolean'. !pecific dac baza de date este descis sau nu. Dac se alege valoarea $rue, atunci baza de date este descis, deci se pot efectua operaiile de citire "i de scriere a articolelor bazei. Dac se alege valoarea False, baza de date este (ncis, nu pot fi citite sau scrise articole ale bazei de date. 3roprietatea "ndexame &de tip string'. 7dentific un nume de inde4 ata"at bazei de date &un nume de inde4 de regul este numele unui c%mp al bazei, (ns se poate construi "i o e4presie folosind diverse nume de c%mpuri'. Aceast proprietate stabile"te c%mpul sau c%mpurile utilizate pentru sortarea articolelor bazei de date. 5n cazul (n care aceast proprietate nu este specificat ordinea de sortare este stabilit de ordinea fizic a articolelor. 3roprietile #aster$ource "i #aster%ields a tabelei master. !unt utilizate la aplicaiile de tip "aster 0 detaliu. 5n cazul acestor aplicaii se lucreaz cu dou tabele. 8nul dintre tabele, denumit master, coordoneaz afi"area articolelor (ntr2o component D)*rid al celuilalt tabel, care este denumit detaliu. Cu a0utorul proprietilor MasterSource "i MasterFields se realizeaz o (nlnuire, (ntre cele dou nume de indec"i, din cele dou tabele. 5n componena D)*rid corespunztoare tabelei detaliu vor fi afi"ate numai articolele din respectiva tabel, pentru care valoarea actual din c%mpul master selectat, coincide cu valoarea actual e4istent (n c%mpul tabelei detaliu. 3roprietatea #aster$ource a tabelei detaliu. Aparine tabelei detaliu "i specific numele componentei DataSource va fi utilizat de tabela master. 3roprietatea #aster%ields &de tip string' a tabelei detaliu. !e specific unu sau mai multe nume de c%mpuri, care sunt nume de indec"i, ale unei tabelei master separate de caracterul 92:&punct "i virgul'. 3roprietatea $aster+ields trebuie definit doar dup ce a fost specificat proprietatea MasterSource. !istemul consult tabela master, dup c%mpurile inde4, articol de articol. 5n acela"i timp sunt analizate valorile actuale ale c%mpurilor din tabela master specificate (n proprietatea MasterFields a tabelei detaliu. Din tabela detaliu vor fi afi"ate numai acele articole, pentru care valoarea c%mpului specificat de c%mpul .nde,+a"e al tabelei detaliu coincide cu valorile actuale din c%mpurile MasterFields ale tabelei master. Componenta DataSource ( ) Aceast component se gse"te (n pagina Data Access "i are urmtoarele proprieti1 3roprietatea !utoEdit &de tip boolean'. !e selecteaz pe $rue pentru a da voie s se cupleze form2ul actual la sursa de date. 3roprietatea ame. !e va seta pe DataSource+ &; este numrul sursei de date active'. 3roprietatea Data$et. /ealizeaz cuplarea la tabelul de date prin ADO$able. < Componenta Connection ( ) Componenta Connection realizeaz conectarea la bazele de date e4terne permi%nd selectarea tipului de baz de dat ce va fi accesat, selectarea bazei de date "i desciderea acesteia. Aceste operaii sunt realizate prin intermediul proprietii #onnectionString. Dup descidere se efectueaz "i un test de conectare corect. Dac conectarea a e"uat se poate relua operaia prin intermediul form2ului Connection!tring, butonul )uild. !e gse"te (n pagina de componente ADO. CO()O'E'*ELE 1+SUALE 3DE DA*E4 Componentele visuale utilizate (n gestiunea bazelor de date mai sunt denumite "i co"ponente de date. $a0oritatea componentelor de date sunt derivate din componente standard "i au multe dintre proprietile asociate cu acest tip de component. !e vor prezenta doar proprietile care sunt specifice gestiunii datelor pentru fiecare component. Proprieti comune ale componentelor de date ,oate componentele de date au proprieti comune. De e4emplu, toate componentele au o proprietate Data$ource. Aceast proprietate este folosit pentru a face legtura (ntre o component de date "i o surs de date, care este ea (ns"i legat de un "ir de date. $a0oritatea componentelor de date au "i o proprietate Data%ield. Aceast proprietate se folose"te pentru a lega componenta de date de un c%mp particular din "irul de date. C%nd se leag o component de date de un c%mp din "irul de date, coninutul c%mpului respectiv este afi"at direct (n componenta de date. $a0oritatea componentelor de date au "i proprietatea %ield. Aceast proprietate se folose"te pentru a obine acces la coninutul &de programare' unei componente. !e pot, de asemenea, scimba caracteristicile de afi"are ale c%mpurilor sau alte proprieti ,+ield cu a0utorul proprietii +ield. !e poate folosi proprietatea &ead'nl( pentru a (mpiedica utilizatorul s modifice datele (ntr2o component de date care permite editarea &DB=rid "i DBEdit, de e4emplu'. Componenta DGrid Componenta D)*rid+ din pagina de componente Data Controls, afi"eaz articolele bazei de date (ntr2un format tabelar sau foaie de lucru. Coninutul diferitelor celule poate fi editat. 5n fiecare linie a foii de lucru se afi"eaz un articol al bazei de date. 3rima linie va conine numele c%mpurilor tabelei de date consultate. 8na din cele mai importante proprieti ale D)*rid0ului este proprietatea Columns. Aceast proprietate permite s se scimbe numrul "i ordinea coloanelor care apar (n tabel. !e vor putea aduga, (nltura sau ordona coloanele folosindu2se Columns Editor. 3entru a lucra cu #olu"ns -ditor, se va da un clic> pe tabel aps%ndu2se pe butonul din dreapta al mouse2ului "i apoi se alege comanda Columns Editor din meniul conte4tual. O alt variant ar fi s se apese pe butonul (n form de elips, aflat l%ng opiunea Columns, (n Ob0ect 7nspector. +olosind Columns Editor, se pot aduga sau "terge ? coloane "i sorta (n ordine coloanele. De e4emplu, un tabel de date poate conine foarte multe c%mpuri, dar la un moment dat, se dore"te s se vad doar 0umtate din acele c%mpuri (n DB=rid. +olosind Columns Editor, se pot ascunde c%mpurile care nu se doresc a fi vzute. 'O*56 A nu se confunda proprietatea D)*rid #olu"ns &modificat cu Columns Editor' cu proprietatea componentelor tabelului FieldDefs &modificat cu +ields Editor'. 3roprietatea +ieldDefs a componentelor tabelului controleaz care coloane sunt de fapt coninute (n "irul de date. 3roprietatea Columns afecteaz doar c%mpurile care sunt vizibile (n tabel. 3roprietatea De,aultDra-in. indic dac @CL deseneaz celulele (n tabel sau sunt desenate implicit. Dac DefaultDraAing este +alse B nu este activat B trebuie s se rspund evenimentelor OnDraAColumnCell "i OnDraADataCell pentru a realiza desenarea celulelor. 3roprietatea 'ptions permite s se stabileasc opiunile de afi"are "i comportament pentru tabel. +olosind aceast proprietate, se pot Cstinge: titlurile coloanelor, se poate sau nu permite redimensionarea coloanelor, afi"a sau nu liniile celulelor "i a"a mai departe. 3roprietatea Title%ont permite s se stabileasc tipurile de caractere folosite la titlurile coloanelor. !e va folosi aceast proprietate pentru a stabili tipurile de caractere folosite (n celulele tabelului. DB=rid are doar dou metode publice. C%nd se folose"te un tabel desenat de utilizator, se vor apela metodele DefaultDra2#olu"n#ell "i DefaultDra2Data#ell pentru a cere @CL2 ului s deseneze celula tabelului. Componenta DB=rid are c%teva evenimente, dintre care ma0oritatea in de editarea celulelor "i navigarea printre date. Componenta DNa!i"ator Componenta D)avi.ator+ din pagina de componente Data Controls, afi"eaz o bar cu diferite butoane care permit utilizatorului s navigeze printr2un "ir de date, (nregistrare cu (nregistrare put%ndu2se efectua "i operaii de editare. ;avigatorul ofer butoane pentru prima (nregistrare, urmtoarea, precedenta, ultima (nregistrare, introducere, "tergere, editare (nregistrare, oprirea editrilor, afi"area editrilor "i actualizarea articolelor. Aceast component este aproape automatic, deoarece tot ceea ce trebuie s fac utilizatorul este s o pun pe form, s o lege de sursa de date "i s o lase s funcioneze. Bara afi"at are aspectul urmtor) 3rincipalele proprieti ale componentei DB;avigator care se vor seta sunt) 3roprietatea Con,irmDelete, c%nd este setat pe ,rue, adic este activat, determin apariia unei ferestre de dialog care va fi afi"at de fiecare dat c%nd utilizatorul apas pe butonul Delete. D !etarea proprietii /ints &de tip !trings' pe ,rue &activat' descide fereastra List String -ditor (n care sunt denumirile butoanelor, permi%nd sugestii pentru fiecare buton de pe navigator. La editorul de cod se pot introduce sugestii pentru fiecare buton de pe navigator) o First record o Prior record o Next record o Last record o Insert record o Delete record o Edit record o Post edit o Cancel edit o Refresh data 3roprietatea 0isible)uttons d posibilitatea s se aleag care butoane s fie vizibile pe navigator. !e pot aduga sau "terge butoane (n timpul crerii sau (n timpul funcionrii programelor. 3entru fiecare buton e4ist posibilitatea de a fi activat sau dezactivat &a"a cum se vede (n +ig nr. ' Fig. nr. Dezactivarea unor butoane din bara de navigare DB;avigator are doar o metod &)tn#lic/3 de interes "i un eveniment 4On#lic/3. !e poate folosi "etoda )tn#lic/ pentru a simula apsarea unui buton pe navigator. !e va putea folosi eveni"entul On#lic/ pentru a detecta o apsare pe un buton de pe navigator. Oricum, foarte rar trebuie folosit evenimentul OnClic>, deoarece navigatorul "tie de0a ce s fac atunci c%nd butoanele sale sunt apsate. Componenta DTe#t Componenta D)Text+ din pagina de componente Data #ontrols, este o versiune a componentei standard Label dar care ine cont de datele din tabelele bazei de date. Ofer un mod de a afi"a datele dintr2un c%mp, fr a permite utilizatorului s efectueze modificri asupra lor. !pecificarea c%mpului se realizeaz prin proprietatea DataField. Aceast component nu ofer( propriet(i, "etode 5i eveni"ente specifice bazelor de date, altele dec%t cele comune tuturor componentelor. Obs6 5n vederea realizrii programelor de consultare a tabelelor din bazele de date trebuie cunoscute cel puin componentele Button "i Label din pagina de componente !tandard. E 5n aceast variant butonul Delete va fi ascuns, nu va aprea (n bara de navigare C!"#!nenta Butt!n Butoanele de comand sunt componentele cel mai des utilizate (n proiectele Delpi. Ele sunt destinate lansrii (n e4ecuie a diferitelor aciuni. 5n momentul (n care se efectueaz un clic pe un buton, se declan"eaz eveni"entul On#lic/ "i se e4ecut procedura corespunztoare evenimentului. Evident "i alte componente sesizeaz faptul c s2a efectuat un clic de mouse asupra lor, deci "i pentru alte componente pot fi scrise proceduri de tratare a evenimentului OnClic>. Componenta )utton &de tip $)utton' se gse"te pe pagina standard a paletei de componente. !imbolul grapic al componentelor de tip buton de comanda are forma) Cele mai importante proprieti specifice componentelor de tip $)utton sunt urmtoarele) !roprietatea Cancel 4de tip )oolean3 !tabile"te "odul de utilizare a tastei -S#. Dac pentru aceast proprietate se selecteaz valoarea True, atunci prin acionarea tastei E!C se va lansa (n e4ecuie procedura ata"at evenimentului On#lic/ &adic efectuarea unui clic de mouse pe buton sau acionarea tastei E!C sunt ecivalente'. E4ist cazuri, (n care o form conine mai multe butoane de comand cu proprietatea #ancel puse pe $rue. 5n acest caz se va e4ecut doar o singur( procedur( On#lic/ "i anume acea procedur, care corespunde primului buton vizibil, (n ordinea de parcurgere cu tasta $A) a formei. @aloarea implicit a proprietii este False. !roprietatea De,ault 4de tip )oolean3 !tabile"te "odul de utilizare a tastei -+$-&. Dac pentru aceast prorietate se selecteaz valoarea $rue, atunci prin acionarea tastei E;,E/ se va lansa (n e4ecuie procedur ata"at evenimentului OnClic> &adic efectuarea unui clic de mouse pe buton sau acionarea tastei Enter sunt ecivalente'. E4ist cazuri, (n care o form conine mai multe butoane de comand cu proprietatea Default &implicit' puse pe ,rue. 5n acest caz se va e4ecuta doar o singur procedur OnClic>, "i anume acea procedur, care corespunde primului buton vizibil, (n ordinea de parcurgere cu taste ,AB a formei. !e menioneaz (ns, c dac un buton a0unge (n focar atunci butonul respectiv se transform (ntr2un buton temporar implicit. Astfel, dac (nainte de a apsa E;,E/ se selecteaz un alt buton se va e4ecuta procedura On-vent a butonului selectat "i nu procedura On-vent a butonului iniial. @aloarea implicit a proprietii este False. !roprietatea #odal&esult !e utilizeaz (n cazul butoanelor care au fost plasate pe forme corespunztoare diferitelor ferestre de dialog. O fereastr( de dialog ese o fereastr modal, adic nu se poate efectua nici o activitate (n fereastra principal p%n c%nd fereastra respectiv nu se (ncide. 3roprietatea $odal/esult comunic dac se (ncide sau nu fereastra de dialog a butonului precum "i modul de (ncidere a ferestrei. 5n momentul (n care se efectueaz un clic pe un buton al ferestrei de dialog proprietatea $odal/esult a ferestrei de dialog se va transforma (n aceia"i proprietatea butonului. @alorile posibile ale proprietii sunt urmtoarele) "r+one, "rO6, "r#ancel, "rAbort, "r&etr%, "r.gnore, "r7es, "r+o, "rAll, "r+o$oAll, , "r7es$oAll. @aloarea implicit este "r+one C!"#!nenta Labe Componenta Labe &eticet, de tip $Label', din pagina de componente standard, permitea fi"area unor te4te statice. ,e4tul respectiv poate fi specificat prin F proprietatea Caption a componentei (n faza de eleboratre a proiectului sau printr2o instruciune de atribuire de forma ) 1abel2 Caption345Textul static56 &unde ; G ., 6, - ".a.m.d.' Componenta Label se gse"te (n pagina standard a paletei de componente av%nd ata"at simbolul grafic 3oate fi folosit "i pentru definirea ceilor de accelrare. Ceile astfel definite pot fi puse (n coresponden cu alte controale care un au proprietatea Caption. 3rin apsarea ceii de accelrare controlul referenial va fi pus (n focar. 3roprietile specifice componentei sunt) !roprietatea !li.nment !pecific poziionarea orizontal a te4tului. @alorile posibile sunt) taLeft8ustif% 0 &valoarea implicit' te4tul este aliniat la mucia din st%nga a dreptungiului* ta&ig't8ustf% 9 te4tul este aliniat la mucia din dreapta a dreptungiului* ta#enter0 te4tul este centrat. !roprietatea 1a(aut !pecific poziionarea vertical a te4tului. @alorile posibile sunt) tl$op 9 te4tul este plasat (n partea superioar a dreptungiului &valoare implicit'* tl#enter 9 te4tul este centrat (ntre mucia superioar "i cea inferioar a dreptungiului* tl)otto" 9 te4tul este plasat (n partea inferioar a dreptungiului. !roprietatea !uto$ize &de tip boolean' /ealizeaz redimensionarea automat a dreptungiului (n funcie de lungimea te4tului. 3e varianta $rue dimensiunea dreptungiului se modific (n funcie de lungimea te4tului. !roprietatea Transparent &de tip boolean' !pecific dac componenta este sau nu este transparent. 3e varianta $rue conponenta va fi transparent. De e4emplu, dac (n spatele eticetei se afl o imagine grafic, iar eticeta este transparent, graficul un va fi acoperit de eticet. !roprietatea 7ord7rap &de tip boolean' !pecific dac te4tul eticetei poate fi afi"at pe mai multe linii. Are dou valori ,rue "i +alse. 3e valoarea $rue, dac te4tul eticetei este prea lung, va fi (mprit pe mai multe linii. 3e varianta False te4tul eticetei se limiteaz la o singur linie &poate fi trunciat'. !roprietatea $ho-!ccelChar &de tip boolean' !e refer la modul de afi"are a caracterului CH: &ersand' situat (n te4tul aferent comonentei. 3e varianta $rue caracterul ce urmeaz dup H va fi subliniat. 8n caracter subliniat 0oac rolul unui accelerator. Dac se acioneaz ta4ta corespunztoare caracterului subliniat atunci focarul va a0unge la componenta specificat de proprietatea Focus#ontrol. Dac se alege varianta False atunci caracterul CH: va fi afi"at ca atare, iar proprietatea Focus#ontrol nu poate fi utilizat. I E*A)ELE 'ECESARE CO'SUL*5R++ U'E+ BA,E DE DA*E /ealizarea unui program prin care s se consulte o baz de date creat (n mediul de lucru !ccess "i s se vizualiueze un tabel, din cadrul acesteia, (ntr2o form Delpi. Ce$inee #$!be"ei6 ,abelul din baza de date creat (n Access s se poat vizualiza (n totalitate. 3e forma final s se regseasc urmtoarele elemente) O eticet care s conin denumirea tabelului* O bar cu butoane de control* 7nformaiile din tabel s fie afi"ate sub form de !eet* ,abelul afi"at s conin bare de defilare &:orzScroll)ar 5i ;ertScroll)ar' at%t pe vertical c%t "i pe orizontal* 8n buton pentru prsirea aplicaiei. Re7!va$e6 8. 8re.tirea consultrii bazei de date. 3e form se va plasa o component de tip non2visual ADO#onnection av%nd ca scop conectarea form2ului la tipul de baz de date ce va fi accesat "i se va descide dup operaia de selectare. O component non2visual ADO$able se aduce pe form, prin intermediul ei se va seta tabelul de lucru din baza de date activ. O a treia component non2visual, intitulat DataSource se va fi4a pe form, av%nd rolul de a preciza sursa de date activ (n acel moment. Dup selectarea proprietilor celor trei componente, tabelul selectat devine activ a"tept%nd s fie vizualizat. 2. !,iarea coninutului unui tabel pe ,orm. Dac se solicit vizualizarea fi"ierului sub form de foaie de calcul, (n care s se poat vedea "i denumirile c%mpurilor, se va folosi componenta visual D)*rid care permite aceast variant de afi"are. 5n acest scop, se va fi4a pe form un DB=rid, se redimensioneaz conform cerinelor "i se cuplez la sursa de date. 5n urma acestor operaii =rid2ul a fost pregtit pentru a primi informaii. 3reluarea informaiilor din tabelul activ "i aducerea (n grid se realizeaz prin intermediul componentei ADO$able set%ndu2i proprietatea Active pe $rue. 3. !du.area elementelor adiionale. ,itlul tabelului se realizeaz printr2o etic'et( plasat pe form "i creia i se scimb numele (n concordan cu fi"ierul "i tabelul consultat. Butoanele de navigare se afi"eaz prin intermediul componentei visuale D)+avigator. Componenta se va cupla la sursa de date pentru a fi activ pe sursa respectiv. Butonul de (ncidere va fi creat de componenta )utton. +uncia butonului se va realiza prin cod program. 9. 1ansarea 9n execuie a ,orm-ului2 !e salveaz <nit2ul realizat cu a0utorul comenzii File = Save As, eventual se poate, (n aceast faz, s i se atibuie alt nume dac se dore"te acest lucru. .J !e salveaz proiectul generat cu a0utorul comenzii File = Save !ro>ect As. Denumirea implicit dat de sistem se poate scimba. !e lanseaz (n e4ecuie proiectul realizat prin comanda &un = &un din meniul principal. Detaie$ea eta#e!$ %e uc$u . !e descide o nou aplicaie File?+e2?Application. @. 5n coloana de valorii a proprietii #aption a form2ului se va scrie numele apllicaiei, de e4emplu, #onsultare )D. 3. 3e form se aduc urmtoarele componente) ADO#onnection din pagina ADO* ADO$able din pagina ADO* DataSource din pagina Data Access. A. 5n vederea conectrii la sursa de date se va e4ecuta dublu clic> pe ADOConnection. 5n fereastra #onnection String se e4ecut dublu clic> pe butonul intitulat )uild av%nd ca efect desciderea ferestrei cu numele Data Lin/ !roperties. Din aceast fereastr se va selecta tipul de obiect corespunztor bazei de date ce va fi activat. Dac baza de date a fost creat (n Access se va selecta Microsoft 8et A,B OL- D) !rovider ca provider de date. Acest provider folose"te motorul KE, pentru a accesa bazele de date Access. 5n continuare vom selecta butonul +e,t. +ig nr Conectarea la sursa de date C. 5n fereastra Data Lin/ !roperties se va selectaLintroduce calea spre o baz de date Access, prin intermediul casetei de dialog 82 $elect or enter a database name2 5n caseta de dialog respectiv se poate introduce calea spre fi"ierul cutat &dac se cunoa"te' .. sau se e4ecut dublu clic> pe butonul trei puncte din dreapta permi%ndu2se selectarea bazei de date. !e descide apoi baza de date selectat prin butonul Open. D. !e e4ecut te4tul de conectare corect, prin $e,t #onnection. !e revine la caseta de dialog anterioar aps%nd butonul O: din partea de 0os, pentru a (ncide caseta de dialog care a permis stabilirea unei cone4iuni, unde, (n caseta de editare :se Connection $trin. se observ c s2a generat un "ir de cone4iune ctre baza de date &+ig nr. '. +ig nr. Mirul de cone4iune ctre baza de date E. !e aps butonul O: pentru a (ncide "i aceast caset de dialog. 5n acest momen, s2a stabilit o cone4iune prin ADO la o baz de date Access. Acum trebuie activat aceast cone4iune. Acest lucru (l vom face modific%nd proprietatea C!nnecte% din Fase la *$ue. Fig nr Activarea cone,iunii la baza de date F. 3e form se selecteaz ADO$able. !e verific dac la proprietatea +a"e este ADO$able. 3roprietatea #onnection se va seta pe ADO#onnection. Ceea ce s2a fcut de fapt a fost s se stabileasc c obiectul ADO$able va fi legat la baza de date stabilit (n cone4iunea realizat anterior. .6 Fig nr. #onectarea tabelului la obiectul ADO#onnection G. De pe form se selecteaz componenta Data Source. 3roprietatea Data Set se seteaz pe ADO$abe. 3roprietatea +a"e trebuie s fie DataSource. B. !e revine la ADO$able. !e selecteaz proprietatea $able+a"e. Din lista tabelelor afi"ate, care se descide, acion%nd sgeata din dreapta a coloanei de valorii, se va selecta un tabel, de e4emplu tabelul +acturi, a crui structur este prezentat (n Fig nr.3.@ HStructura tabelului FacturiI. Fig nr.3.@. Structura tabelului Facturi . Din pagina de componente Data #ontrols se selecteaz componenta D)*rid "i se duce pe form. 5n aceast component se va afi"a tabelul a crui imagine se aduce din baza de date. !e stabile"te mrimea gridului prin tragere cu mouse2ul de punctele din mi0locul liniilor sau de la colurile dreptungiului. Fig nr. Fi,area co"ponentei D)*rid pe for" .- @. !e selecteaz prorietatea DataSource a DB=rid2ului "i se seteaz pe DataSource. +orma gridului este pregtit s primeasc informaii. 5n aceast faz gridul a fost cuplat la sursa de date. Fig nr. !reg(tirea gridului pentru a pri"i infor"aii 3. !e revine la ADO$able "i se seteaz proprietatea Active pe $rue. 5n acest moment DB=rid2 ul a preluat informaiile din tabelul selectat. Fig nr Setarea propriet(ii Active pentru ADO$able A. !e salveaz unit2ul prin Save As "i proiectul prin Save !ro>ect As din meniul File "i apoi se lanseaz (n e4ecuie cu &un din meniul principal. +orma realizat poate fi conform Fig nr. 3.3. H<n "odel de consultare fi5ier Access Jn Delp'iI .< Fig nr.. <n "odel de consultare fi5ier Access Jn Delp'i Dac se dore"te (mbuntirea formei se mai poate aduga o bar de navigare* un titlu pentru tabel* un buton de (ncidere a aplicaiei. C. )ara de navi.are. Din componenta Data#ontrols se selecteaz D)+avigator "i se plaseaz pe form (n poziia dorit. !e redimensioneaz dup dorin. !e cupleaz la sursa de date set%nd2ui proprietatea DataSource pe DataSource. D. Titlu pentru tabel. Din componenta Standard se alege Label "i se fi4eaz pe form. 5n proprietatea #aption a eticetei se va scrie denumirea tebelului. !e poate scimba font2ul, stNle2ul, dimensiunea "i culoarea caracterelor select%nd proprietatea Font "i e4ecut%nd dublu clic> pe butonul cu trei puncte din &$Font' care descide fereastra Font din care se selecteaz opiunile dorite. E. )uton de inchidere2 Din componenta Standard se alege )utton. 5n proprietatea Caption a acestuia se va scrie numele butonului, de e4emplu -K.$. !e e4ecut dublu clic> pe buton, operaie care descide editorul de cod progra". 5n procedur, la poziia cursorului, se scrie comanda pentru ie"ire. Aceasta este CApplication.$er"inateLI dup care cu F@ se revine la form 4Fig. nr. 3.A. For"a J"bun(t(it(3. .? Fig nr 3.A. For"a J"bun(t(it( F. !e e4ecut salvrile &Fie; $ave !s pentru 8nit', &Fie;$ave 8ro;ect !s salvarea proiectului' "i se lanseaz programul (n e4ecuie prin comanda &un<&un 4Fig. nr.3.C. &ezultatul e,ecuiei3. Fig nr.3.C. &ezultatul e,ecuiei @iteza de acces la baza de date depinde de puterea motorului ADO, de fiabilitatea serverului de baze de date folosit "i de performana driverului OLEDB folosit pentru a acesa datele. 3uterea mediului Delpi const (n faptul c pa"ii de creare .D a unei aplicaii de baze de date sunt identici indiferent de baza de date folosit, ceea ce difer este driverul prin care se acceseaz sursa de date. CO'SUL*ARE BD U*+L+,<'D *ABEL5 (AS*ER Crearea unei aplicaii, prin care s se consulte dou tabele cu relaie de tip 80' (ntre ele, considerate o tabel master "i una detaliu, presupune parcurgerea mai multor etape de lucru. 3entru a e4emplifica, se consider baza de date *est#li din care se vor consulta dou fi"iere (ntre care se va stabili o relaie de tip master2detaliu. Fi5ierul "aster va fi tabela #lieni, iar fi"ierul detaliu tabela Facturi. 3rin programul, ce urmeaz a fi realizat, se dore"te s se vizualizeze, (n tabela detaliu, toate facturile pentru clientul cu un anumit cod a crui selecie se va face (n tabelul master. Corespondena dintre cele dou tabele va fi realizat prin intermediul c%mpului de legtur #od#li. ;u este necesar s se creeze (n Access relaia dintre tabele. /ealizarea acestei aplicaii presupune consultarea a dou tabele, din cadrul acelea"i baze de date. 8nul dintre tabele va fi declarat "aster iar al doilea detaliu. /elaia dintre cele dou tabele se va realiza printr2un c%mp comun. 5n acest scop pe form se vor plasa ?&cinci' componente non2visuale "i ?&cinci' componente visuale) 6 &dou' componente D)*rid pentru afi"area datelor* 6 &dou' componente Label pentru a denumi cele dou griduri* o component )utton pentru prsirea rulrii aplicaiei. Eta#e %e uc$u6 . !e descide o nou aplicaie File?+e2?Application. @. 5n coloana de valorii a proprietii #aption a formei se va scrie Consultare utiliz=nd Tabel #aster2 3. 3e form se aduc urmtoarele componente non2visuale) ADO#onnection din componenta ADO 3842 ADO$able din componenta ADO 324 * DataSource din componenta Data Access 3242 D)*rid din componenta Data Controls 324. A. 5n vederea conectrii la sursa de date se va e4ecuta dublu clic> pe ADO#onnection. 5n fereastra #onnection String se e4ecut dublu clic> pe butonul intitulat )uild av%nd ca efect desciderea ferestrei cu numele Data Lin/ !roperties. Din aceast fereastr se va selecta tipul de obiect corespunztor bazei de date ce va fi activat. Dac baza de date a fost creat (n Access se va selecta Microsoft 8et A,B OL- D) !rovider "i apoi butonul +e,t. .E Fig nr. 3.D. #o"ponente necesare consult(rii prin tabel( "aster C. 5n fereastra Data Lin/ !roperties se e4ecut dublu clic> pe butonul trei puncte din dreapta csuei . Select or enter a database na"e. !e selecteaz baza de date &de e4emplu *est#li' "i se descide prin butonul Open. D. !e e4ecut te4tul de conectare corect, prin $e,t #onnection. Apoi O6 de dou ori. E. !e selecteaz pri"a ADO$able. !e scimb proprietatea +a"e (n #aster. 3roprietatea #onnection se va seta pe ADOConnection.. 3roprietatea $ableDirect de seteaz pe ,rue, iar la proprietatea $able+a"e, acion%nd sgeata din dreapta a coloanei de valorii, din lista tabelelor bazei de date afi"ate de sistem, se va selecta tabelul ce va fi "aster, de e4emplu tabelul #lieni. La proprietatea .nde,Field+a"es se va trece codul inde4, de e4emplu)#od#li2 Cele dou tabele care vor intra (n relaie, prin intermediul c%mpului de legtur CodCli, create (n Access, sunt prezentate (n +ig nr. -.E. C$abelele #lienti 5i Facturi din baza de date *est#liI. Fig nr.3.E. $abelele #lienti 5i Facturi din baza de date *est#li F. !e selecteaz cea de2a doua ADO$able. !e scimb proprietatea +a"e (n Detaliu. 3roprietatea #onnection se va seta pe ADOConnection.. 3roprietatea MasterSource de seteaz pe Data!ource., iar la proprietatea $able+a"e, acion%nd sgeata din dreapta a coloanei de valorii, din lista tabelelor bazei de date afi"ate de sistem, se va selecta tabelul ce va fi detaliu, de e4emplu tabelul Facturi. 3roprietatea Active se seteaz pe ,rue. La proprietatea .nde,Field+a"es se va trece codul inde4, de e4emplu) #od#li2 La proprietatea MasterField se va seta c=mpul de le.tur cu tabela master, de e4emplu) #od#li2 Acest cod se va obine acion%nd pe butonul cu trei puncte din coloana de valori a proprietii care descide fereastra FieldLin/Designer. Din lista Detail Fields se va alege c%mpul de legtur al tabelei declarat Detail, iar din lista Master Fields se va alege c%mpul de legtur al tabelei master. Cele dou c%mpuri selectate se vor regsi (n lista 8oined Fields legate (ntre ele printr2o sgeat. Dac selecia este corect se acioneaz butonul OO 4Fig nr. 3.F. &ealizarea leg(turii dintre cele dou( tabele3. .F Fig nr.3.F. &ealizarea leg(turii dintre cele dou( tabele G. !e selecteaz pri"a component DataSource. 3roprietatea DataSet se seteaz pe Master. 3roprietatea +a"e trebuie s fie Data!ource.. !e trece la evenimente unde DataSet se va seta pe #aster. B. !e selecteaz cea de2a doua component DataSource. 3roprietatea DataSet se seteaz pe Detaliu. 3roprietatea +a"e trebuie s fie Data!ource6. !e trece la evenimente unde DataSet se va seta pe Detaliu. . Din componenta Data #ontrols se selecteaz DB=rid "i se duce pe form de dou ori. !e stabilesc mrimile acestora prin tragere cu mouse2ul de punctele din mi0locul liniilor sau de la colurile dreptungiurilor. 5n prima component se va afi"a tabelul master ce se aduce din baza de date. 5n cea de2a doua component se vor afi"a elementele de detaliu din cea de2a doua tabel. 3roprietatea +a"e va fi D)*rid "i respectiv D)*rid@. !e selecteaz prorietatea DataSource a primului DB=rid "i se seteaz pe DataSource. 3roprietatea DataSource pentru cel de a2l doilea se va seta pe DataSource@. !e verific -vents dac Data!ource este Data!ource. pentru primul DB=rid "i Data!ource6 pentru cel dea2l doilea DB=rid. 5n acest moment forma cu cele dou griduri este pregtit s primeasc informaii. @. !e revine la pri"a ADO$able unde proprietatea Active se seteaz pe ,rue. Ca efect al acestei operaii (n DB=ridul setat pe Data!ource. se vor regsi toate in,ormaiile din tabela master2 3. !e revine la cea de2a doua ADO$able "i se seteaz proprietatea Active pe ,rue. DB=rid2ul setatat pe Data!ource6 va prelua in,ormaiile de detaliu din tabelul conectat conform seleciilor din tabela master 4Design0ul realizat va fi ase"(n(tor cu cel din Fig. nr. 3.G. H&ealizarea for"ei pentru consultate cu tabel( MasterI 3. .I Fig nr.3.G. &ealizarea for"ei pentru consultate cu tabel( Master !e salveaz unit2ul creat prin Save As iar proiectul realizat prin Save !ro>ect As din meniul +ile "i apoi se lanseaz (n e4ecuie cu &un din meniul principal &Dup e4ecuie form2ul realizat poate fi asemntor cu cel din Fig nr. 3.B.H$abelul Facturi prezint( toate Jnregistr(rile corespondente confor" seleciei din tabeul #lientiI. Fig nr.3.B. $abelul Facturi prezint( toate Jnregistr(rile corespondente confor" seleciei din tabelul #lienti Obs: Obiectele, din paginile !D' i Data Controls+ precum !D'Table+ !D'>uer(, D)*rid+ D)avi.ator+ funcioneaz identic pentru toate tipurile de surse de date, datorit aritecturii motorului ADO. 3rin acest e4emplu s2a creat o relaie Jntre tabelul "aster 5i tabelul detail. Aceast relaie a legat cele dou tabele printr2un c%mp comun) C!%Ci. 3entru a (nelege (n totalitate ce (nseamn acest lucru, se va rula programul "i se trece de la o (nregistrare la alta (n tabelul master. 3e msur ce se va selecta codul clientului (n tabelul master se vor vedea numai facturile clientului selectat (n tabelul detail. 6J