Delphi - A ClientDataSet komponens

ClientDataSet 5. rész

forráskód letöltése
Az ötödik részben folytatjuk a TClientDataSet osztály metódusainak ismertetését. A mellékelt példaprogramban megnézzük, hogy hogyan tudjuk az adatkészletet többféle formátumban elmenteni (pl. XML), valamint beolvasni. Megnézünk továbbá egy gyakran használt keresési módszert is, amivel akár rész adatokra is kereshetünk. A keresést egy tetszőlegesen kiválasztható (de sztring típusú) mezőben végezhetjük el. Mivel tetszőleges adatcsomagot betölthetünk, így a mezők nevének és típusának ellenőrzését is meg kell tennünk.
GetCurrentRecord
Osztály: TCustomClientDataSet
function GetCurrentRecord(
Buffer: PChar
): Boolean;
Beolvassa az aktuális rekordot a Buffer paraméter (PChar) által megadott memória bufferbe. A buffer méretének legalább akkorának kell lennie, mint a RecordSize property értékének. A legtöbb alkalmazásnál nem kell használni ezt a függvényt, mivel a rekord beolvasása automatikusan megtörténik.
Paraméterek
Buffer: PChar
Ebben a paraméterben kell megadnunk a bufferre mutató pointert.
GetFieldData
Osztály: TCustomClientDataSet
function GetFieldData(
FieldNo: Integer;
Buffer: Pointer
): Boolean;
Ez a függvény lekérdezi a paraméterekben meghatározott mezőben tárolt adatot egy bufferbe. A TField objektumok is ezt a függvényt használják a saját GetData függvényükben. A függvénynek három változata is van:
function GetFieldData(FieldNo: Integer; Buffer: Pointer): Boolean; overload; override;
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; overload; override;
function GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean): Boolean; overload; virtual;
Paraméterek
FieldNo: Integer
Ebben a paraméterben a mező sorszámát kell megadnunk. Az adatkészlet első mezőjének sorszáma, 0, a másodiké 1, stb.
Buffer: Pointer
Arra a bufferre mutató pointer, amelybe a mezőben tárolt adatot le akarjuk kérdezni. A buffer méretének akkorának kell lennie, amekkora a mezőben tárolt adat által lefoglalt hely az adatbázisban.
Field: TField
Ebben a paraméterben megadhatjuk annak a mezőnek a TField objektumát, amely mezőben tárolt adatot le szeretnénk kérdezni.
NativeFormat: boolean
Ha ennek a paraméternek az értéke igaz, akkor a Delphi TField adattípusához tartozó eredeti formátumban kérdezi le az adatot. Ha a paraméter értéke hamis, akkor a lekérdezett adatot konvertálni kell a Translate metódussal a megfelelő adattípusra.
Visszatérési érték
A függvény visszatérési értéke igaz, ha a lekérdezés sikeres volt, és hamis, ha nem.
GetGroupState
Osztály: TCustomClientDataSet
function GetGroupState(
Level: Integer
): TGroupPosInds;
Egy halmaz típusú (TGroupPosInds) property, amelyben megkapjuk, hogy az aktuális rekord a Level paraméterben megadott szintű csoportban hogyan helyezkedik el.
Paraméterek
Level: Integer
Ez a paraméter azonosítja a csoportot, a csoport szintjével. Ha ez az érték 1, akkor ez megfelel az index első mezőjének, ha kettő, akkor az első kettő mezőnek, és így tovább. Ha a paraméter értéke nagyobb, mint a GroupingLevel property értéke, akkor hibaüzenetet kapunk.
Visszatérési érték
A függvény visszatérési értéke TGroupPosInds típusú, melyben az alábbi értékeket kaphatjuk meg:
  • üres halmaz: az AggregatesActive property értéke hamis, vagy az index nem támogatja a csoportosítást;
  • gbFirst: a rekord az első a csoportban;
  • gbMiddle: a rekord sem az első, sem pedig az utolsó a csoportban;
  • gbLast: a rekord az utolsó a csoportban;
  • gbFirst és gbLast együtt: csak ez az egy rekord tartozik a csoportba;
GetIndexInfo
Osztály: TCustomClientDataSet
procedure GetIndexInfo(
IndexName: String
);
Beolvassa az információkat az aktuális indexről. Feltölti az adatkészlet belső index mezőit az aktuális index adataival.
Paraméterek
IndexName: String
Ha a csoportosítási szintet is be kell olvasni, akkor az IndexName paraméterben meg kell adni az index nevét, mivel e nélkül ez az információ nem lesz beolvasva. Az IndexName paraméterben nem adható meg más index neve, csak az aktuális indexé.
GetIndexNames
Osztály: TCustomClientDataSet
procedure GetIndexNames(
List: TStrings
);
A paraméterként megadott TStrings típusú objektumot feltölti az indexek neveivel. A DEFAULT_ORDER (a rekordok alapértelmezett sorrendje), és a CHANGEINDEX (a módosított rekordokat tartalmazza) indexek minden adatkészlethez automatikusan létrejönnek.
ClientDataSet1.GetIndexNames(ComboBox1.Items);
Paraméterek
List: TStrings
Ebben a paraméterben kell megadni egy TStrings típusú objektumot, amelybe az indexek nevei lesznek felvéve.
GetNextPacket;
Osztály: TCustomClientDataSet
function GetNextPacket: Integer;
Lekérdezi a rekordok következő csoportját. Az egy csoportban lévő rekordok számát a PacketRecors property adja meg. Az újonnan beolvasott csomagban található rekordok hozzáadódnak a Data property-be már előzőleg beolvasott rekordokhoz.
A függvény visszatérési értéke a beolvasott rekordok száma. Ha ez az érték 0, akkor már az összes rekord be lett olvasva.
GetOptionalParam
Osztály: TCustomClientDataSet
function GetOptionalParam(
const ParamName: string
): OleVariant;
A provider az adatcsomagokhoz extra kiegészítő adatokat is csatolhat. Ezzel a függvénnyel ezeket kérdezhetjük le. Ne tévesszük össze a Params property-vel!
Paraméterek
const ParamName: string
Ebben a paraméterben adhatjuk meg annak a paraméternek a nevét, amelynek az értékét le akarjuk kérdezni.
Visszatérési érték
A függvény visszatérési értéke a lekérdezett paraméter értéke.
GotoCurrent
Osztály: TCustomClientDataSet
procedure GotoCurrent(
DataSet: TCustomClientDataSet
);
Két azonos adatkészlet esetén használható, ha azt szeretnénk, hogy mindkét adatkészletben ugyanaz legyen az aktuális rekord. Ezzel szinkronizálhatjuk a két adatkészletet.
Paraméterek
DataSet: TCustomClientDataSet
Az ebben a paraméterben megadott adatkészlet aktuális rekordjának megfelelő rekordra helyezi a kurzort.
GotoKey;
Osztály: TCustomClientDataSet
function GotoKey: Boolean;
Az EditKey vagy SetKey után megadott kulcsú rekordra ugrik.
Visszatérési érték
Ha nem találta meg a rekordot, akkor a függvény visszatérési értéke hamis, és a kurzor nem változik. Ellenkező esetben a visszatérési érték igaz, és a megtalált rekordra helyezi a kurzort.
GotoNearest;
Osztály: TCustomClientDataSet
procedure GotoNearest;
Annyiban különbözik a GotoKey függvénytől, hogy itt a megadott kulcsnak nem kell pontosan megegyezni a rekordban tárolt adatokkal. Arra a rekordra pozícionál, amelynek adataira a legjobban illeszkedik a megadott kulcs, vagy ha nincs ilyen rekord, akkor az első rekordra ugrik, amelyik a kulcsnál nagyobb. Ha ilyen sincs, akkor az utolsó rekordra ugrik.
LoadFromFile
Osztály: TCustomClientDataSet
procedure LoadFromFile(
const FileName: string = ''
);
A Data property-t egy fájlból tölti fel. A fájl-nak a SaveToFile eljárással elmentett fájlnak kell lennie.
Paraméterek
const FileName: string = ''
Ebben a paraméterben megadhatjuk a fájl nevét. Ezt nem kötelező megtenni, mivel ha nem adjuk meg, vagy csak egy üres sztringet adunk meg, akkor a FileName property értékét veszi figyelembe.
LoadFromStream
Osztály: TCustomClientDataSet
procedure LoadFromStream(
Stream: TStream
);
A megadott TStream típusú objektumból tölti fel a Data property-t, amiben az adatkészletet tárolja. Az adatfolyam formátumának meg kell egyeznie a kliens adatkészlet belső formátumával. Például megadható egy olyan TStream objektum, amiben előzőleg a SaveToStream eljárással feltöltöttük az adatokat, akár egy másik adatkészletből.
Paraméterek
Stream: TStream
Ebből a TStream objektumból tölti fel a Data property-t.
Locate
Osztály: TCustomClientDataSet
function Locate(
const KeyFields: string;
const KeyValues: Variant;
Options: TLocateOptions
): Boolean;
A kulcstól független keresést tesz lehetővé.
Paraméterek
const KeyFields: string
A KeyFields paraméterben meg kell adni azokat a mezőket, amelyekben keresni akarunk. A mezők neveit pontosvesszővel kell elválasztani egymástól.
const KeyValues: Variant
A KeyValues paraméterben a keresett adatot, vagy adatokat kell megadni. Ha több mezőben is keresünk, akkor használjuk a VarArrayOf függvényt az adatok megadására, ahogy az az alábbi példában is látszik:
if ClientDataSet1.Locate(’Tipus;Nev’, VarArrayof([10, Edit1.Text]), [loCaseInsensitive, loPartialKey]) then ...
Options: TLocateOptions
Az Options paraméterben megadhatók a kereséssel kapcsolatos opciók, amiket csak sztring típusú mezők esetén vesz figyelembe. Ez egy TLocateOptions típusú halmaz paraméter, melyben a következő két értéket adhatjuk meg:
  • loCaseInsensitive: a keresésnél nem tesz különbséget a kis- és nagybetűk között.
  • loPartialKey: a keresett értékeknek nem kell pontosan megegyezniük a rekordokban tárolt értékekkel, elég, ha csak illeszkednek rájuk (pl. az „al” = „alma”).
Visszatérési érték
Ha a függvény megtalálta a keresett rekordot, akkor a visszatérési értéke igaz, és rá is pozícionál a rekordra. Ellenkező esetben a visszatérési érték hamis, és a kurzor nem mozdul.

ClientDataSet cikksorozat