Delphi - Kalkulált mező létrehozása adatbázishoz futási időben

forráskód letöltése
Mellékelt példában bemutatjuk, hogy miként hozhatunk létre egy tetszőleges szerkezetű adatbázishoz a program futási ideje alatt kalkulált mezőt.

Létrehozás után pedig szintén programból befolyásoljuk, hogy milyen művelet történjen, mely meghatározza a kalkulált mező eredményét. A létrehozandó kalkulált mező értékének számítása úgy történik, hogy a B mező aktuális értékét megszorozzuk az Edit1 komponensbe írt számmal.

A létrehozáskor figyelnünk kell arra, hogy ez a kód részlet most fut először, vagy pedig már futott. Ha először fut, akkor létre kell hoznunk a kalkulált mezőt, ha futott már, akkor pedig csak frissítenünk kell az Edit1-ben megadott szorzó számot.

Ezt a szorzót a FI globális változóban tároljuk el.

Ezután a FindField függvénnyel ellenőrizzük, hogy a Table1 komponensnek van-e már CALCB nevű mezője. Mivel az új, kalkulált mezőt ilyen néven hozzuk majd létre, így ennek keresésével eldönthető, hogy futott-e már ez a kódrészlet, vagy sem.

Ha nem találunk ilyen nevűt, akkor létrehozzuk a kalkulált mezőt.

Ehhez egy TFloatField típusú osztály létrehozására lesz szükségünk. Itt megadjuk a DisplayLabel-t, mely a TDBGrid fejlécén jelenik meg.

A mező típusát a FieldKind property-n keresztül határozzuk meg. Mivel kalkulált mezőt szeretnénk, így itt fkCalculated konstanst használunk.

A FieldName property-ben adunk nevet az új mezőnek, míg a DataSet property-n keresztül adjuk meg, hogy melyik adatbázishoz tartozzon az újonnan létrehozott mező.

Végül ehhez az adatbázishoz az OnCalcFields eseményhez futási időben hozzárendelünk egy eseménykezelő eljárást is, mivel itt kell majd kiszámítanunk rekordonként az egyes mezők értékét.

A mező létrehozása előtt le kellett zárnunk a táblát, most, hogy kész vagyunk vele meg kell ismételten nyitni.

Ha a mező már létre lett hozva, akkor elágazik a programunk és fenti létrehozás művelet kimarad, helyette viszont meghívjuk a Refresh eljárást, mely frissíti a rekordok értékeit, így ha változtatjuk az Edit1 komponens tartalmát és újra megnyomjuk a nyomógombot, akkor a kalkulált mezők is az új eredményt fogják mutatni.


Az OnCalcFields eseménykezelőben pedig egyszerűen csak értéket adunk a kalkulált mezőnek a bevezetőben már említett módon.