Delphi - A ClientDataSet komponens

ClientDataSet 6. rész

forráskód letöltése
A TClientDataSet osztályról szóló cikksorozat hatodik részében folytatjuk az osztály metódusainak ismertetését. A mellékelt példa bemutatja, hogy hogyan tudunk egy adatkészletben tartományokat meghatározni, amelyek hasonlóan a szűréshez, az adatkészlet rekordjainak csak egy meghatározott csoportját teszik elérhetővé. A tartomány meghatározása után az adatkészletben csak a tartományban lévő rekordok láthatók.
Lookup
Osztály: TCustomClientDataSet
function Lookup(
const KeyFields: string;
const KeyValues: Variant;
const ResultFields: string
): Variant;
A függvény megkeresi a megadott kulccsal rendelkező rekordot, és a szintén megadott mezők értékeivel tér vissza.
Paraméterek
const KeyFields: string
A KeyFields paraméterben kell pontosvesszővel elválasztva megadni azokat a mezőket, amelyekben keresni szeretnénk.
const KeyValues: Variant
A KeyValues paraméterben a keresett értékeket tudjuk megadni, ugyanúgy, mint a Locate függvénynél.
const ResultFields: string
A ResultFields paraméterben azokat a mezőket kell megadni, amelyekben tárolt adatokra szükségünk van. A mezőneveket itt is pontosvesszővel kell egymástól elválasztani.
Visszatérési érték
A függvény visszatérési értéke egy tömb, amelynek Variant típusú elemei a ResultFields paraméterben megadott mezők adatait tartalmazzák.
MergeChangeLog;
Osztály: TCustomClientDataSet
procedure MergeChangeLog;
A naplózott módosításokat végrehajtja az adatokon.
Post;
Osztály: TCustomClientDataSet
procedure Post;
Ha az adatkészlet aktuális rekordja módosítva lett, akkor ezzel az eljárással tudjuk tárolni az új adatokat. Ez csak akkor lehetséges, ha az adatkészlet az Edit, Insert vagy Append metódusok meghívása utáni állapotba kerül (State=dsEdit vagy dsInsert). Ha az adatkészlet ebben az állapotban volt, akkor egy másik rekordra történő pozícionáláskor a Post metódus automatikusan meghívódik (pl. a First, Last, Next vagy Prior metódusk hatására).
Ha a LogChanges property értéke igaz, akkor a változtatások a Delta property-ben megadott naplóban kerülnek tárolásra. Ha a LogChanges property értéke hamis, akkor a változtatások a Data property-be kerülnek tárolásra.
Reconcile
Osztály: TCustomClientDataSet
function Reconcile(
const Results: OleVariant
): Boolean;
Törli a véglegesített módosításokat. Általában az ApplyUpdates függvény hívja meg automatikusan, miután a módosításokat véglegesítette. A függvény generál minden hibás rekordnál egy OnReconcileError eseményt. A Delta property a függvényhívás után csak azokat a rekordokat fogja tartalmazni, melyeket nem sikerült véglegesíteni, méghozzá az OnReconcileError eseményben módosított adatokkal.
Paraméterek
const Results: OleVariant
A Results paraméter egy Variant típusú érték, ami tartalmazza azokat a rekordokat, amelyeket valamilyen hiba folytán nem sikerült véglegesíteni, illetve a hibára vonatkozó információkat is.
Visszatérési érték
Ha a véglegesítés során nem volt hibás rekord, akkor a függvény visszatérési értéke igaz, ellenkező esetben hamis.
RefreshRecord;
Osztály: TCustomClientDataSet
procedure RefreshRecord;
Az eljárás az aktuális rekord adatait újra lekérdezi az adatbázis szerverről. Ez azt jelenti, hogy a rekordban elvégzett, de még nem véglegesített módosítások is elvesznek.
RevertRecord;
Osztály: TCustomClientDataSet
procedure RevertRecord;
Törli az aktuális rekord összes eddig elvégzett módosítását, azokat, amelyek még nem lettek véglegesítve.
SaveToFile
Osztály: TCustomClientDataSet
procedure SaveToFile(
const FileName: string = '';
Format TDataPacketFormat=dfBinary
);
Elmenti az adatkészletet a paraméterként megadott fájlba. Ha a fájl már létezett, akkor azt felülírja.
Paraméterek
const FileName: string = ''
Ha a FileName paraméter egy üres sztring, vagy nincs megadva, akkor a FileName property-ben megadott fájlba menti az adatokat.
Format TDataPacketFormat=dfBinary
A Format paraméterben megadhatjuk a fájl formátumát. Ezek a következők lehetnek:
  • dfBinary: bináris formátum;
  • dfXML: XML formátum;
  • dfXMLUTF8: XML formátum UTF8 kiterjesztett karakterkészlettel.
SaveToStream
Osztály: TCustomClientDataSet
procedure SaveToStream(
Stream: TStream;
Format TDataPacketFormat=dfBinary
);
Az adatkészletet elmenti egy adatfolyamba (TStream). A DataSize property-ből megtudható, hogy mekkora bufferre van szükség a mentéshez.
Paraméterek
Stream: TStream
Ebben a TStream objektumba menti el az adatkészletet.
Format TDataPacketFormat=dfBinary
A Format paraméterben megadhatjuk a fájl formátumát. Ezek a következők lehetnek:
  • dfBinary: bináris formátum;
  • dfXML: XML formátum;
  • dfXMLUTF8: XML formátum UTF8 kiterjesztett karakterkészlettel.
SetAltRecBuffers
Osztály: TCustomClientDataSet
procedure SetAltRecBuffers(
Old,
New,
Cur: PChar
);
Az Old, New és Cur paraméterekben megadhatjuk azoknak a buffereknek a pointereit, amelyeken keresztül field komponens OldValue, NewValue és CurValue property-jeihez férhetünk hozzá. Normális esetben ennek az eljárásnak a használatára nincs szükség.
Paraméterek
Old
A mező „régi” tartalma.
New
A mező új tartalma.
Cur: PChar
A mező aktuális tartalma.
SetKey;
Osztály: TCustomClientDataSet
procedure SetKey;
A SetKey eljárás annyiban különbözik az EditKey-től, hogy ez az előzőleg definiált keresési kulcsot törli.
SetOptionalParam
Osztály: TCustomClientDataSet
procedure SetOptionalParam(
const ParamName: string;
const Value: OleVariant;
IncludeInDelta: Boolean = False
);
Az eljárással saját adatokat fűzhetünk hozzá az adatcsomaghoz. Ezek az adatok mentésre kerülnek a data property tartalmával együtt, amikor fájlba, vagy egy stream-be (TStream) másoljuk azt. Az ilyen módon megadott adatokat a GetOptionalParam függvénnyel kérdezhetjük le.
Paraméterek
const ParamName: string
A ParamName paraméterben megadhatjuk az információ nevét, amivel az eltárolt adatokat azonosítani szeretnénk. Ez egy tetszőleges sztring lehet, a következők kivételével: UNIQUE_KEY, DEFAULT_ORDER, CHANGE_LOG, SERVER_COL, CONSTRAINTS, DATASET_CONTEXT, DATASET_DELTA, LCID, BDERECORD_X, TABLE_NAME, MD_FIELDLINKS, UPDATEMODE.
const Value: OleVariant
A Value paraméter OleVariant típusú, ez tartalmazza azokat az adatokat, amelyeket az adatcsomaghoz szeretnénk kapcsolni.
IncludeInDelta: Boolean = False
Ha az IncludeInDelta paraméter értéke igaz (alapértelmezetten hamis), akkor az adatok a Delta property-ben is eltárolódnak, ami azt jelenti, hogy az adatok véglegesítésekor ezek is el lesznek küldve a provider-nek. Ekkor az OnUpdateData eseményben lekérdezhetjük ezeket az adatokat a GetOptionalParam függvénnyel.
SetProvider
Osztály: TCustomClientDataSet
procedure SetProvider(
Provider: TComponent
);
Ezzel az eljárással adhatjuk meg azt a provider-t, ami az adatkészletnek szolgáltatja az adatokat, illetve ami a módosított adatok tárolását végzi el. A komponens a providerrel az AppServer property által meghatározott IAppServer interfészen keresztül kommunikál.
Ne használjuk ezt a metódust akkor, ha a provider egy távoli kiszolgálón található, valamint akkor, ha a komponens már használ egy helyi provider komponenst.
Ha bezártuk az adatkészletet, majd újra megnyitjuk, akkor a SetProvider metódust újra kell használnunk a provider megadására, amennyiben előzőleg is ezt használtuk.
Paraméterek
Provider: TComponent
Ebben a paraméterben adhatjuk meg a provider osztályt. Ennek az osztálynak a TCustomProvider osztályból kell származnia, különben kivétel keletkezik.
SetRange
Osztály: TCustomClientDataSet
procedure SetRange(
const StartValues,
EndValues: array of const
);
A tartomány elejét és végét adhatjuk meg egy lépésben a StartValues és EndValues paraméterekkel. Mindkét paraméter tömb típusú, így annyi értéket adhatunk meg bennük, amennyi mezőből az aktuális index áll. Ha ennél kevesebbet adunk meg, akkor a meg nem adott értékeknél NULL-t fog figyelembe venni.
Az eljárással egy lépésben megoldhatjuk azt, amit a SetRangeStart, SetRangeEnd, és ApplyRange eljárásokkal tudunk egyébként megtenni.
ClientDataSet1.SetRange([10, ’A’], [20, ’J’]);
Paraméterek
const StartValues
Ebben a paraméterben adhatjuk meg a tartomány elejét meghatározó rekord adatait.
EndValues: array of const
Ebben a paraméterben adhatjuk meg a tartomány végét meghatározó rekord adatait.
SetRangeEnd;
Osztály: TCustomClientDataSet
procedure SetRangeEnd;
Az adatkészletet dsSetKey állapotba állítja. Ezután a FieldByName függvénnyel megadhatjuk azt a rekordot, amely a tartomány utolsó rekordja lesz. A tartomány aktualizálása az ApplyRange eljárással történhet meg.
with ClientDataSet1 do begin
  SetRangeStart;
  FieldByName(’Sorszam’).AsInteger:=10;
  SetRangeEnd;
  FieldByName(’Sorszam’).AsInteger:=99;
  ApplyRange;
end;
SetRangeStart;
Osztály: TCustomClientDataSet
procedure SetRangeStart;
Az adatkészletet dsSetKey állapotba állítja. Ekkor megadhatjuk a FieldByName függvénnyel azt a rekordot, amely a tartomány első rekordja lesz. A tartomány aktualizálása az ApplyRange eljárással történhet. Előtte azonban általában van még egy SetRangeEnd eljárás, ami után a tartomány végét jelentő rekordot adhatjuk meg.

ClientDataSet cikksorozat