Delphi - Interbase 6 alkalmazása Delphi-ben

Interbase 3. rész

forráskód letöltése
A cikksorozat harmadik részében a TIBDatabase komponenssel ismerkedünk meg. Megismerkedünk a komponens legfontosabb tulajdonságaival, metódusaival és eseményeivel. Megnézzük, hogy mire is tudjuk használni ezt a komponenst, és elkezdjük példaprogramunk építgetését is. Általában a TDatabase komponens egy meghatározott adatbázis elérését biztosítja. Ha Paradox vagy DBase táblákkal dolgoztunk, akkor nem volt kötelező a használata, a programunk indulásakor automatikusan létrehozott egy példányt. Az adatbázis-szerverekhez való csatlakozáshoz szükséges egy TDatabase objektum. Ez biztosítja számunkra az utat az adatbázis felé, csatlakozáskor felelős a jelszó bekéréséért és metódusaival tranzakció-kezelést tudunk megvalósítani. Ha egy TDatabase komponenst használunk, akkor a tábla és lekérdezés komponenseink a DatabaseName tulajdonságukkal nem álnévre, hanem egy TDatabase komponensre mutatnak, és ez mutat a konkrét adatbázisra.

Talán már igen sokan használták a TDatabase komponenst, ha nem is adatbázis-szerverhez kapcsolódni, de MS Access táblák eléréséhez. Ha megnézzük a két komponens esetében a tulajdonság szerkesztő ablakot, jelentős eltérést találhatunk. Azonban aki egyszer már használta a TDatabase komponenst, az minden segítség nélkül elboldogul a TIBDatabase komponenssel is. Ugyanis a legfontosabb tulajdonságaik és metódusaik használata azonos.

A TIBDatabase komponens

A komponens legfontosabb feladata az, hogy segítségével közvetlen kapcsolatot tudjunk teremteni alkalmazásunk és az InterBase adatbázis között. Ez a komponens az InterBase Express csomag egyik központi komponense. Amint a későbbiekben látni fogjuk, a TIBSQL és minden a TIBCustomDataSet ősből származó komponens használja az adatok kinyerésére az adatbázisból.

A komponens legfontosabb tulajdonságai:
  • Connected: megmutatja, hogy adatbázis-kapcsolatunk aktív vagy nem. Ha a tulajdonságot igazra állítjuk, akkor a kapcsolat felépül az adatbázissal, ha pedig hamisra állítjuk, megszakad ez a kapcsolat. Egy alkalmazás e tulajdonság segítségével képes arra, hogy ellenőrizze milyen állapotban van az adatbázis-kapcsolata.
  • DatabaseName: Meghatározhatjuk, hogy melyik adatbázissal lesz a programunknak kapcsolata az adatbázisnév megadásával. Ha a tulajdonság-szerkesztőben ezt a sort jelöljük meg a … gombra kattintva választhatjuk ki adatbázisunk fájlját a jól ismert dialógusablak segítségével. Másféleképpen kell megadni a fájl elérési útvonalát, ha helyi gépen lévő vagy távoli kiszolgálón található adatbázist akarunk használni. Helyi adatbázis esetében egyszerűen csak a fájl nevét adjuk meg. Ha TCP/IP hálózati kapcsolatot használunk, akkor a következőképpen adjuk meg az elérést: <szerver_név>:<fájl_név>. NETBUI protokollt használva: <\\<szerver_név>\<fájl_név>>. SPX kapcsolatot használva: <szerver_név>@<fájl_név>.
  • DBSQLDialect: visszatér az adatbázis SQL "nyelvjárásával". Az SQL Dialect tulajdonképpen néhány adattípus esetében (pl. SQL TIME, DATA, TIMESTAMP) határozza meg, hogyan kell értelmezni, és beállít néhány értelmezési értéket (pl. számábrázolás nagy pontossága). InterBase 6 adatbázis esetében értékét általában 3-ra kell állítanunk. A példaként használt adatbázis esetében értéke szintén 3.
  • DefaultTransaction: A cikksorozat ötödik részében ismerkedünk majd meg a TIBTransaction komponenssel. Itt egy ilyen objektumot kell beállítani. Ez a komponens a tranzakció-kezeléseket végzi. Fontos, hogy minden TIBDatabase komponenst használó programban legalább egy TIBTransaction objektumot használnunk kell. Egy egyszerű adatbázis-kapcsolat képes menedzselni egy vagy több tranzakciót. E tulajdonság segítségével megadhatunk egy alapértelmezett tranzakciót.
  • Handle: Az InterBase API adatbázis azonosítót definiálja. A tulajdonság arra használható, hogy közvetlenül InterBase API függvényeket, eljárásokat hívjunk meg. A legtöbb InterBase API függvényben, mint az egyik paraméter meg kell adnunk adatbázisunk azonosítóját. Az érték az adatbázis megnyitásakor kap kezdőértéket.
  • HandleIsShared: A tulajdonság segítségével meghatározhatjuk, hogy adatbázisunk azonosítója megosztott vagy sem.
  • IdleTimer: Azt az időtartamot állíthatjuk be, hogy meddig várjon az adatbázis mielőtt automatikusan megszakítja a kapcsolatot alkalmazásunkkal, ha nincs forgalom a kettő között.
  • IsReadOnly: Megmutatja, hogy az adatbázis csak olvasható-e.
  • Params: Azokat az adatbázis-paramétereket állíthatjuk be, amelyeket a szerverhez kell eljuttatni. Ezen paraméterek a kapcsolat felépülése folyamán kerülnek el az adatbázishoz. Itt szoktuk megadni - nem éles rendszerben - a felhasználói nevet és a jelszót, de egyéb beállításokat is elvégezhetünk.
user_name=SYSDBA
password=masterkey
sql_role_name=penztaros
lc_ctype=WIN1252
  • SQLDialect: Beállíthatjuk (adatbázis létrehozása esetén) vagy lekérdezhetjük, hogy milyen SQL "nyelvjárást" használ az adatbázis. Ha hozzákapcsolódunk, az értéke automatikusan meghatározásra kerül. Ha túl nagy értéket állítunk be, akkor aktiválódik az OnDialectDowngradeWarning esemény, és a tulajdonság értéke a megfelelőre csökken.
  • TraceFlags: Ennek a tulajdonságnak az SQLMonitor komponens használata esetén van jelentősége. Jelentését is ott tárgyaljuk.
  • TransactionCount: Megadja, hogy mennyi tranzakció van jelenleg az adatbázis-komponenshez rendelve.
A komponens eseményei:
  • OnDialectDowngradeWarning: Meghatározhatjuk, hogy mi történjen akkor, ha a rendszer az SQLDialect értékét csökkenti.
  • OnIdleTimer: Meghatározhatjuk, hogy mi történjen, ha az IdleTimer tulajdonságnál megadott időt elérjük. Például, ha túl sokáig nincs kapcsolat a szerver és a kliens között, megszüntethetjük.
  • OnLogin: Ha saját bejelentkezési képernyőt szeretnénk, akkor ezen esemény segítségével jeleníthetjük meg. Fontos, hogy ilyen esetben a LoginPrompt tulajdonság igaz értékű legyen.
A komponens metódusai:
  • AddTransaction: Segítségével megadhatunk egy kapcsolatot a TIBDatabase és a TIBTransaction komponensek között.
  • ApplyUpdates: A memóriában tárolt frissítéseket továbbíthatjuk az adatbázis-szerver felé. Általában a TIBTable vagy a TIBQuery komponensek segítségével módosítjuk adatainkat. Amikor a kapcsolat létrejön, programunk megkapja az összes szükséges adatot és azt a memóriában tárolja. (Ez még akkor is így van, ha az adatbázis-szerver és a kliens program ugyanazon a gépen fut.) Ha végrehajtunk valamilyen változtatást és kiadjuk a Post parancsot, akkor a frissítés csak a helyi memóriában lévő adatokon történik meg. Mindez csak akkor igaz, ha az adott komponens ChachedUpdates tulajdonsága igaz értékű. Csak ebben az esetben van értelme az ApplyUpdates metódus meghívásának is. Ellenkező esetben a változtatások rögtön visszakerülnek a szerverre. Ez jelentősen növeli a hálózati forgalmat. Hasonló a CommitUpdates metódus is, csak ez egy tranzakcióként hajtja végre a frissítést. Jegyezzük meg, hogy a TIBDatabase komponens ismeri az összes olyan adatelérési komponenst (TIBTable, TIBQuery, stb.), amelyek hivatkoznak rá. Így ha meghívjuk ezt a metódust, akkor az összes vele kapcsolatban álló adatelérési komponensben végrehajtott változás mentésre kerül.
  • Call: Belső függvény, amely lehetővé teszi, hogy kiváltsunk egy kivételt, vagy visszatérjen egy hibával a RaiseError paraméteren alapulva.
  • CheckActive: Az eljárás segítségével ellenőrizhetjük, hogy kapcsolatunk az adatbázis-szerverrel aktív-e.
  • CheckDatabaseName: Ellenőrizhetjük, hogy a komponens DatabaseName tulajdonsága üres-e, és hibát jelezhetünk, ha ez igaz.
  • CheckInactive: Ellenőrizhető, hogy adatbázis-szerver kapcsolatunk inaktív vagy sem. Utóbbi esetben hibát jelezhetünk.
  • CloseDataSets: Bezárhatjuk az összes adatelérési komponenst anélkül, hogy az adatbázis-szerver kapcsolatunkat megszüntetnénk. Természetesen, ha a Close metódust hívjuk meg, szintén bezáródnak az adatelérési komponensek, de kapcsolatunk az adatbázis-szerverrel szintén megszűnik. Akkor használhatjuk jól ezt a metódust, ha szeretnénk bezárni az összes adatelérési komponensünket, amelyek ezt aTIBDatabase objektumot használják, de nem szeretnénk a későbbiek folyamán a kapcsolatot ismét felépíteni.
  • CreateDatabase: Új adatbázist hozhatunk létre a Params tulajdonság segítségével. A metódus az SQL CREATE DATABASE paranccsal egyenértékű. Ha szeretnénk létrehozni egy helyi adatbázist, tegyük a következőket:
Adjuk meg az adatbázis elérési útját és nevét a DatabaseName tulajdonság segítségével,
Állítsuk be a Params tulajdonságot az új adatbázis létrehozásához:
USER ''SYSDBA''
PASSWORD ''masterkey''
PAGE_SIZE 4096
Állítsuk be az SQLDialect tulajdonságot (3),
Hívjuk meg a CreateDatabase metódust.
  • DropDatabase: A teljes adatbázist eltávolíthatjuk, törölhetjük.
  • FindTransaction: Az index alapján kereshetünk meg egy meghatározott tranzakciót.
  • ForceClose: Minden áron bezárhatjuk adatbázis-kapcsolatunkat. Ha a Close metódust hívjuk meg, és nem sikerül bezárni a kapcsolatot, élő marad. E metódus segítségével ilyen esetekben is megszűnik a kapcsolat.
  • GetFieldNames: A komponenshez kapcsolt táblában lévő mezők nevével tér vissza.
  • GetTableNames: Az adatbázisban található táblák nevével visszatérő metódus. Fontos, hogy a List TStrings típusú paramétert már létrehozzuk, mielőtt átadjuk a metódusnak. Ha a SystemTables paraméter igaz, akkor a rendszertáblákkal is találkozhatunk a visszaadott listában. A rendszertáblákkal egy későbbi cikkben megismerkedünk majd.
  • IndexOfDBConst: Megkereshetjük a helyét egy paraméternek a komponens paraméterlistájában (Params tulajdonság). Ha a paraméter nem található a visszatérési érték -1.
  • RemoveTransaction: Az Idx paraméter által azonosított tranzakciót eltávolítja.
  • RemoveTransactions: Az összes tranzakció eltávolításra kerül.
  • SetHandle: Az azonosítót állíthatjuk be.
  • TestConnection: Tesztelhetjük, hogy a beállított paraméterekkel egy kapcsolat felépíthető-e vagy sem. A függvény visszatérési értéke igaz vagy hamis lehet.
  • Open: Az adatbázis megnyitása.
  • Close: Az adatbázis bezárása.

TIBDatabase Editor dialógusablak

Ha a TIBDatabase komponensre jobb egérgombbal kattintunk, és a megjelenő helyi menüből kiválasztjuk a Database Editor… menüpontot, akkor egy olyan dialógusablakot kapunk, amelyikben egyszerűen felépíthetjük és tesztelhetjük a kapcsolatot az adatbázissal. Beállíthatjuk az adatbázis típusát, a kapcsolat paramétereit, a felhasználó nevét, jelszavát és szerepkörét (SQL role), és hogy a bejelentkező-ablak látható legyen-e vagy sem. Természetesen ezek a beállítások elvégezhetők a tulajdonság-szerkesztő segítségével is.
A következő beállítások hajthatók végre:
  • Local: Jelöli, hogy az adatbázis a helyi szerveren fut, és engedélyezi a Browse gombot, amelynek segítségével egy fájl megnyitás dialógusablakban megkereshetjük adatbázisunkat.
  • Remote: Az adatbázis egy távoli szerveren fut. Engedélyezi a Protocol és a Server mezőket.
  • Protocol: Megadhatjuk, hogy milyen protokollt használva kapcsolódunk a távoli szerverhez. Értéke lehet: TCP/IP, Named Pipe vagy SPX.
  • Server: A távoli szervergép neve.
  • Database: Adatbázisunk neve.
  • User Name: Az adatbázis felhasználójának neve (pl. SYSDBA).
  • Password: A felhasználó jelszava.
  • SQL Role: A szerepkört azonosítja.
  • Character Set: Az adatbázisban használt karakterhalmaz. A kapcsolat felépítésekor használt érték.
  • Login Prompt: Ha a négyzetet bejelöljük, akkor a bejelentkezéskor mindenképpen megjelenik egy ablak, amelyben a felhasználó azonosítóit kell megadnunk.
  • Settings: Megjeleníti az aktuális paramétereket és lehetőséget biztosít számunkra, hogy egyéb paramétereket hozzáadjunk a listához. A következőket tartalmazhatja a lista például:
user_name=SYSDBA
password=masterkey
sql_role_name=penztaros
lc_ctype=WIN1252

Az utolsó sorban például a Windows 1252 karakterkészletét adjuk meg alapértelmezettnek. Ez azt jelenti, hogy egy szöveges mező indexelése esetén ezen karakterkészlet alapján lesz a rekordok sorrendje megállapítva. Használhatjuk akkor, ha nem szeretnénk, hogy magyar neveinket az adatbázis az angol ABC szerint rendezze.

A szerepkörökről a sorozat 15. részében lesz szó. Addig nem használjuk ezt a jellemzőt.


A példaprogram a PÉLDA nevű könyvtárban van. A szükséges magyarázatokat a forráskódban találhatjuk meg. Segítségével egyelőre csak a bejelentkezést gyakorolhatjuk, valamint egy-két esemény és metódus használatát láthatjuk.

A következő fontosabb komponenseket használjuk:
  • IBTransaction (minden programban kell legalább egynek lennie), IBDatabase,
  • MainMenu és menüpontok,
  • StatusBar komponens,
  • További öt Form.
A példaprogram használata során mindenkinek be kell állítania az adatbázis elérési útvonalát.

Az IBDatabase komponens SQLDialect tulajdonságának értéke 5. Figyeljük meg, mi történik bejelentkezéskor.
Bejelentkezés után ne használjuk az adatbázist. Így tesztelhetjük az OnIdle eseményt.

Interbase cikksorozat