Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010
12. ELŐADÁS Adatbázis-kezelés Delphiben 2
Adatmegjelenítés lekérdezés segítségével A táblákhoz hasonlóan a lekérdezések is az adatbázis bizonyos adatait képesek megjeleníteni A lekérdezéskért felelős komponens a TQuery Tulajdonságai: DataBaseName: adatbázis komponens vagy álnév DataSource: paraméteres lekérdezéseknél, az az adatforrás, ahonnét a paraméterek értéke szármatik Params: paraméterek, paraméteres lekérdezéseknél használatos 3
Adatmegjelenítés lekérdezés segítségével Tulajdonságai: RequestLive: ha igaz értékű, a lekérdezés eredményhalmaza szerkeszthető SQL (TStrings típusú): a legfontosabb tulajdonság, ebben tárolódik az SQL utasítás, amely az Open metódus meghívásakor, vagy az Active tulajdonság igazra állításakor, esetleg az ExecSQL metódus meghívásakor fut le Metódusok: ExecSQL: a lekérdezés futtatása. Olyan esetben használjuk, amikor a lekérdezés nem ad vissza eredményhalmazt 4
Adatmegjelenítés lekérdezés segítségével Ha tervezési időben szeretnénk megadni a lekérdezési parancsot, az objektum felügyelőben az SQL jellemzőre kattintva, a megjelenő szerkesztő ablakba beírhatjuk az utasítást. Például az alábbi paranccsal a DBDEMOS adatbázis Country tábla összes mezőjét megjeleníthetjük: 5
Adatmegjelenítés lekérdezés segítségével A lekérdezéseket általában nem tervezési időben szoktuk lefuttatni, hanem futási időben. Az előző lekérdezés megvalósítását például hozzárendelhetjük egy választógomb OnClick eseményéhez az alábbiak szerint: Alapértelmezés szerint a lekérdezés eredményét nem szerkeszthetjük. Ha ezt szeretnénk elérni, akkor a komponens RequestLive tulajdonságát igazra kell állítani 6
Adatmegjelenítés lekérdezés segítségével Ha a felhasználó által bevitt adatok alapján szeretnénk módosítani a lekérdezést: 7
Adatmodul használata (DataModule) Programozási technikák - Pál László Egy speciális űrlap, amelyre tervezési időben ráhelyezhetjük az adatelérési komponenseket. Létrehozni a File/New/DataModule menüben tudjuk Segítségével az adatbázis-elérési komponenseket a különböző űrlapoktól elkülönítve tudjuk tárolni, ezáltal megvalósul az adatelérési logika és a felhasználói felület elkülönítése A Data Module űrlap egy Table és egy DataSource komponenssel 8
Rekordok szerkesztése, törlése, felvétele Szerkesztés Egy adathalmaznak mindig az aktuális rekordját szerkeszthetjük, ha az adathalmaz dsedit állapotban van. Erről szerkesztés előtt meg kell győződni A tábla szerkeszthetőségét a CanModify jellemzőből tudhatjuk meg. Ha nincs ebben az állapotban, átállíthatjuk az Edit utasítással az alábbiak szerint: 9
Rekordok szerkesztése, törlése, felvétele Szerkesztés Az adattábla aktuális rekordját úgy is módosíthatjuk, hogy a tábla mezőket hozzáadjuk az osztályhoz, majd az új osztálymezőknek értékeket adunk A mezők osztályhoz való hozzáadása úgy történik, hogy kattintunk jobb egérgombbal a TTable komponensen, majd a Fields Editor segítségével (Add fields... parancs), hozzáadjuk a megfelelő mezőket. Ha például a DBDemos adatbázis, animals.dbf nevű adattáblája estén az összes mezőt az osztályhoz adjuk, akkor az osztály a következőképpen alakul: 10
Rekordok szerkesztése, törlése, felvétele Szerkesztés Az új mezők segítségével az adattáblát lehet módosítani: 11
Rekordok szerkesztése, törlése, felvétele Törlés Rekordok törlése a Delete eljárás meghívásával történik: A törlés sajnos nem minden esetben lesz sikeres, amelynek a különböző okaira itt nem térünk ki. A lehetséges problémák miatt érdemes a törlést kivételkezeléssel társítani. A következő példában egy gombkattintással egy adattábla aktuális rekordját szeretnénk törölni: 12
Rekordok szerkesztése, törlése, felvétele Törlés Példa: 13
Rekordok szerkesztése, törlése, felvétele Új adat felvétel Új adat felvételére az adathalmaz Insert és Append metódusait használhatjuk. Ezek használata a következő példában látható: 14
Rekordok szerkesztése, törlése, felvétele Új adat felvétel Új rekord felvételére használhatjuk az InsertRecord metódust is, amely paraméterként egy konstans tömböt vár. A tömb értékei az adattábla definíciójában megadott típusokat és sorrendet kell kövesse. Ha egy értéket nem szeretnénk megadni, helyette használhatjuk a null értéket. A metódus a megadott értékeket automatikusan postázza, nincs szükség a Post-ra. 15
Keresés az adathalmazban Nagyon gyakran szükségünk van egy adathalmaz egy olyan rekordjára, amely eleget tesz bizonyos feltételeknek. Egy ilyen rekordot keresés segítségével találhatunk meg. Delphiben több metódus is található, amelyekkel adathalmazokon lehet keresni. Ezek közül mi kettőt említünk meg, a Locate és Lookup metódusokat. A Locate metódus, ha van találat, akkor logikai igaz értéket ad vissza, és az első a keresési feltételnek eleget tevő rekordra áll a rekordmutató. Két keresési opció beállítása lehetséges, az egyik hogy megkülönböztesse-e a kis és nagybetűket (locaseinsensitive), illetve, hogy csak teljes egyezés esetén jelezzen találatot, vagy részleges egyezés esetén is (lopartialkey). Arra is lehetőség van, hogy egyszerre több mezőre adjunk keresési feltételt. 16
Keresés az adathalmazban Programozási technikák - Pál László Példa a Locate metódus használatára: A példában a COUNTRY táblában keresünk rá a Canada névre a Name mezőben. A keresés során nem különböztetjük meg a nagy és kis betűket. 17
Keresés az adathalmazban A Lookup nem mozgatja el a rekordmutatót, hanem a keresett mező értékét adja vissza, egyébként úgy működik, mint a Locate. Példa a LookUp használatára: A példában a COUNTRY táblában keressük a Canada nevű ország lakosságának számát. 18
Adathalmaz szűrése Ha egy adathalmaz tartalmát valamilyen szempont szerint le kell szűkítenünk, akkor szűrést kell alkalmaznunk. Erre Delphiben két féle lehetőségünk van: a Filter jellemző segítségével, vagy az OnFilterRecord eseményjellemző felhasználásával Ha a Filter jellemzőt használjuk, akkor meg kell adni azt a kifejezést, ami alapján szűrjük az adathalmazt, és a Filtered jellemzőt igazra kell állítani. A kifejezés megadásánál természetesen használhatjuk a jól ismert relációs valamint a logikai műveleteket. A karakterlánc típusú mezők esetén beállíthatunk bizonyos szűrési opciókat is a FilterOptions jellemző segítségével. Ez egy halmaz típusú jellemző, amelynek maximálisan két eleme lehet: focaseinsensitive, fonopartialcompare. 19
Adathalmaz szűrése Programozási technikák - Pál László Példa Filter használatára: A szűrési feltétel megadása azt jelenti, hogy csak a feltételnek megfelelő rekordok jelennek meg az eredményhalmazban. Tehát a példában csak a C karakterrel kezdődő ország nevek fognak megjelenni a táblában. 20
Adathalmaz szűrése Programozási technikák - Pál László Az OnFilterRecord eseményjellemzőt használva lehetőség nyílik arra, hogy egy rekordon belül különböző mezőértékeket hasonlítunk össze. Példa az OnFilterRecord használatára: A példában csak a Dél-Amerikai országokat jelenítjük meg. 21
Űrlapok gyors tervezése A TTable komponens mezőszerkesztőjét (Fields Editor) használhatjuk az űrlap gyors tervezésére is Miután kiválasztottuk az adattábla mezőit, lehetőség van ezeknek az űrlapra való helyezésére Drag and Drop technika segítségével. Tehát az egér segítségével ezeket az űrlapra vonszolhatjuk A vonszolást követően, a rendszer minden mezőnek egy DBEdit adatmegjelenítési komponenst fog generálni, amely az adattábla aktuális rekordjának mezőértékét fogja tartalmazni. A következő ábra a DBDemos adatbázis animals.dbf két mezőjéből generált DBEdit komponenst mutatja: 22
Rekordok szerkesztése, törlése, felvétele Űrlap tervezés Drag and Drop technikával 23