13. Seznámení s datovými množinami podporujícími BDE

Tato kapitola popisuje společné služby komponent datových množin, které používají BDE pro přístup k datům. Podpora BDE je zabudována do komponenty TBDEDataSet, která je přímým potomkem TDataSet. Další služby řízení databáze a sezení jsou přidány v TDBDataSet, který je přímým potomkem TBDEDataSet.

Tato kapitola nás seznámí se službami datových množin poskytnutých TBDEDataSet a TDBDataSet. Předpokládáme při tom, že jsme se již seznámili s TDataSet. I když funkčnost poskytnutou TBDEDataSet a TDBDataSet musíme pochopit, abychom mohli vyvíjet své vlastní datové množiny podporující BDE, nikdy TBDEDataSet a TDBDataSet nepoužíváme ve svých aplikacích přímo. Přímo používáme jejích přímé potomky TQuery, TStoredProc a TTable.

Úvod do podpory BDE

Komponenta TBDEDataSet implementuje abstraktní metody TDataSet, které řídí navigaci záznamů, indexaci a záložkování. Je také reimplementováno mnoho virtuálních metod a událostí TDataSet k převzetí výhod BDE.
Přidávané specifické služby BDE, společné pro všechny databáze, v TBDEDataSet zavádějí nové vlastnosti, události a metody pro zpracování BLOB, odložených aktualizací, komunikací se vzdáleným databázovým serverem. TDBDataSet zavádí metodu a vlastnosti pro zpracování databázových připojení a přiřazování datových množin k sezení BDE. Následující body popisují tyto služby:
Zpracování připojení databáze a sezení
Komponenta TDBDataSet zavádí následující vlastnosti a funkce pro práci s připojením databáze a sezení.
 
Funkce nebo vlastnost Význam
Funkce CheckOpen Určuje zda databáze je otevřená. Vrací true, pokud připojení je aktivní a false v opačném případě.
Database Identifikuje komponentu databáze, ke které je přiřazená datová množina.
DBHandle Specifikuje madlo databáze BDE pro komponentu databáze specifikované ve vlastnosti Database. Používáme pouze tehdy, když přímo voláme API BDE.
DBLocale Specifikuje informace o místě BDE pro komponentu databáze specifikované ve vlastnosti Database. Používáme pouze tehdy, když přímo voláme API BDE.
DBSession Specifikuje madlo sezení BDE pro komponentu sezení specifikovanou vlastností SessionName. Používáme pouze tehdy, když přímo voláme API BDE.
DatabaseName Specifikuje přezdívku BDE nebo jméno komponenty databáze pro databázi použitou touto datovou množinou. Pokud datovou množinou je tabulka Paradoxu nebo dBASE, pak DatabaseName může být úplná specifikace souboru tabulky.
SessionName Specifikuje sezení ke kterému tato komponenta datové množiny je přiřazena. Pokud použijeme komponentu databáze i komponentu sezení s datovou množinou, pak nastavení SessionName musí být stejné jako vlastnost SessionName komponenty databáze.

Z vlastností databáze a sezení TDBDataSet nejčastěji se používá DatabaseName a SessionName. Pokud pracujeme s databázemi na vzdáleném databázovém serveru, jako je Sybase, Oracle nebo InterBase, pak naše aplikace obvykle udržuje toto připojení prostřednictvím komponenty TDatabase. Pak nastavíme vlastnost DatabaseName každé datové množiny na jméno komponenty databáze, která zřizuje databázové připojení používané datovými množinami. Pokud komponentu databáze nepoužijeme, pak DatabaseName musíme nastavit na přezdívku BDE (případně úplnou specifikaci souboru pro dBASE nebo Paradox).
SessionName indikuje sezení BDE ke kterému je přiřazena datová množina. Pokud ve své aplikaci nepoužíváme explicitní komponenty sezení, pak pro tuto vlastnost nezadáváme hodnotu. Pokud naše aplikace používá více než jedno sezení, pak nastavíme vlastnost SessionName datové množiny na hodnotu SessionName příslušné komponenty sezení v naši aplikaci. Pokud naše aplikace používá více komponent sezení a jednu nebo více komponent databáze, pak SessionName datové množiny musí odpovídat vlastnosti SessionName komponenty databáze ke které je datová množina přiřazena.
Pokud nám nevyhovuje zabudovaná funkčnost BDE v komponentách datových množin, pak můžeme přímo volat API BDE. K tomu používáme vlastnosti DBHandle, DBLocale a DBSession. Tyto vlastnosti jsou určeny pouze pro čtení a jejich hodnoty jsou automaticky přiřazeny, když datová množina je připojena k databázovému serveru prostřednictvím BDE. Tyto vlastnosti jsou poskytnuty jako zdroje pro vývojáře aplikací kteří potřebují volat funkce BDE přebírající madla jako parametry. Více informací o API BDE bude uvedeno v následující kapitole.

Práce s komponentou poskytovatele

Pro komponenty datových množin, které jsou částí aplikačního serveru ve vícevrstvové databázové aplikaci, TDBDataSet obsahuje vlastnost Proveder. Provider je vlastnost určená pouze pro čtení, která ukazuje na rozhraní IProvider použité klientskou aplikací ke komunikaci s datovými množinami na aplikačním serveru. Když komponenta poskytovatele specifikuje datovou množinu na aplikačním serveru ze kterého jsou požadována data a na který jsou zasílány klientské aktualizace, pak vlastnost Provider datové množiny je automaticky nastavena na rozhraní IProvider poskytovatele. Komponenty poskytovatele jsou poskytnuty pouze ve verzi Client/Server (TProvider) a Enterprise (TProvider a TEnteraProvider).

Práce s odloženými aktualizacemi

Odložené aktualizace umožňují získat data z databáze, uložit a editovat je lokálně a potom aplikovat odložené aktualizace na databázi jako celek. Když jsou povoleny odložené aktualizace, pak aktualizace datové množiny (jako je zasílání změn nebo rušení záznamů) jsou ukládány v interní vyrovnávací paměti místo přímého zápisu do připojené tabulky datové množiny. Když změny jsou kompletní, pak naše aplikace volá metodu, která zapíše odložené aktualizace do databáze a vyprázdní vyrovnávací paměť.
Odložené aktualizace jsou implementovány v TBDEDataSet. Následující tabulka uvádí přehled vlastností, událostí a metod pro odložené aktualizace.
 
Vlastnost, událost nebo metoda Význam
Vlastnost CachedUpdates Určuje zda pro datovou množinu jsou povoleny odložené aktualizace. Při true jsou odložené aktualizace povoleny.
Vlastnost UpdateObject Indikuje jméno komponenty TUpdateSQL použité k aktualizaci datových množin založených na dotazech.
Vlastnost UpdatesPending Indikuje zda lokální vyrovnávací paměť obsahuje záznamy, které je nutno aplikovat na databázi. true indikuje, že jsou záznamy k aktualizaci.
Vlastnost UpdateRecordTypes Indikuje typ aktualizovaných záznamů v průběhu odložených aktualizací.
Metoda UpdateStatus Indikuje, zda záznam je nezměněn, modifikován, vložen nebo zrušen.
Událost OnUpdateError Vývojářem vytvořená procedura, která zpracovává chyby aktualizace záznam po záznamu.
Událost OnUpdateRecord Vývojářem vytvořená procedura, která zpracovává aktualizace záznam po záznamu.
Metoda ApplyUpdates Aplikuje záznamy v lokální vyrovnávací paměti na databázi.
Metoda CancelUpdates Odstraňuje všechny nevyřízené aktualizace z lokální vyrovnávací paměti bez jejich aplikování na databázi.
Metoda CommitUpdates Vyprazdňuje vyrovnávací paměť aktualizací po úspěšném aplikování aktualizací.
Metoda FetchAll Kopíruje všechny záznamy databáze do lokální vyrovnávací paměti pro editování a aktualizování.
Metoda RevertRecord Ruší aktualizace současného záznamu, pokud aktualizace není aplikována na serverové straně.

Používání odložených aktualizací a jejich koordinace s ostatními aplikacemi, které přistupují k datům ve víceuživatelském prostředí, bude popsána později.

Odkládání BLOB

TBDEDataSet poskytuje vlastnost CacheBlobs k řízení zda položky BLOB jsou odkládány lokálně BDE, když aplikace čte záznamy BLOB. Implicitně CacheBlobs je true, což znamená, že BDE ukládá lokální kopii položek BLOB. Odkládání BLOB zvyšuje výkonnost aplikace umožněním BDE ukládat lokální kopie BLOB namísto jejího opakovaného získávání z databázového serveru podle uživatelova procházení záznamy.
V aplikacích a prostředích kde BLOB jsou často aktualizovány nebo nahrazovány a čerstvý pohled na data je důležitější než výkon aplikace, můžeme nastavit CacheBlobs na false k zajištění toho, aby naše aplikace vždy viděla poslední verzi položky BLOB.
 
13. Seznámení s datovými množinami podporujícími BDE