Delphi - Multi-tier alkalmazásfejlesztés MIDAS komponensekkel

Multi-tier 9. rész

forráskód letöltése
A TClientDataSet néhány további metódusának bemutatását tűzi ki célul sorozatunk mostani része. Példaprogramunkhoz a szerver a COMSzerver könyvtárban található. Ez annyiban különbözik az előző cikkünk szerverétől, hogy itt TQuery komponens helyett TTable komponenst használtunk, mivel az adatokat nem csak lekérdezni, de módosítani is fogjuk.


- RevertRecord
Ez a metódus az aktuális rekord változtatásának visszavonására szolgál a kliens adathalmazban. Példánkban ezt a metódust a "RevertRecord" feliratú gomb OnClick eseménykezelőjéből hívtuk meg. Amennyiben egy rekord tartalmát megváltoztattuk, a gomb lenyomásával visszaállíthatjuk az eredeti adattartalmat mindaddig, amíg a változtatást a kliens adathalmaz ApplyUpdates metódusának meghívásával nem véglegesítettük a szerveren.


- UndoLastChange
Míg az előző metódus csak annak a rekordnak a változtatását vonja vissza, amelyiken a rekormutató áll, addig ez a metódus a kliens adathalmaz utolsó változtatását vonja vissza, többszöri meghívás esetén az utolsóval kezdve mindaddig, amíg az összes megváltoztatott rekord értékét vissza nem állította. Az előzőhöz hasonlóan ez a metódus is csak addig képes a változtatások visszavonására, amíg meg nem hívjuk az adathalmaz ApplyUpdates metódusát, mert ezután a változtatások visszaíródnak a szerverre, és innentől kezdve véglegesek.
(Próbáljuk ki ezt a metódust úgy, hogy írjuk felül például az összes NEV mező értékét, majd nyomjuk meg többször egymás után az "UndoLastChange" gombot! Látni fogjuk, hogy minden újabb megnyomásra visszaállítódik a felülírás sorrendjében soron következő rekord eredeti értéke. Figyeljük meg azt is, hogy miután megnyomtuk az "ApplyUpdates" gombot, többé nem tudunk visszavonni egy változtatást sem.)


A TClientDataSet néhány további tulajdonságának bemutatása

- Aggregates
Ez a tulajdonság a TClientDataSet-ben az adatok összegzésének beállítására szolgál. Segítségével megadhatunk különféle számításokat, összesítéseket. Az előállított objektumok a TAggregate osztályból származnak.

Példánkban a cdsSzemelyek kliens adathalmaz három aggregált értékét jelenítettük meg:
  • az adathalmazban megjelenő személyek átlagos életkora,
  • a legfiatalabb személy életkora,
  • a legidősebb személy életkora.


A kliens adathalmaz aggregált (összesített) értékeit példánkban kétféleképpen állítottuk elő:

A DBEdit1, DBEdit2, DBEdit3 adatbázis szerkesztőmezőkben látható aggregált értékek a következőképpen számítódnak:
A TclientDataSet (cdsSzemelyek) komponensünkre duplán kattintva a megjelenő mezőszerkesztőben felvettünk három új mezőt (a New Fields menüpont segítségével):

- atlag: átlagéletkor
(Name: atlag
Type: Aggregate
Field Type: Aggregate (TRadioGroup-al kiválasztva))
Az OK gomb megnyomása után a mezőszerkesztőben az újonnan felvett "atlag" mezőre kattintva az Object Inspector-ban
az Expression tulajdonsághoz beírtuk: avg(Kora), és az Active tulajdonságot True-ra állítottuk. A DisplayFormat-hoz
.00-t adtunk meg (ábrázolás két tizedesjegyig).

- minkora: a legfiatalabb életkora
(Name: minkora
Type: Aggregate
Field Type: Aggregate
Az Expression tulajdonsághoz beírtuk: min(Kora), és az Active tulajdonságot True-ra állítottuk.

- maxkora: a legidősebb életkora
(Name: maxkora
Type: Aggregate
Field Type: Aggregate
Az Expression tulajdonsághoz beírtuk: max(Kora), és az Active tulajdonságot True-ra állítottuk.

Ahhoz, hogy az aggregált értékek ténylegesen kiszámításra kerüljenek és megjeleníthetők legyenek, a cdsSzemelyek
AggregatesActive tulajdonságát True-ra állítottuk.

A DBEdit1 szerkesztőmezőben az "atlag" mező értékét jelenítettük meg. Ehhez a DataSource tulajdonsághoz beírtuk:
dsrSzemelyek, a DataField tulajdonsághoz pedig: atlag.
A DBEdit2-nél: DataSource=dsrSzemelyek, DataField=minkora,
A DBEdit3-nál: DataSource=dsrSzemelyek, DataField=maxkora.
Ez az eljárás már tervezési időben is hozzáférhetővé teszi a kliens adathalmaz aggregált értékeit. Ilyenkor a mezőszerkesztő automatikusan előállít az aggregált mezőknek egy-egy TAggregate objektumot.

A Form-on található még három TEdit komponens is: Edit1, Edit2, Edit3. Ezekben a másik eljárással előállított Aggregates értékeket jelenítettük meg. Ez a következőképpen történt:

Az ObjectInspector-ban a cdsSzemelyek tulajdonságainál az Aggregates tulajdonságra kattintva megjelenik egy ellipszis gomb, melynek megnyomására előjön egy szerkesztőablak (Editing cdsSzemelyek.Aggregates). Itt az "Add New (Ins)" gombot megnyomva megjelenik az ablakban egy új sor (0-TAggregate). Ennek AggregateName tulajdonságához beírtuk: atlag, Expression tulajdonságához: avg(Kora), Visible és Active tulajdonságait pedig True-ra éllítottuk.
Ugyanígy előállítottuk a másik két sort is (min, min(Kora) és max, max(Kora)).
Az értékek megjelenítéséhez a Form OnActivate eseményében (TfrmFoform.FormActivate) lekódoltuk a következő eseménykezelőt:
Edit1.Text:=cdsSzemelyek.Aggregates[0].Value;
Edit2.Text:=cdsSzemelyek.Aggregates[1].Value;
Edit3.Text:=cdsSzemelyek.Aggregates[2].Value;

Ez az eljárás csak a program futása során teszi elérhetővé az aggregált értékeket, tervezési időben nem.

Multi-tier cikksorozat