HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

A DataSetProvider komponens


DataSetProvider 4. rész

Példaprogram letöltése

11722 bájt

A DataSetProvider komponensről szóló cikksorozat negyedik, és egyben befejező részében az eddig nem tárgyalt eseményeket ismertetjük. A mellékelt példaprogramban megint egy alkalmazás kiszolgálót készítünk, amely egy Paradox adatbázis tábla tartalmát szolgáltatja kliensalkalmazások felé. Természetesen elkészítjük a kliensalkalmazást is, amelyben az adatokat szerkeszthetjük is.

A kliensalkalmazás futtatása előtt a szerver alkalmazást legalább egyszer futtatni kell. A rendszeren meg kell lenniük a Delphi által telepített DBDEMOS aliashoz tartozó példa adatbázisoknak.
AfterUpdateRecord
Osztály: TBaseProvider
property AfterUpdateRecord: TAfterUpdateRecordEvent;
Azután következik be ez az esemény, miután a resolver frissítette az adatokat.
BeforeUpdateRecord
Osztály: TBaseProvider
property BeforeUpdateRecord: TBeforeUpdateRecordEvent;
Ez az esemény közvetlenül az adatok frissítése előtt jön létre. Az eseménnyel a következő feladatok oldhatók meg:
  • módosíthatók a rekordok adatai, mielőtt aktualizálásra kerülnének;
  • manuálisan megoldható a frissítés, ha a provider ezt nem kezeli le automatikusan (pl. többtáblás lekérdezéseknél, vagy ott, ahol több táblában is módosítani kell az adatokat);
  • bizonyos frissítéseket meg lehet akadályozni, ha az Applied paraméter értékét igazra állítjuk. Ekkor az eredeti frissítés nem hajtódik végre. Ha így akadályozzuk meg a frissítést, akkor hibaüzenetet sem kapunk.
OnGetData
Osztály: TBaseProvider
property OnGetData: TProviderDataEvent;
Az esemény akkor jön létre, miután a provider lekérdezte az adatokat, de mielőtt elküldte volna azokat a kliens adatkészletnek. Az adatok így szerkeszthetők lesznek a DataSet property-n keresztül, mielőtt el lennének küldve a kliens adatkészletnek.
OnUpdateData
Osztály: TBaseProvider
property OnUpdateData: TProviderDataEvent;
Ez az esemény akkor jön létre, amikor a provider aktualizálja az adatokat. Az eseménykezelő eljárásban ellenőrizhetjük az adatokat, vagy különböző műveleteket végezhetünk velük, például kódolhatjuk őket. A DataSet paraméterben megkapott adatkészleten keresztül módosíthatjuk, vagy ellenőrizhetjük az adatokat.
OnUpdateError
Osztály: TBaseProvider
property OnUpdateError: TResolverErrorEvent;
Ez az esemény akkor jön létre, amikor a provider valamilyen hiba folytán nem tudja aktualizálni a rekord adatait. Az esemény minden rekordnál létrejön, ahol a véglegesítés nem volt sikeres.
Az eseménykezelő eljárás deklarációja:
type
  TResolverErrorEvent = procedure(Sender: TObject; DataSet: TCustomClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind; var Response: TResolverResponse) of object;
Az eljárás paraméterei
Sender: TObject;
A provider komponens objektuma.
DataSet: TCustomClientDataSet;
A DataSet paraméter egy átmeneti kliens adatkészlet objektumát tartalmazza, ami csak az aktualizálási eljárás közben érhető el. Az adatkészlet mezőinek OldValue, CurValue és NewValue értékeiből megállapítható a hiba oka.
Fontos, hogy nem használható olyan eljárás, ami az aktuális rekordról egy másik rekordra történő pozícionálást eredményezne.
E: EUpdateError;
Ezt az objektumot használhatjuk fel a hiba megjelenítésére.
UpdateKind: TUpdateKind;
Ebből a paraméterből megtudhatjuk, hogy milyen típusú módosítás okozta a hibát. Értékei a következők lehetnek:
Érték Leírás
ukModify A rekord adataiban történt módosítás.
ukInsert Új rekord beszúrása.
ukDelete Rekord törlése.
var Response: TResolverResponse
Ebben a paraméterben megadhatjuk, hogy hogyan reagálunk a hibára. Lehetséges értékei a következők:
Érték Jelentés
rrSkip Túllép azon a rekordon, aminek a frissítése hibát okozott, és eltávolítja a még nem aktualizált módosításokat a cache-ből.
rrAbort Megszakítja az aktualizálást anélkül, hogy hibaüzenetet jelenítene meg.
rrMerge Felveszi a frissítéseket egy delta csomagba az eredeti értékkel. Csak akkor használható, ha időközben egy másik felhasználó nem változtatta meg a frissítendő rekordot.
rrApply A hiba javítása után a javított értékeket próbálja meg tárolni.
rrIgnore Nem foglalkozik a hibával, de nem is aktualizálja a rekordot.
AfterApplyUpdates
Osztály: TCustomProvider
property AfterApplyUpdates: TRemoteEvent;
Az esemény az adatok aktualizálása után következik be. Részletesen lásd a BeforeApplyUpdates eseménynél.
AfterExecute
Osztály: TCustomProvider
property AfterExecute: TRemoteEvent;
Osztály: TCustomProvider
property AfterGetParams: TRemoteEvent;
Az esemény azután következik be, miután a provider egy OleVariant típusban eltárolta a paramétereket. Részletesen lásd a BeforegetParams eseménynél.
AfterGetRecords
Osztály: TCustomProvider
property AfterGetRecords: TRemoteEvent;
Ez az esemény azután jön létre, miután a provider elkészített egy adatcsomagot, és elküldte a kliens adatkészletnek. Részletesen lásd a BeforeGetRecords eseménynél.
AfterRowRequest
Osztály: TCustomProvider
property AfterRowRequest: TRemoteEvent;
Ez az esemény azután jön létre, miután a provider lekérdezte az aktuális rekord információit. Részletesen lásd a BeforeRowRequest eseménynél.
BeforeApplyUpdates
Osztály: TCustomProvider
property BeforeApplyUpdates: TRemoteEvent;
Ez az esemény azelőtt jön létre, mielőtt a provider végrehajtaná a kliens adatkészletből érkező módosításokat. Az események a következő sorrendben követik egymást:
  • lefut a kliens adatkészlet BeforeApplyUpdates eseménye;
  • lefut a provider BeforeApplyUpdates eseménye;
  • a provider aktualizálja a módosításokat, és generál egy OnUpdateError eseményt, ha közben hiba történt;
  • lefut a provider AfterApplyUpdates eseménye;
  • lefut a kliens adatkészlet AfterApplyUpdates eseménye.
Az egyes események az OwnerData paraméteren keresztül tetszőleges adatokat adhatnak tovább egymásnak.
Ha az ApplyUpdates eljárás OwnerData paraméterben nem lett megadva egyéni adat (nil), akkor az eseményekben megadott adatok nem lesznek elérhetők a hívó eljárásban.
BeforeExecute
Osztály: TCustomProvider
property BeforeExecute: TRemoteEvent;
Ez az esemény azelőtt jön létre, mielőtt a provider futtatna egy lekérdezést vagy tárolt eljárást. Az események a következő sorrendben követik egymást:
  • lefut a kliens adatkészlet BeforeExecute eseménye, amiben tetszőleges adatokat küldhet tovább a többi eseménynek;
  • lefut a provider BeforeExecute eseménye, amelyben megkapjuk a kliens adatkészlet BeforeExecute eseményénél megadott adatokat is;
  • a provider lefuttatja a lekérdezést vagy tárolt eljárást;
  • lefut a provider AfterExecute eseménye;
  • lefut a kliens adatkészlet AfterExecute eseménye;
BeforeGetParams
Osztály: TCustomProvider
property BeforeGetParams: TRemoteEvent;
Ez az esemény azelőtt következik be, mielőtt a provider létrehozza a paramétereket tartalmazó OleVariant objektumot és elküldené a kliens adatkészletnek.
A paraméterek lekérdezése során a következő események követi egymást:
  • lefut a kliens adatkészlet BeforeGetParams eseménye, ahol egyéni adatokat adhat meg egy OleVariant típusban;
  • lefut a provider BeforeGetParams eseménye, amiben az OwnerData paraméterben megkapjuk a kliens által küldött egyéni adatokat is;
  • ha szükséges, a provider létrehozza a paraméterek adatait tartalmazó OleVariant típust;
  • lefut a provider AfterGetRecords eseménye;
  • lefut a kliens adatkészlet AfterGetRecords eseménye;
BeforeGetRecords
Osztály: TCustomProvider
property BeforeGetRecords: TRemoteEvent;
Ez az esemény azelőtt jön létre, mielőtt a provider a lekérdezett adatokat tartalmazó adatcsomagot továbbítaná a kliens felé. Az esemény része a provider és a kliens között folyó kommunikációnak, segítségével saját adatokat is közölhetünk a kliens adatkészlettel, és ez fordítva is igaz. Az adatok fogadása közben a következő események követik egymást:
  • lefut a kliens adatkészlet BeforeGetRecords eseménye, amelyben tetszőleges adatokat küldhet tovább egy OleVariant paraméterben;
  • lefut a provider BeforeGetRecords esemény, amelyben megkapjuk a kliens által küldött adatokat is az OwnerData paraméterben.
  • a provider elkészíti a küldendő adatcsomagot;
  • lefut a provider AfterGetRecords eseménye, amelyben megkapjuk a BeforeGetRecords események által küldött egyéni adatokat is;
  • lefut a kliens AfterGetRacords eseménye;
BeforeRowRequest
Osztály: TCustomProvider
property BeforeRowRequest: TRemoteEvent;
Ez az esemény azelőtt jön létre, mielőtt elkészítené az aktuális rekord információit tartalmazó delta csomagot. Ez az esemény is része a provider és a kliens közötti kommunikációnak.
Amikor a kliens adatkészlet információkat kér le az aktuális rekordról, vagy frissíti annak adatait, akkor a következő események zajlanak le:
  • A kliens adatkészletnél lefut a BeforeRowRequest esemény, amelyben OleVariant formában tetszőleges adatokat küldhet tovább;
  • A provider-nél lefut a BeforeRowRequest esemény, ahol az OwnerData paraméterben megjelenik a kliens adatkészlet által küldött adat. Ezt az adatot feldolgozhatjuk, de meg is változtathatjuk (továbbküldhetjük);
  • a provider elkészíti a lekérdezett információkat tartalmazó delta csomagot;
  • lefut a provider AfterRowRequest eseménye, amiben megkapjuk a BeforeRowRequest-ben megadott adatokat, amelyeket most megint feldolgozhatunk, vagy megváltoztathatunk;
  • lefut a kliens adatkészlet AfterRowRequest eseménye.
OnDataRequest
Osztály: TCustomProvider
property OnDataRequest: TDataRequestEvent;
Ez az esemény akkor jön létre, amikor a provider meghívja a DataRequest metódust. Ezt az eljárást akkor használjuk, amikor az adatokon különböző műveleteket akarunk elvégezni, mielőtt a kliens megkapná azokat. A kliens a DataRequest eljárásban paramétereket adhat meg, például egy szűrési feltételt.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 321. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |