 |
| |
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.
|