Umíme to s Delphi, 17. díl – databáze v Delphi

Databáze a Delphi – to je skoro nerozlučná dvojice. Tvrzení, že v Delphi se databázím nadmíru daří, určitě není přehnané. Podpora databází v tomto vývojovém nástroji je velmi silná a s postupným příchodem nových verzí Delphi se stále rychleji rozšiřuje.
V předchozích dílech seriálu jsme se naučili pracovat s nejrůznějšími komponentami a vytvářet jednoduché aplikace mající elegantní uživatelské rozhraní. Zvládneme vytvořit textový a grafický editor, umíme pracovat se soubory. Dosud ale nic nevíme o způsobu, jak jednoduše spravovat velké balíky dat. Jakým způsobem budeme ukládat a zpřístupňovat evidenci zákazníků firmy s celosvětovou působností?

Jistě – je možné „ručně“ naprogramovat systém suplující mnohé funkce databáze (např. vkládání, třídění, vyhledávání a zobrazování údajů). To by však bylo velmi pracné a vcelku zbytečné. Můžeme totiž použít databázi.

Rostoucí podpora databází v Delphi je logickým důsledkem trendu poslední doby. Význam databází nesmírně rychle roste. Každým dnem se rozrůstá počet firem, institucí i jednotlivých uživatelů, jež přesouvají určitou část své agendy, ať již papírové nebo elektronické „nedatabázové“, právě do databáze.

Problematika databází se zdá být poměrně rozsáhlá a mnozí odborníci vám určitě budou tvrdit, že k zvládnutí databází potřebujete několik let intenzivního studia. Nemají tak docela pravdu. Jistě, komplexní pochopení práce s databázemi, jejich vytváření a správy v nejrůznějších databázových systémech vyžaduje dost času. Nicméně, „dělat databáze“ lze i bez hlubokých znalostí tohoto oboru. Pokud je možné zákazníkův požadavek vyjádřit větou typu: „Potřebuji vytvořit databázi zákazníků, abych se konečně zbavil těch deseti šanonů ve skříni,“ můžete s klidným svědomím slíbit, že to zvládnete. Tedy – po přečtení tohoto dílu.

Databáze v Delphi – Borland Database Engine (BDE)

Přes BDE má programátor možnost přistupovat k celé řadě databází. Koncepce BDE spočívá v univerzálním databázovém jádru. Pomocí tohoto jádra může programátor přistupovat k mnoha typům databází, a to zcela jednotně, stejným způsobem a naprosto jednoduše. Ovladače BDE „převedou“ databázovou operaci na správnou realizaci pro konkrétní databázový systém.

Systém BDE je velmi snadno rozšiřitelný – například pomocí ovladačů ODBC (Microsoft Open Database Connectivity). Kompletní popis konfigurace BDE a práce s ním ovšem přesahuje rámec našeho seriálu a pro získání těchto informací je nutné prostudovat například některý titul odborné literatury.

Abychom mohli v Delphi používat „databázový stroj“ BDE, musíme vytvořit tzv. Alias. Alias je jakási „přezdívka“ databáze, jejíž pomocí přistupujeme do databáze v Delphi. V závěru tohoto dílu je detailně popsán způsob vytvoření nového Aliasu pro vývoj databázové aplikace v Delphi. Spuštěný BDE ukazuje následující obrázek (v levé části je seznam existujících databázových Aliasů, v pravé části se zobrazují podrobnosti o vybraném aliasu):

Databázový systém Database Desktop

S Delphi je standardně dodáván velmi jednoduchý databázový systém Database Desktop. Jeho cílem je umožnit vytváření, prohlížení, třídění, modifikace a dotazy nad tabulkami v několika formátech (Paradox, dBASE, SQL formáty, a to s možností rozšíření).

Pomocí systému Database Desktop je možné vytvářet, ukládat a znovu otvírat tabulky, dotazy a SQL příkazy, dále pracovat s daty v tabulkách (přidávat, mazat, kopírovat…), chránit data hesly, třídit tabulky apod.

Database Desktop samozřejmě pracuje přes BDE. Využívá Aliasů (umožňuje i jednoduchou správu Aliasů, takže při práci s Database Desktop ani nemusíte spouštět BDE).

Programátor tedy se zakoupením Delphi získává možnost vytvářet kompletní databázové aplikace, aniž k tomu potřebuje další nástroje. V příštím díle seriálu si ukážeme celý proces vývoje nové databáze a databázové aplikace, včetně vytvoření struktury databáze pomocí Database Desktop. Spuštěný BDE s otevřenou tabulkou ukazuje následující obrázek:

Komponenty Data Access

Paleta Data Access obsahuje komponenty určené pro přístup k databázím pomocí BDE. Ve verzi Delphi 5 Enterprise obsahuje paleta 9 komponent (většina je jich však dostupná i v ostatních verzích). Většinu z nich popisuje následující přehled:

Komponenta: Data Source

Funguje jako „spojení“ mezi komponentami pro přístup do databáze (Table) a komponentami pro uživatelské rozhraní (DBGrid).

Komponenta: Table

Získává data z (fyzické) databázové tabulky pomocí BDE a zpřístupňuje je komponentě DataSource (stejně tak i naopak – data získaná z komponenty posílá do fyzické tabulky).

Komponenta: Query

Má podobnou funkci jako komponenta Table, s tím rozdílem, že získává data z tabulky pomocí příkazů jazyka SQL.

Komponenta: StoredProc

Umožňuje aplikaci spouštět (využívat) procedury uložené na databázovém serveru.

Komponenta: Database

Slouží k inicializaci trvalého spojení s databází, zvláště u vzdálených databází (kde zabezpečuje zadání uživatelského jména, hesla…).

Komponenta: BatchMove

Provádí kopii tabulky nebo jejích dat. Může být použito i ke kopírování z jednoho databázového formátu do jiného.

V následujících podkapitolách se stručně podíváme na tři nejdůležitější komponenty, které nám budou bohatě stačit k vytvoření jednoduché databázové aplikace.

Komponenta DataSource

DataSource (datový zdroj) se vyskytuje v každé databázové aplikaci. Funguje jako „spojení“ mezi komponentami pro přístup do databáze (např. Table) a komponentami pro uživatelské rozhraní (např. DBGrid).

Podívejme se na vlastnosti komponenty DataSource (viz následující tabulka):

Vlastnost Význam
AutoEdit Nastavuje, má-li být databáze automaticky v editačním režimu. Pokud AutoEdit = True, při každé editaci ze strany uživatele je volána metoda Edit, v opačném případě je uživateli zabráněno měnit hodnoty.
DatSet Specifikuje komponentu, která přímo přistupuje k databázi (např. Table) a pro kterou DataSource slouží jako „spojení“.
Enabled Nastavení na False vypne spojení na komponentu zobrazující data (v té pak nejsou zobrazeny žádné údaje).
State Přečte (vrátí) aktuální stav komponenty DataSet asociované s touto komponentou DataSource (je-li DataSet zavřen, právě otvírán apod.).
Události jsou pouze tři:
  • OnDataCange (při změně dat) se vyskytne, když aktuální záznam byl editován, při přechodu na jiný záznam apod.
  • OnStateChange (při změně stavu) se vyskytne, změní-li se stav komponenty DataSet (např. přechod do editačního režimu apod.)
  • OnUpdateData (při aktualizaci dat) se vyskytne při změně aktuálního záznamu.

Komponenta Table

Table zapouzdřuje databázovou tabulku. Zpřístupňuje z ní data a dává je k dispozici dalším komponentám prostřednictvím komponenty DataSource. Kromě toho Table dokáže i přijmout data z komponenty (např. změnil-li uživatel záznam) a zapsat je do tabulky. To vše provádí prostřednictvím BDE.

Nejdůležitější vlastnosti komponenty Table shrnuje následující tabulka:

Vlastnost Význam
Active Udává, je-li tabulka „otevřena“ – je-li možné z ní načítat a do ní zapisovat data. Při správném propojení komponent se povolení této vlastnosti projeví naplněním vizuálních komponent daty již v návrhové fázi.
CanModify Říká, může-li aplikace měnit data v tabulce.
DatabaseName Specifikuje jméno databáze asociované s touto komponentou (lze použít i alias vytvořený v BDE).
Exists Říká, existuje-li tabulka (na kterou se odkazuje).
TableName Udává jméno tabulky, kterou zapouzdřuje.
TableType Udává typ tabulky (ttParadiox, ttFoxPro,…). Nastavení na ttDefault způsobí „automatickou detekci“ typu založenou na příponě souboru.

Komponenta Table má velké množství událostí, které se dělí na události „po“ a události „před“. Příklad – před uzavřením tabulky (BeforeClose) a po uzavření tabulky (AfterClose). Díky tomu je možné mnohým akcím ještě včas zabránit.

Důležité jsou také metody komponenty Table. Pomocí nich je možné provádět operace s vlastní tabulkou a s jejími daty. Stručný popis nejdůležitějších metod přináší následující tabulka:

Metoda Význam
CreateTable Vytvoření nové tabulky
Append, AppendRecord Přidání řádky do tabulky
Close Uzavření tabulky
Delete Smazání řádky z tabulky
Edit Editace řádky
FieldByName Přístup k hodnotám polí dle jmen
First Přechod na první záznam v tabulce
GetBookmark Nastavení záložky
GelFieldNames Zjištění jmen polí
Insert, InsertRecord Vložení řádky do tabulky
Last Přechod na poslední záznam v tabulce
MoveBy Posun o daný počet záznamů
Next Posun na další záznam
Open Otevření tabulky
Post Uložení změn do databáze
Prior Přechod na předchozí záznam

Komponenta Query

Komponenta Query je funkčně podobná komponentě Table, s tím rozdílem, že k přístupu do databázové tabulky používá jazyk SQL. Pomocí tohoto jazyka definujeme podmínky, za kterých se má ta která operace uskutečnit. Není nezbytně nutné přistupovat pomocí komponenty Query jen do SQL databází. Pomocí SQL dotazů můžeme získávat data i z jiných databází přístupných před BDE. To je velkou výhodou Delphi.

Dotazy jazyka SQL můžeme rozdělit do dvou typů:

  • dotazy, které pouze vracejí množinu záznamů. Základním příkazem je SELECT.
  • dotazy, které provádějí změnu v tabulce. Používají se příkazy INSERT, DELETE, UPDATE, CREATE a další.
Vlastnosti, události a metody jsou velmi podobné komponentě Table, až na několik odlišností, které nyní popíšeme.

Nejdůležitější vlastností komponenty Query je SQL, která je typu TStrings. Do ní se zapisuje text SQL příkazu, který se má vykonat. Popis jazyka SQL přesahuje rámec tohoto seriálu, nicméně sehnat knihu (nebo www stránku) určenou pro seznámení se SQL není dnes jistě problém – zkuste např. seriál o SQL zde na Živě.cz. Jednoduché příklady SQL dotazů budou také uvedeny v příštím díle u „databázového“ příkladu.

S vlastností SQL souvisí rovněž vlastnost Params, která obsahuje parametry pro SQL příkaz daného dotazu.

Události jsou stejné jako u komponenty Table a shoduje se i většina metod. Pro Query jsou jedinečné pouze metody ExecSQL (používá se k provedení jiného příkazu než SELECT, pro ten se používá metoda Open), Prepare (pošle dotaz BDE a ten se postará o jeho optimalizaci), UnPrepare (odpřipraví již provedený dotaz, tj. uvolní použité zdroje) a ParamByName (pro nastavení parametrů za běhu).

Příště – komponenty Data Controls a kompletní databázový příklad

Pokud byste rádi viděli, jak prakticky vytvořit databázovou aplikaci v Delphi (včetně vytvoření Aliasu v BDE, databázové tabulky v nástroji Database Desktop), určitě si nenechte ujít příští díl seriálu, ve kterém si to krok za krokem předvedeme. Ještě předtím se však podíváme na několik komponent z palety Data Controls.
Diskuze (1) Další článek: Přehled významných vzdělávacích portálů

Témata článku: , , , , , , , , , , , , , , , , , , , ,