Delphi - Interbase 6 alkalmazása Delphi-ben

Interbase 1. rész

forráskód letöltése
Új cikksorozatunkban az InterBase 6.01 adatbázis-kezelő rendszer használatát, és ennek elérhetőségét biztosító InterBase Express komponenscsomagot mutatjuk be 23 részben. Minden egyes cikkben egy-egy komponenst ismerhet meg, a bevezetőben egy átfogó képet szerezhet a rendszer telepítéséről, konfigurálásáról és elméletéről, a befejező részben néhány egyéb kérdés kerül bemutatásra, mint például a többrétegű alkalmazások és az InterBase kapcsolata vagy pedig a "hagyományos" táblák konvertálása InterBase adatbázisokká. Minden egyes komponens használatának megértését példaprogram segíti. Az első részben egy kis elméleti áttekintő után a program és a komponensek letöltésének és telepítésének módjával ismerkedhetünk meg. Rövid bepillantást nyerhetünk az InterBase szerver testre szabásába, valamint megnézzük hogyan épül fel a saját kis programunk adatbázisa.


Az InterBase relációs adatbázis-kezelő rendszer

Az InterBase a Borland cég relációs adatbázis-kezelő szoftvere (RDBMS), mely a kliens-szerver rendszerre van alapozva, segítve a hálózatokban a megosztott adatbázis-alkalmazások hatékony és rugalmas fejlesztését. A relációs adatbázismodell azt jelenti, hogy az InterBase programozási nyelvként az SQL-t (Structured Query Language) használja az adtabázisok menedzseléséhez. Ezen belül az SQL-92 szabványon alapul, melyet több kiegészítő lehetőséggel is elláttak: tárolt eljárások, triggerek, generátorok. Ezek általában más SQL alapú rendszerekben is megtalálhatók, de ezek még nem szabványos elemei a nyelvnek.

Mitől relációs adatbázis-kezelő?
A lényeg az, hogy az adatok a közöttük lévő kapcsolatoktól viszonylag függetlenül kerülnek tárolásra, a kapcsolatok pedig a felhasználó igényeinek megfelelően alakíthatók ki. Míg például a Paradox vagy dBase táblák kezelőprogramjai döntően az adattárolás módjával foglalkoznak, addig a relációs adatbázisoknál az adatvisszanyerés módja és ezzel a lekérdező nyelv lépett előtérbe.
Maga az InterBase rendszer általában egy fájlban, a szerveren tárolja az adatbázist, de a rendszer lehetőséget kínál a fizikailag is megosztott adatbázisok menedzselésére. Az adatbázison belüli műveleteknél programból kezelhetők az objektumok. Az adattárolás során az adatbázis fizikai megjelenéséhez is kapcsolódva az adatbázis táblái szolgálják az adatok tárolását, az indexállományok pedig gyorsítják az adatbázis-elérést. A kliens-szerver alkalmazások fejlesztése azt is jelenti, hogy az InterBase-zel is megoszthatjuk az alkalmazás működését. A hagyományosabbnak tekinthető adatbázisok esetében (Paradox, dBase, Access) az alkalmazás teljes adatbázis-intelligenciája a kliensoldali szoftverben valósul meg, annak ellenére, hogy fizikailag általában nagy méterű adatbázis a szerveren van tárolva. Így az adatbázis-műveletek elvégzéséhez a megváltoztatni kívánt objektumot le kell tölteni a kliens gép memóriájába, majd a feldolgozást követően a módosítást végig kell vezetni a szerver adatbázisán is. Ilyen táblák használata esetén az adatok párhuzamos elérése több felhasználó által is igen súlyos problémákat vet fel és a probléma megoldása elég bonyolult programozói feladat.
Ezzel ellentétben a kliens-szerver (ügyfél-kiszolgáló) modellen alapuló adatbázis-kezelőalkalmazásoknál magát az alkalmazás működését tudjuk megosztani - ezt a későbbiek során mi magunk is láthatjuk. Az adatbázis-kezelő intelligenciának az adatbázist közvetlenül megváltoztató része a szerveren fut le. A kliensen az alkalmazásnak csak a felhasználóval közvetlenül kapcsolatot teremtő részét találjuk, és ez a munkamegosztás jelentősen képes csökkenteni a kliens gép memóriahasználatát és a hálózati forgalmat is. Általában ez utóbbi indok miatt fordulunk ilyen típusú adatbázis-kezelőhöz.

Az ügyfél-kiszolgáló programozás

Ha egy központi gépen nagy mennyiségű adattal szeretnénk dolgozni, és el szeretnénk kerülni, hogy az adatok feldolgozása az ügyfélgépeken történjen, akkor az egyetlen megoldás az, hogy a feldolgozást a központi gép végzi el, és csak az eredményt küldi át a klienshez. Ez az ügyfél-kiszolgáló (kliens-szerver) programozás alapja. A hatékonyság mellett így lehetőséget biztosítunk arra, hogy több felhasználó dolgozzon az adatokkal egyszerre és biztonságosan.
A szerveren egy már létező programot használunk (RDBMS): ez az InterBase 6.01, és ehhez írunk ügyfélprogramot.

A felépítés előnyei:
  • Nagyobb adatmennyiség biztonságos kezelésére nyílik lehetőség: a Paradox táblák maximális mérete 2 GB, de 400-500 MB-os méret mellett már sok hibával kerülünk szembe;
  • Egy RDBMS program - és általában az operációs rendszer, amelyen fut - több védelmi lehetőséggel rendelkezik;
  • Egy RDBMS rendszer tartalmazhat tárolt eljárásokat, triggereket és nézeteket, amelyek igen hatékonyak és gyorsak;
  • Fejlett tranzakciókezelés;
  • Az adatokat egyszerre több felhasználó módosíthatja biztonságos körülmények között.

Az SQL nyelv

Az InterBase rendszer az SQL nyelvet használja. A cikksorozat folyamán megismerkedünk a legfontosabb SQL utasításokkal. Elöljáróban csak annyit, hogy az SQL egy nem-procedurális nyelv, azaz csak azt kell leírnunk, hogy mit akarunk, de azzal nem kell foglalkoznunk, hogy ezt hogyan kell végrehajtani. Az IBM-nél fejlesztették ki az 1970-es években felhasználva Codd adatok relációs adatbázisokban való tárolását leíró elméletét. Jelenleg az SQL szabványnyelv a relációs adatbázisokban tárolt adatok elérésére és kezelésére.

Az SQL néhány kiemelkedő tulajdonsága:
  • Adatok halmazait dolgozza fel, nem egyedi adatokat.
  • Automatikus navigációt biztosít az adatokhoz.
  • Összetett és hatékony utasításokat használ, de utasításkészlete meglepően kevés alapelemet tartalmaz.
Az SQL parancsokat biztosít a következő feladatokhoz
  • Adatok lekérdezése.
  • A táblákba sorok beszúrása, frissítése és törlése.
  • Objektumok létrehozása, helyettesítése, módosítása és törlése.
  • Az adatbázis és objektumainak ellenőrzött elérése.
  • Az adatbázis integritásának és konzisztenciájának biztosítása.
Egyik legpozitívabb tulajdonsága a hordozhatósága. Ennek eredményeként az összes SQL-ben megírt programot átvihetjük az egyik adatbázisrendszerből egy másikba, nagyon kis módosítással.

Az SQL parancsokat jellegük szerint csoportosíthatjuk:
Adatdefiníciós nyelv (Data Definition Language - DDL)
Lehetővé teszi objektumok létrehozását, módosítását, törlését, privilégiumok és szerepkörök adása, visszavonása. Pl.: create table, create user, alter table, create trigger, grant, revoke.

Adatmanipulációs nyelv (Data Manipulation Language - DML)
Lehetővé teszi az adatok kezelését, lekérdezések végrehajtását. Pl.: delete, insert, select, update.

Tranzakció-vezérlés (Transaction Control - TC)
Ezen parancsok kezelik a DML utasítások által létrehozott adatbázis-változásokat.
Pl.: commit, rollback, set transaction.

Bejelentkezés-vezérlés (Session Control - SC)
Dinamikusan kezelik a parancsok a bejelentkezés tulajdonságait. Pl.: set session, set role.

Rendszervezérlés (System Control -SC)
Dinamikusan kezelik a parancsok a szerver tulajdonságait. Pl.: alter system.

Utolsó elméleti fejtegetésként vessünk fel még egy kérdést: miért van szükség az InterBase elérését biztosító komponensekre, amikor ezt a hagyományosokkal is megtehetnénk?
Az adatbázisok kezelése a megfelelő komponensekkel történik, és a különböző formátumú adatbázisokat is ugyanazokkal a komponensekkel használjuk. Ezen a szinten nincs különbség egy Paradox és InterBase tábla kezelése között. Az adatbázis konkrét formátumára a komponensek egy jellemzője utal csupán. Metódusaik a beépített adatbázismotor a BDE (Borland Database Engine) rutinjait használják. Kliens-szerver kiépítésben a Delphi komponensek metódusait a BDE az adatbázis-szervernek megfelelő SQL utasításokká alakítja át, majd ezeket továbbítja a szerver felé.
Természetesen más "adatközvetítő" rendszerek is használhatóak: OBDC, ADO, DAO, stb.
Ezzel szemben az InterBase paletta komponensei nem használják egyik ilyen rendszert sem, programunk telepítése folyamán nem kell a BDE-t felrakni a felhasználó gépére és különféle alias neveket sem kell beállítanunk, csökkentve programunk hely- futáskor pedig memóriafoglalását is. Közvetlenül az InterBase szerverrel kommunikál a program. Ezekkel a komponensekkel már semmilyen más adatbázist nem lehet kezelni. Így növekszik egyrészt a program sebessége, másrészt nem kell a meghajtók létezését és beállításait vizsgálnunk a célgépen.

Az InterBase szerver és a komponensek letöltése, telepítése

A Borland 2000. július végén jelentette meg az InterBase 6.0 programját. A bétatesztek alatt elhangzott ígéretnek megfelelően ezentúl nyílt forráskódú (open source) termék lesz Linux, Windows és Solaris platformokon is. A program a Mozilla Public License (MPL) V1.1 mintájára készült licenc alapján vált szabadon hozzáférhetővé:
http://www.inprise.com/ipl.html

Ezáltal a program mindenki számára ingyen letölthető a következő oldalról kiindulva:
http://www.borland.com/interbase/downloads/index.html

Először töltsük le a Design time és a Run time linkek által rejtett két fájlt. Ezt követően keressük meg a Server and client hivatkozást és az útmutatásnak megfelelően töltsük le az InterBase_WI-V6.0-server.zip állományt.

(Fenti web lap címek a cikk készítésekor még létező címek voltak. Időközben elképzelhető, hogy a letölthető állományok más oldalakra kerültek.)

Igen fontos, hogy ne csak a kliens programot töltsük le, mert a programok kipróbálásához a szerverre lesz szükségünk. A kliens program csak a kapcsolat megteremtéséhez szükséges, így természetesen ebből is kell egyet telepítenünk.

Először a szerver és a kliens programokat telepítsük és csak utána a komponenseket!

A szerver program telepítéséhez csomagoljuk ki a fentebb említett fájlt és másoljuk egy tetszőleges könyvtárba. Ezt követően indítsuk el a setup.exe programot, majd az utasításait követve telepítsük az InterBase 6 rendszert. A program erőforrásigénye nem túl nagy, ha gépünkön fut a Delphi, akkor az InterBase adatbázis-kezelő rendszer is működni fog.
Még egyszer felhívom mindenki figyelmét arra, hogy amikor a listából kiválasztja a telepítendő összetevőket, győződjön meg arról, hogy az InterBase Server (a legelső elem) és az InterBase Client (második elem) pontok be legyenek jelölve, mert csak így tud megismerkedni mind a 21 darab komponenssel és csak így lehet az adatbázis-kezelést kipróbálni. (Természetesen hálózatos rendszerben az egyik gépre telepítjük a szervert, azokra a gépekre pedig, amelyeken az általunk írt alkalmazás fog futni az InterBase klienst kell telepíteni.)
A programhoz tartozó dokumentációkat ugyanis külön kell letölteni. Az InterBase alkalmazásnak van CD-n terjesztett változata, amihez üzletekben lehet hozzájutni.
Készítsünk egy könyvtárat, például: ..\Delphi5\ib6. Tömörítsük ki és másoljuk ide a következő két állományt, amelyek a futási idejű és a tervezési idejű csomagok forráskódját használják: IBX_Packages.zip és IBX_Dpackages.zip. Indítsuk el a Delphi programot és a Component menü Install Packages… pontját választva keressük meg a listában az InterBase Data Access Components elemet és töröljük ki (Remove gomb). Zárjunk be mindent (Close all menüpont), és nyissuk meg a VCLIB50.dpk állományt. Fordítsuk le a csomagot és a VCLIB50.lib fájlt másoljuk (Win NT/2000 esetében) a WINNT\system32 könyvtárba (Win9x/ME esetében a Windows\system könyvtárba). Keressük és nyissuk meg a DCLIB50.dpk állományt. Ezt telepítsük. Utolsó lépésként állítsuk be az általunk létrehozott könyvtárat a keresési útvonalak közé (Tools menü Enviroment options… pontja, itt a Library fület választva és a Library path változóhoz hozzáadva).
Ha mindent helyesen végeztünk el, megjelennek az InterBase és az InterBase Admin fülek a komponenspalettán. (Az utóbbi a komponenspaletta utolsó elme lesz.) Az InterBase Admin paletta csak akkor lesz telepítve, ha már telepítettük a kliens programot:
  RegisterComponents(IBPalette1, [TIBTable, TIBQuery,
    TIBStoredProc, TIBDatabase, TIBTransaction, TIBUpdateSQL,
    TIBDataSet, TIBSQL, TIBDatabaseInfo, TIBSQLMonitor, TIBEvents]);
{$IFDEF IB6_ONLY}
  if (TryIBLoad) and (GetIBClientVersion >= 6) then
    RegisterComponents(IBPalette2, [TIBConfigService, TIBBackupService,
      TIBRestoreService, TIBValidationService, TIBStatisticalService,
      TIBLogService, TIBSecurityService, TIBServerProperties,
      TIBInstall, TIBUninstall]);
{$ENDIF}
Ezt a TryIBLoad és a GetIBClientVersion függvényekkel ellenőrzi a komponenstelepítő.

A következő komponenseket találjuk meg:

InterBase fül:
1.	TIBTable
2.	TIBQuery
3.	TIBStoredProc
4.	TIBDatabase
5.	TIBTransaction
6.	TIBUpdateSQL
7.	TIBDataSet
8.	TIBSQL
9.	TIBDatabaseInfo
10.	TIBSQLMonitor
11.	TIBEvents
InretBase Admin fül:
1.	TIBConfigService
2.	TIBBackupService
3.	TIBRestoreService
4.	TIBValidationService
5.	TIBStatisticalService
6.	TIBLogService
7.	TIBSecurityService
8.	TIBServerProperties
9.	TIBInstall
10.	TIBUnInstall
Az InterBase fülön azok a komponensek találhatóak, amelyek segítségével az adatbázishoz tudunk kapcsolódni, módosítani tudjuk adatainkat, és információkat szerezhetünk adatbázisunkról. Az InterBase Admin oldal komponenseinek segítségével adatbázisunk és a szerver program adminisztrációs lehetőségeit építhetjük be programunkba: szerver konfigurálása, adatok mentése és helyreállítása, felhasználók menedzselése.
Az új komponens nem kezeli a régi InterBase adatbázisokat. Próbáljuk megnyitni a Delphi-vel kapott mintaadatbázis valamelyikét.
A komponensek mindegyikének bemutatására törekszünk a következő 21 darab cikkben. Ha belenézünk a forráskódokba látható, hogy például definiálva van egy IBBatchMove komponens, amelyet nem telepítenek fel. A dokumentációban pedig rendre felbukkan egy IBLicensingService komponens, amelynek viszont nyoma sincs a forráskódokban.

Az InterBase szerver beállításai és használata

A szerver állományai - ha a telepítés során nem változtattuk meg - a [meghajtó]:\Program Files\Borland\INTRBASE könyvtárban találhatóak. A szerver a telepítést követően azonnal működésbe lép, majd minden rendszerinduláskor automatikusan elindul. Ha ez nem így lenne, indítsuk újra a rendszert. A Win9x/ME rendszerek esetén az ikon a tálcán látható, és a szerver beállítási lehetősége a jobb egérgomb hatására előugró menüből választható ki. Win NT/2000 esetén a szerver alapértelmezésben mint kiszolgáló a háttérben fut, ezért az ikonját sem találhatjuk meg a tálcán. A beállításokhoz a Start menü Settings elemének Control Panel pontját válasszuk, majd kattintsunk kétszer az InterBase Manager ikonra. Itt állíthatjuk be az indulás módját, a program könyvtárát és NT rendszerek esetén a futás módját.
A szerver finomabb beállítására az IbConsole nevű program szolgál (Start - Programs - InterBase - IBConsole). A program használatát és lehetőségeit most nem mutatjuk be, mert a cikksorozat első felében semmiféle plusz beállításra nem lesz szükségünk. Olyan környezetben és állapotban fogjuk használni szerverünket, ahogyan települt. A program segítségével beállítható tulajdonságok nagy és fontos részét az InterBase Admin paletta komponenseivel is el tudjuk érni. Ezért amikor ezek kerülnek ismertetésre néhány gondolat erejéig, visszatérünk a programhoz és megnézzük, hogy milyen tulajdonságokat állíthatunk be az egyes komponensek segítségével.
Egy igen fontos dolgot kell egyelőre ismernünk: a bejelentkezésekkor az alapértelmezett felhasználói nevet ("SYSDBA") és jelszót ("masterkey") kell megadnunk. Lényeges tudni, hogy mindkét paraméter megkülönbözteti a kis- és nagybetűket. Ez a felhasználó egyfajta rendszergazdai jogokkal van felruházva, minden műveletet elvégezhet, jogokat adhat és vonhat vissza, tárolt eljárásokat, triggereket futtathat, más felhasználókat vehet fel és törölhet. InterBase rendszerek esetében bármennyi "rendszergazda" lehet.


Példaprogramunk adatbázisának megtervezése

Az InterBase szerver és komponensek ismerkedése folyamán hozunk létre egy olyan mintaalkalmazást, amelyik gépjárművek adatait tárolja.
Az adatbázis különböző táblákat tartalmaz: nyilvántartjuk a tulajdonosok, a gépkocsik legfontosabb adatait, valamint néhány kiegészítő információt.

Az adatmodellről, az adattáblák szerkezetéről és az adatbázis-kezelő intelligencia szétosztásáról a kliens és szerver között a következő cikkben lesz szó, amikor megismerkedünk az IBInstall komponenssel, az InterBase adatbázis-kezelő rendszer telepítésével Delphi programból. Adatbázis-kezelő használata esetén ugyanis nem szokás a szerverre másolni a kész adattáblákat, hanem ezt (esetleg a szerver, majd) a kliens program telepítése után, a telepítő program hozza létre SQL utasításokkal, és ugyanígy tölti fel a táblákat adatokkal is (ha kell).

Első példaprogramunk

Hozzunk létre egy rövid kis példaprogramot azért, hogy meggyőződhessünk szerverünk helyes működéséről. A komponensek tulajdonságairól most még részletesen nem esik szó (ez a későbbi cikkek feladata lesz), csak leírjuk, hogy mit és hogyan kell beállítani. Fontos, hogy a programunk és a szerver ugyanazon a gépen fusson, mert még nem foglalkoztunk a hálózati beállításokkal.

- Nyissunk egy üres projektet.
- Állítsuk be a Form néhány tulajdonságát: Caption, Position, BorderStyle.
- Helyezzük a Form-ra a következő komponensek egy-egy példányát: TDataSource, TIBTransaction, TIBQuery, TIBDatabase, TDBGrid.
- Állítsuk be a DataSource1 komponens tulajdonságait:
AutoEdit: False.
DataSet: IBQuery1.

- Az IBTransaction1 komponenssel nem kell semmit sem tenni.
- IBDatabase1 komponens tulajdonságai:
DatabaseName: X:\Program Files\Borland\INTRBASE\examples\Database\employee.gdb.
DefaultTransaction: IBTransaction1.
LoginPrompt: False.
Params: gépeljük be:
USER_NAME=SYSDBA
PASSWORD=masterkey

- Connected: True. Ha jól adtuk meg az előző pontnál az adatokat a rendszer most nem kérdezi meg ezeket.
- IBQuery1 komponens:
Database: IBDatabase1.
Transaction: IBTransaction1.
SQL: select * from customer
Active: True.

- DBGrid1 tulajdonságai:
DataSource: DataSource1.

Ha jól dolgoztunk, akkor már tervezési időben is láthatóak az adatok a rácsban. Ha más tábla adatait szeretnénk látni, zárjuk le az IBQuery1 komponenst (Active: False), és írjunk be más táblanevet a "customer" helyére, majd nyissuk meg újra a komponenst. Ezután fordítsuk le a programot és futtassuk. Az eredmény ugyanaz lesz, amit tervezési időben már láttunk a rácsban.

Ezzel első cikkünk végére értünk. Láthattuk az InterBase 6 adatbázis szerver jelentősségét, használhatóságát, az SQL nyelv fontosságát. Néhány mondatban megismerkedtünk a rendszer telepítésével, és példaprogram segítségével tesztelhettük működését.
A következő részben az InterBase 6-ot telepítjük saját programunkkal, megismerkedünk az IBInstall komponenssel és néhány adatbázisokat érintő kérdéssel.

Interbase cikksorozat