Delphi - Adatbázis műveleti komponens

forráskód letöltése
Készítünk egy olyan komponenst, melynek segítségével gyorsan és könnyedén meghatározhatjuk adatbázisunk rekordjaiban lévő mezők összegét, darabszámát, átlagát, minimumát és maximumát.

A komponensnek csak azt kell megmondani, hogy melyik nevű mezőre milyen műveletet végezzen el a fent fel sorolt öt közül.

Ezt felhasználva, ha például egy TDBGrid komponensben látható az adatbázisunk, akkor alá elhelyezhetünk egy olyan objektumot (pl. TLabel), mely folyamatosan mutatja az összeget. Gyakorlati példaként említhető például egy számlakészítő alkalmazás, ahol egy TDBGrid-ben láthatók a számla tételeinek adatai és a TDBGrid alatt megjelenítjük a számla aktuális összegét. Ekkor nincs más teendőnk, mint a mellékelt komponens felhasználásával megmondani, hogy melyik mezőt kell összegezni és máris lehet kiírni az eredményt. A mellékelt példaprogram megnyitása előtt a DBOperations.pas-ban lévő komponenst telepítenie kell a Delphi alá. További teendő, hogy hozzunk létre egy ASDSO0213 nevű alias-t. Ez mutasson arra a könyvtárra, ahová a mellékelt példát másoltuk.

A komponens használata a következő:

A DataSet nevű property-ben kell megadnunk azt az adatbázis-t, melyen a műveleteket szeretnénk elvégezni.

Az Operations property-n keresztül tetszőleges számú elvégzendő műveletet felvehetünk. Minden esetben adjuk meg a mező nevét a FieldName property-ben és válasszuk ki az elvégzendő műveletet az Operation property-ben. A FieldName property-nél csak olyan mezőt adjunk meg, amely számot tartalmaz. Sztring típusból például igen nehéz lenne átlagot számítani.

Ha ez is megvan, akkor a DBOperations komponens OnChange eseményéhez hozzunk létre egy eseménykezelő eljárást. Ez az esemény akkor generálódik, amikor változik a komponens által számított eredmény és nekünk ezt aktualizálni kell a képernyőn is.

Ekkor a komponens Operations nevű tömbjén keresztül elérhetjük az egyes műveleti egységeket és itt a Value nevű double típusú property-n keresztül megkaphatjuk a számított értéket.

Az adatok kiszámítása az adatbázis megnyitásakor automatikusan történik. Ezek után viszont, ha frissíteni akarjuk az eredményt, akkor az Update eljárást kell meghívnunk. Ezt célszerű minden olyan esetben megtenni, amikor az adatbázis tartalma valamilyen módon megváltozott.


Nézzük most a komponens működését:

Az Operations property egy TCollection - TCollectionItem páros felhasználásával készült. Ezekről már többször is esett szó lapunk cikkeiben, így most nem szentelnénk nekik különösebb leírást. Ha valaki nincs tisztában a működési, felhasználási elvükkel, azoknak ajánljuk a cikk végén hivatkozott írások megtekintését.

A komponens lelke a ComputeAll eljárás. Itt kerül kiszámításra az összes szükséges érték, mely az Operations tömbben fel lett sorolva.

Ennek meghatározásához dinamikusan létrehozunk egy TQuery komponenst. Majd ciklus segítségével előállítjuk a TQuery-hez szükséges SQL script egy részét.

Ez a rész például az alábbiak szerint fog kinézni, ha mondjuk kértük a B mező összegét, valamint a C mező átlagát:

sum(B), avg(C)

Mikor ez megvan, akkor jön a végleges script előállítása, mely az alábbi formát ölti:

select sum(B), avg(C) form adatbázis név

Ezt a lekérdezést futtatva előáll a kívánt eredmény, most már csak annyi a teendő, hogy az eredményt visszaírjuk az Operations tömb minden egyes elemének a Value property-ébe.