|
|
DataSetProvider
DataSetProvider 1. rész
|
|
Példaprogram letöltése
10446 bájt
|
A DataSetProvider komponens adatokat szolgáltat egy adatkészletből, illetve elvégzi a módosítások frissítését is az adatkészletben. Segítségével készíthetünk olyan alkalmazásokat, amelyek egy XML fájlban tárolják az adatokat, de ezek ugyanúgy szerkeszthetők lesznek, mint bármely más adatbázisban tárolt adatok, vagy készíthetünk alkalmazás kiszolgálót is. Ebben a négy részes cikkben erről a komponensről, és a hozzá tartozó osztályokról lesz szó.

Constraints
Osztály: TDataSetProvider
property Constraints: Boolean;
A property értéke megadja, hogy az adatkészlet adataira vonatkozó szabályokat is átadja-e a kliensnek, hogy az helyben tudja ellenőrizni az adatok érvényességét. Ha property értéke igaz, akkor átküldi ezeket az információkat, ellenkező esetben nem.

DataSet
Osztály: TDataSetProvider
property DataSet: TDataSet;
Ezen a property-n keresztül kapcsolhatjuk az adatkészletet (Table, Query, stb.) a komponenshez. A komponens az adatkészlet adatiból olyan szabványos adatcsomagokat készít, amelyeket a kliens fogadni tud.
A komponens az adatkészlettel az IProviderSupport interfészen keresztül kommunikál. Ez az interfész megtalálható minden adatkészletnél, de a TDataSet osztályban néhány funkciója kivételt okoz. A Delphi speciális adatkészleteinél (sbExpress, BDe, ADO, InterBase) ezek a metódusok felül vannak írva, ezért nyugodtan használhatók. Más gyártó adatkészleteinél meg kell győződni róla, hogy az adatkészlet támogatja-e az adatkészlet provider-t.

Params
Osztály: TDataSetProvider
property Params: TParams;
Ez egy protected property, ami a klienstől származó paramétereket tartalmazza. Ezeket a paramétereket a SetParams, GetRecords és Execute metódusok állítják be.

ResolveToDataSet
Osztály: TDataSetProvider
property ResolveToDataSet: Boolean;
Ez a property meghatározza, hogy a frissítések hogyan legyenek aktualizálva. Ha a property értéke igaz, akkor a Resolver property-ben egy TDataSetResolver komponens lesz beállítva, ami a módosításokat közvetlenül a DataSet property-ben megadott adatkészletben frissíti. Ez akkor használható ki, ha használjuk az adatkészlet eseményeit, vagy az adatkészlet nem egy adatbázis szerverben található adtakészletet reprezentál.
Ha a property értéke hamis, akkor a Resolver property-ben egy TSQLResolver komponens lesz megadva, ami a frissítéseket az adatkészlethez tartozó adatbázis szerverben hajtja végre. Ez hatékonyabb, mint az előző megoldás, mivel kihagy egy közbenső lépést, az adatkészlet komponens használatát. Ha az adatkészlet csak olvasható, akkor ez az egyetlen megoldás az adatok frissítésére.

Options
Osztály: TBaseProvider
property Options: TProviderOptions;
Ebben a property-ben állíthatjuk be, hogy az adatcsomagok milyen adatokat tartalmazzanak, illetve hogyan legyenek felhasználva.
| Érték |
Jelentés |
| poFetchBlobsOnDemand |
A BLOB mezők adatai nem kerülnek be az adatcsomagba. Ebben az esetben a kliens adatkészlet külön lekérdezheti ezeket az adatokat, amikor szüksége van rá. Ha kliens adatkészlet FetchOnDemand property-jének értéke igaz, akkor ezt meg is teszi automatikusan. Ellenkező esetben a FetchBlobs metódust használhatja a BLOB adatok lekérdezésére. |
| poFetchDetailsOnDemand |
Ha a provider-ben egy olyan adatkészletet adtunk meg, ami egy master-detail kapcsolatban a master adatkészlet, akkor a beágyazott kliens adatokat nem küldi el az adatcsomagokban. Helyette a kliens adatkészlet külön lekérdezheti ezeket az adatokat. Ezt megteszi automatikusan, ha a FetchOnDemand property-je igazra van állítva. Ellenkező esetben a FetchDetails metódussal kérdezheti le az adatokat. |
| poIncFieldProps |
Az adatcsomagban a következő mező tulajdonságokat is elküldi: Alignment, DisplayLabel, DisplayWidth, Visible, DisplayFormat, EditFormat, MaxValue, MinValue, Currency, EditMask, és DisplayValues. |
| poCascadeDeletes |
Megmondja a szervernek, hogy törölje a detail rekordokat, amikor a hozzájuk tartozó master rekord törlése kerül. Ez akkor használható, ha az adatkészlet a master adatkészlet egy master-detail kapcsolatban, valamint a szerver támogatja a kaszkádolt törlést a hivatkozás-integritás szabályoknál. |
| poCascadeUpdates |
Megmondja a szervernek, hogy automatikusan frissítse a detail rekordokat, amikor a master rekord kulcsmezőjének értéke megváltozik. Ez akkor használható, ha az adatkészlet a master adatkészlet egy master-detail kapcsolatban, valamint a szerver támogatja a kaszkádolt frissítést a hivatkozás-integritás szabályoknál. |
| poReadOnly |
A kliens adatkészlet nem módosíthatja az adatkészletet a provider-en keresztül. |
| poAllowMultiRecordUpdates |
Engedélyezi a több rekord egyszerre történő frissítését. Ha nincs megadva, akkor az ilyen irányú próbálkozások nem lesznek végrehajtva. |
| poDisableInserts |
A kliens nem hozhat létre új rekordot az adatkészletben. Ha mégis megpróbálja, akkor az kivételt okoz. Ettől függetlenül az adatok szerkesztése és törlése megengedett. |
| poDisableEdits |
A kliens nem módosíthatja az adatokat. Ettől függetlenül a törlése és az új rekord felvétele megengedett. |
| poDisableDeletes |
A kliens nem törölhet rekordot az adatkészletből. Az adatok szerkesztése, és új rekord beszúrása megengedett. |
| poNoReset |
Az AS_GetRecords metódus meghívásánál a reset flag-et figyelmen kívül hagyja (TGetRecordsOption típusban a grReset érték). |
| poAutoRefresh |
Frissíti a kliens adatkészletben az aktuális rekord tartalmát amikor a módosítások aktualizálása megtörténik. |
| poPropogateChanges |
A BeforeUpdateRecord és az AfterUpdateRecord eseménykezelő eljárásokban elvégzett módosítások visszahatnak a kliens adatkészletre is. |
| poAllowCommandText |
Engedélyezi a kliensnek, hogy felülírja a provider adatkészletét egy SQL lekérdezéssel, egy tárolt eljárás vagy másik tábla nevének megadásával. |
| poRetainServerOrder |
Jelez, ha a kliens adatkészlet nem tudja megállapítani az adatok alapértelmezett sorrendjét az adatcsomagban. Ez megakadályozza a rekordok sorrendjének megváltoztatását a kliens által. |

Resolver
Osztály: TBaseProvider
property Resolver: TCustomResolver;
A provider komponens egy ún. resolver-t használ az adatok aktualizálására és az ezzel kapcsolatos hibák kezelésére. Általában nekünk ezzel a komponenssel nem kell foglalkoznunk, minden automatikusan történik.
A property értéke kezdetben nil, mivel csak akkor hozza létre a resolver komponenst, amikor először szükség van rá.

UpdateMode
Osztály: TBaseProvider
property UpdateMode: TUpdateMode;
Ez a property azt határozza meg, hogy a rekord frissítésekor hogyan keresse meg a frissítendő rekordot. A property értékei a következők lehetnek:
| Érték |
Jelentés |
| upWhereAll |
Az összes mezőt felhasználja a keresésnél. |
| upWhereChanged |
Csak a kulcsmezőket, valamint azoknak a mezőknek az eredeti értékét használja fel, amelyek módosítva lettek. |
| upWhereKeyOnly |
Csak a kulcsmezőket használja a kereséshez. |

Data
Osztály: TCustomProvider
property Data: OleVariant;
Ez egy csak olvasható property, amely az adatkészlet összes rekordját tartalmazza adatcsomag formátumban. A Data property read metódusa a GetRecords függvényt hívja meg –1-et megadva paraméterként.
A Data property a TCustomProvider osztályban van deklarálva, de az alapértelmezett visszatérési értéke mindig nil. A TCustomProvider-ből származtatott osztályokban, mint például a TDataSetProvider a property read metódusa felül van írva, és a megfelelő adatokat szolgáltatja.

Exported
Osztály: TCustomProvider
property Exported: Boolean;
Ez a property megmondja, hogy ha a provider egy alkalmazás kiszolgálóban helyezkedik el, akkor elérhető-e egy kliens számára. Ha a property értéke igaz, akkor a kliens alkalmazás felhasználhatja célként az IAppServe interfész metódusainak meghívásakor. Ha a property értéke hamis, akkor ez nem tehető meg, mivel a metódusok meghívása kivételt okoz.
Az Exported property-n felül, a távoli adatmodulnak regisztrálnia kell a provider-t, hogy a cliens használni tudja azt az IAppServer interfészen keresztül. Ha a provider tulajdonosa (Owner) az adatmodul, akkor erre nincs szükség, mivel automatikusan regisztrálva lesz. Ellenkező esetben az adatmodulnak regisztrálnia kell a RegisterProvider függvénnyel.

CreateDataPacket
Osztály: TDataSetProvider
procedure CreateDataPacket(
PacketOpts: TGetRecordOptions;
ProvOpts: TProviderOptions;
var RecsOut: Integer;
var Data: OleVariant
);
Ez egy belsőleg használt eljárás, ami létrehozza a provider által szolgáltatott adatcsomagot, amit azután a GetRecords függvénnyel lehet lekérdezni.
Paraméterek
PacketOpts: TGetRecordOptions
Ebben a paraméterben megadhatjuk, hogy a rekordok adatain kívül az adatcsomagban milyen információk szerepeljenek. Ez egy tömb típusú paraméter, amelyben az alábbi értékek adhatók meg (egyszerre akár több is):
| Érték |
Jelentés |
| grMetaData |
Az adatcsomag tartalmazni fogja az adatkészlet struktúráját leíró információkat. |
| grReset |
Az adatcsomagban lévő rekordok az első rekorddal kezdődnek, attól függetlenül, hogy az előző csomagokban lettek-e már elküldve rekordok, vagy sem. |
| grXML |
Az adatcsomag XML sztringként lesz elküldve az OleVariant típus helyett. A kiterjesztett karakterek escape szekvenciákkal lesznek kódolva. |
| grXMLUTF8 |
Hasonló, mint a grXML, de a kiterjesztett karaktere UTF kódolással lesznek megadva. |
ProvOpts: TProviderOptions
Ez a paraméter az Options paraméternek felel meg. Részletes leírását lásd az Options property-nél.
var RecsOut: Integer
Ebben a paraméterben adhatjuk meg, hogy mennyi rekordot akarunk eltárolni az adatcsomagban, és ebben kapjuk vissza a ténylegesen eltárolt rekordok számát is.
var Data: OleVariant
Ebben a paraméterben megkapjuk a létrehozott adatcsomagot.

CreateResolver;
Osztály: TDataSetProvider
function CreateResolver: TCustomResolver;
Ez az eljárás automatikusan meghívásra kerül, amikor a provider-nek szüksége van egy resolver komponensre. A resolver típusa a ResolveTodataSet property-től függ (lásd Resolver és ResolveDataSet property-k).
Visszatérési érték
A visszatérési érték a létrehozott resolver objektuma. Ugyanezt kapjuk meg a resolver property-ből is.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2002 évkönyv 275. 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!
|