Delphi - Form vagy komponens tárolása Paradox táblában

forráskód letöltése
Ebben a példában azt nézzük meg, hogy hogyan tudunk egy tetszőleges Form-ot, vagy egy TComponent-ből származó osztályt eltárolni egy Paradox táblában. Form esetében természetesen a Form-on található összes komponens adatai is mentésre kerülnek az aktuális tulajdonságaikkal együtt. Az így elmentett Form-ot vissza is olvashatjuk a táblából. A mellékelt példában erre is lesz lehetőség.
A tárolásra és visszatöltésre szolgáló eljárásokat a CmpResInPdx.pas fájlban hozzuk létre. A tárolást a StoreComponentRes eljárás végzi el, ami a következőképpen néz ki:
StoreComponentRes
procedure StoreComponentRes(
Component: TComponent;
AField: TBlobField
);
Ez az eljárás a paraméterként megkapott TComponent osztályból származó objektumot eltárolja a megadott adatbázis mezőben.
Paraméterek
Component: TComponent
Ebben a paraméterben kell megadni a tárolni kívánt objektumot. Az objektumnak a TComponent osztályból kell származnia.
AField: TBlobField
Ebben a paraméterben kell megadni annak a mezőnek az objektumát, amiben az objektumot tárolni szeretnénk. A mező típusának olyannak kell lennie, amiben tetszőleges méretű adatok tárolhatók. A Paradox-nál ilyen például a Formatted Memo típusú mező, amelyhez a Delphi a TBlobField osztályt rendeli.
Az objektum tárolása a következőképpen történik meg. Ahhoz, hogy a TBlobField típusú mezőbe adatot tudjunk írni, szükség lesz egy TBlobStream objektumra. Ennek Create metódusában meg kell adni azt a mező objektumot, amihez a stream-et használni akarjuk, valamint egy módot, hogy a stream-et olvasásra, vagy írásra akarjuk-e használni. Első paraméterként tehát megadjuk a TBlobField objektumot, majd az fmWrite értéket jelezve, hogy írni szeretnénk a stream-be.
Az íráshoz a WriteComponentRes eljárást fogjuk használni, ehhez viszont szükség lesz az objektum nevére is. Ezt a Component paraméter ClassName property-jéből tudhatjuk meg, de ennek kezdő „T” betűjére nem lesz szükség (pl. „TForm1” helyett csak a „Form1” kell).
Az eltárolt objektumot valahgy vissza is kell tudni olvasni, erre szolgál a LoadComponentRes eljárás.
LoadComponentRes
procedure LoadComponentRes(
Component: TComponent;
AField: TBlobField
);
A StoreCOmponentRes eljárással eltárolt objektumokat ezzel az eljárással tudjuk kiolvasni a megadott adatbázis mezőből.
Paraméterek
Component: TComponent
Ebben a paraméterben kell megadni azt az objektumot, amibe az eltárolt tulajdonságokat be akarjuk olvasni.
AField: TBlobField
Ebben a paraméterben adhatjuk meg annak a blob mezőnek (pl. Formatted Memo típusú mező) az objektumát, amiben az objektum el van tárolva.
Az adatok visszatöltése némileg komplikáltabb mint a tárolás volt, ugyanis a paraméterben megadott objektum összes gyermek komponensét fel kell szabadítani, mivel a betöltéskor ezek a komponensek úgyis létre lesznek hozva. Egy Form esetében például a Form-ra helyezett komponenseket törölni kell, mivel azok objektumai szintén el lettek tárolva, így létre is lesznek hozva az eltárolt tulajdonságokkal.
A beolvasáshoz szintén szükség lesz egy TBlobStream objektumra. Ennek az objektumnak a ReadComponentRes eljárásával tudjuk beolvasni az adatokat a paraméterként megadott objektumba.