Fujitsu-Siemens
 
M A G A Z I N
 
PROGRAMIRANJE 
  Nikola Radivojević

Borland DBExpress

Razvoj informacionih sistema i informacionih tehnologija uopšte, u našoj državi nije išao uporedo sa razvojem navedenih obleasti na svetskom nivou. Kako je došlo do otvaranja naših firmi ka inostranom tržisštu i povećanja potreba za informacionim sistemima, a u isto vreme i nemogućnosti malih firmi da plate svu potrebnu opremu, naročito softver (pošto godinama nije ulagano u te svrhe), javio se problem razvoja “jeftinih” informacionih sistema. Kao neka od rešenja predstvljaja primena pojedinih open source izdanja ili cele platforme. Cilj ovoga i narednih nekoliko članka je da pokaže primer kako se dobar informacioni sistem može izraditi korišćenjem Borlandovih alata sa primenom bilo koje baze, gde će prvenstveno pažnja biti posvećena InterBase-u (preporučuje se open source distribucija, ali se može primeniti i na ostale server baze podataka - MySql, Oracle, DB2, ...). Sve što bude bilo napisano važiće za razvojene alate Delphi i Kylix, ali je analogno za primenu korišćenjem C++Builder-a i Kylix (C++Builder), što znači da su primeri portabilni između Windows i Linux platforme, kako serverskog dela, tako i klijentskih aplikacija.
U ovme članku biće reči o konekciji ka bazi podataka, načinima pristupa, čitanja i promene podataka u bazi podataka. Baza koja će biti korišćenja je employee.gdb (demostraciona baza koja dolazi uz distribuciju InterBase servera).
Rada sa bazama podataka korišćenjem Borland DBExpress biblioteka
U prvim verzijama Delphi-a jedini način pristupa bazama podataka bio je korišćenjem BDE-a (Borland Databa Engine). Počevši od verzije 3 Delphi-a, VCL komponente vezane za pristupe bazama podataka su iznova projektovane na način takav da dozvole različite načine pristupa bazama podataka. U Delphi-u 5 je uveden skup komponenti koji podržavaju ADO (Microsoft ActiveX Data Objects) i IBX (InterBase Express). Delphi 6 je uveo novo rešenje za pristupe bazama podataka predstavljajući rešenje kao: “brand-new cross-platform and database-independent data-access technology” koje je takođe omogućeno u Kylix-u i potpuno primenljivo na Linux platformama.
Razlike između DBExpress-a i drugih načina pristupa bazama podataka
Bitna prednost DBExpress-a u odnosu na druge načine pristupa (ADO, BDE) je u tome što DBExpress koristi “lightweight” način pristupa bazama podataka, i omogućuje portabilnost koda između Delphi-a i Kylix-a. Pored prednosti ove biblioteke imaju i bitna ograničenja. Mogu pristupati samo SQL serverima, nemaju mogućnosti keširanja podataka i imaju mogućnosti isključivo jednosmernog pristupa podacima i nemaju mogućnosti direktne izmene podataka. Poredeći ove razlike sa ostalim metodama pristupa podacima, vidimo da je DBExpress prilično ograničen u svojim mogućnostima, što je u slučajevima pristupa podacima koji se nalaze na serverima i kojima se pristupa putem mreže velika prednost. U slučajevima kao što je ADO i BDE podaci bi se čitali i keširali na lokalnom računaru, što dovodi do dodatnog opterećenja sistema i usporenja u radu. Ovi efektni nisu vidljivi i značajni kada se radi sa malim skupom podataka, ali postaju itekako zančajni kada pregledate veće količine podataka. Takođe se može desiti da se određeni podaci nekoliko puta keširaju na lokalnom računaru.
Prednost korišćenja jednosmernih kursora je u brzom čitanju podataka koji se dobijaju od servera. Ovakav pristup omogućava apsolutnu kotrolu nad podacima, kao i brži rad sa njima. Primetne su razlike ukoliko trebamo izgenerisati izveštaje koje dobijamo jednostavnim čitanjem podataka iz tabela servera baze podataka. Što se tiče ograničenja u pregledanju podataka praktično se može opisati na sledeći način: Kod ADO i BDE pristupa prilikom pregledanja podataka imali ste mogućnosti poziva metoda First, Prior, Next, Last, Locate, kao i korišćenje bookmark-a, dok u DBExpress bibliotekama imate mogućnost korišćenja samo First i Next metoda. Pored ograničenja u pregledu podataka postoji i nemogućnost promena postojećih podataka, tako da se samim tim i gube događaji kao što su BeforeUpdate i AfterUpadate. Ovako postavljene stvari mogu delovati kao dovoljna prepreka da se ne koristi ovakav način rada sa podacima. Rešavanje ovih problema biće kasnije opisano, gde će se videti kakvu prednost sve može doneti ovakav način rada, koji jedini ustvari predstavlja implementaciju pravog klijent – server modela aplikacije.


Primena DBExpress-a


Kako je već rečeno, DBExpress je “cross-platform”, tako će i sve što bude bilo rečeno važiti, kako za Delphi, tako i za Kylix. Osnovni set komponenti predstavljaju: SQLConnection, SQLDataSet, SQLQuery, SQLStoredProcedure, SQLTable, SQLMonitor, SQLClientDataSet(SimpleDataSet).
SQLConnection
Određuje konekciju ka serveru baze podataka. Konekcija se obezbeđuje preko drajvera ka bazi podataka, tako da za svaki tip servera baze podataka mora postojati i odgovarajući drajver. Konekcija se ostvaruje preko parametara koji su konfigurabilni, kako za vreme projektovanja, tako i za vreme izvršavanja aplikcaija. Definisane konekcije i podaci o drajverima se nalaze u direktorijumu $(Borland Shared)\DBExpress u “ini” fajlovima. Tako da ako se pogleda za npr. koneciju ka InterBase serveru, videćemo sledeće podatke:
[Interbase]
GetDriverFunc=getSQLDriverINTERBASE
LibraryName=dbexpint.dll
VendorLib=GDS32.DLL
BlobSize=32
CommitRetain=True
Database=database.gdb
Password=masterkey
RoleName=RoleName
TransIsolation=ReadCommited
User_Name=sysdba
WaitOnLocks=True
Ove podatke po potrebi možemo izmeniti, kao i dodati nove nove konekcije. Ovo se može jednostavno uraditi korišćenjem DBExpress Connection Editor-a, koji se staruje putem pomoćnog menija na komponenti SQLConnection, a čiji je prikaz dat na slici 1. Iz pomenutog editora možemo pregledati postojeće drajvere i njihove parametre preko opcije View Driver Settings, što je prikazano na slici 2.

Slika 1. DBExpress Connection Editor

 

Slika 2. DBExpress Drivers


Ukoliko ne želite da se vezujete za paramtre koji su podešeni prilikom izrade aplikacije, SQLConnection omogućava da se paramtri postave pre konekcije ka bazi podataka. Ovo se može postići setovanjem svojstva LoadParamsOnConnect na “True”. Da bi ovo moglo da funkciioniše mora se pored aplikacije distribuirati i connections.ini fajl. Bitna razlika između DBExpress konekcija i ostalih je u tome što sve konkcije ka bazama podataka isključivo moraju ići preko SQLConnection komponente, i nije moguće određivati konkciju ka bazi podataka iz SQLTable ili SQLQuery kopmonenti.
SQLTable, SQLQuery, SQLStoredProcedure
Ove tri komponente imaju veoma slične metode sa komponentama TTable, TQuery i TStoredProc (BDE) i koriste se na skoro identičan način. Tako da se svi koji su radili sa BDE-om mogu veoma lako da se snađu i sa DBExpress-om, tako da ove kokmponente neće biti dodatno opissane.
SQLDataSet
Pored prethodno navedenih komponenti, DBExpress bibiloteke sadrže i ovu komponentu koja se izvodi iz DataSet komponente i predstavlja generičku DataSet kontrolu. Ukoliko nema potrebe da se kodovi koji se pišu prebacuju sa jedne na drugu metodu pristupa bazama podataka (BDE, DBExpress, ADO, IBExpress, ...) preporučuje se korišćenje ove komponente. Predhodne tri i ova komponenta se izvode iz TCustomSQLDataSet koja je osnovna klasa za rad nad kursorima podataka. Razlika je u tome što postoje svaka od prethodne tri komponente koristi određeni interfejs za čitanje podataka i pristupu određenim resursima, dok SQLDataSet može menjati interfejse i u zavisnosti od interfejsa pristupiti resursima koji su vezani za te interfejse. Interfejs ka podacima se podešava postavljanjem svojstva CommandType na određenu vrednost. Trenutno postoji mogućnost izbora između (ctQuerty, ctStoredProc, ctTable). ctTable i ctStoredProc se koriste za pristupe tabelama, odnosno procedurama na serveru baze podataka, dok se interfejs ctQuery koristi za unos sql komande koje će se uputi serveru. Izbor tabele, procedure i unos sql komande vrši se preko svojstva CommandText. Kada je interfejs postavljen na ctTable ili ctStoredProc u okviru Object Inspector-a za polje CommandText pojavljuje se ComboBox koji nam daje mogućnost odabira, dok se u slučaju ctQuery interfejsa pojavljuje mogućnost pozivanje CommandText Editor-a koji nam olakšava unos željene komande (slika 3). Samo iščitavanje podataka nakon podešenih parametara se izvršava pozivanjem metode Open. Osim podešavanja parametara za vreme izrade aplikacije ovi parametri se mogu podesiti i za vreme izvršavanja:
SQLDataSet1.CommandType := ctTable;
SQLDataSet1.CommandText := ‘COUNTRY’;
SQLDataSet1.Open;

Slika 3. CommandText Editor


Pored iščitavalja podataka sa servera postoji mogućnost izmene podataka, ili unos bilo koje komande koja će se proslediti serveru, a koja ne vraća skup podataka, nego je izvršnog tipa. Izvršavanje ove komade se postiže pomoću metode ExecSQL:
SQLDataSet1.CommandType := ctQuery;
SQLDataSet1.CommandText := 'INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION) VALUES (:Name, :Capital, :Population)';
SQLDataSet1.Params[0].AsString := 'Srbija i Crna Gora';
SQLDataSet1.Params[1].AsString := 'Beograd';
SQLDataSet1.Params[2].AsInteger := 10000000;
SQLDataSet1.ExecSQL;
SQLClientDataSet(SimpleDataSet)
Ova kopmonenta je veoma korisna pošto u sebi zapravo sadrži tri komponente: SQLDataSet, DataSetProvider, ClientDataSet, što daje mogućnosti povezivanja preko SQLCOnnection na server, iščitavanja podataka, keširanje podataka u memoriju, gde se podaci mogu obrađivati, a zatim po potrebi promene se ažurirati na serveru.
Ranije je spomenuto da je keširanje loša metoda rada sa podacima u klijent-server okruženju podataka. Ovo i dalje važi kao loša metoda, ali može biti izuzetno korisno u pojedinim slučajevima. Koja je zapravo prednost korišćenja DBExpress-a? Podaci se iščitavaju bez bilo kakvnog keširanja i usporenja u radu u svim slučajevima, osim kada se eksplicitno želi to uraditi. Kod dugih metoda (BDE, ADO) nemate mogućnost izbora, tako da je ovo velika prednost.
Kada se koristi ova komponenta mora se vositi računa o količini podataka koju se zahtevaju od servera. Komponenta radi na sledeći način: Nakon uspostavljanja konekcije i pozivanja metode Open svi podaci iz kursora se iščitavaju i smeštaju u memoriju odakle se vrši dalje prikazivanje i obrada. Ovakvi kursori su dvosmerni (bidirectional), i moguće je pozivati sve metode za navigaciju kroz podatke (First, Prior, Next, Last, Locate, ...). Takođe su nasleđene metode od kompoenente ClientDataSet koje pružaju veliku fleksibilnost i raznolikost, tako da u svakom slučaju ova komponenta predstavlja dobar izbor. Jedino postoji ograničenje u tome što nema mogućnosti određivanja ili upravljanja nad operacijom keširanja. Veoma velika prednost je bila u mogućnosti da se može ovime upravljati, jer u nekim slučajevima nam zaista ne trebaju svi podaci, već bi eventualno bilo zgodno da se podaci keširaju po blokovima i to po potrebi. Veoma korisna upotreba može biti u slučaju analize postojećih podataka gde bi se krajnji rezultati dobili obradom podataka koji su smešteni u memoriju, što daje mogućnosti da se do rezultata koji se dobija izvršavanjem raznih proračuna nad podacima dodje velikom brzinom, pošto se obrada vrši u okviru RAM-a.
SQLMonitor
Pruža mogućnost da nadgledanja rada i protoka podataka putem DBExpress kontrola. U suštini zgodno je koristi ovu komponentu za vreme testiranja aplikacije, a može po neki put značiti i administratorima servera baze podataka da vide na koji način i kako pojedine aplikacije zahtevaju podatke i kako na te zahteve odgovara server, radi podešavanja parametara servera i dobijanja boljih performansi. Ova komponenta ima mogućnost prikazivanja samo zahteva koje šalju DBEXpress komponente ka serveru baze podataka. Sličnan monitor se postoji i u Internet Express setu komponenti (IBXMonitor), a uz distribuciju Delphi-a dolazi aplikacija SQL Monitor koja može nadgledati rad BDE-a.


Zaključak


U ovom radu su grubo opisane komponente koje se nalaze u DBExpress bibliotekama, objašnjene su osnovne razlike, prednosti i nedostatci koje pruža ovakav način rada sa serverima baze podataka. Kao demonstracija opisanih problema priložen je kod. U nerednim člancima biće objašnjen način analize unesenih podtaka, kreiranje izveštaja i njihovo publikovanje kao i primer jednog konkretnog informacionog sistema.

 

VRH STRANE

(c) 2003 OMEGA - sva prava zadržana