Umíme to s Delphi: 75. díl – databáze v Delphi, obecný úvod

Dnešním dnem nastávají lepší časy pro příznivce databází v Delphi. Protože databáze jsou v dnešním světě zcela nepřehlédnutelné, měl by i každý dobrý programátor v Delphi umět napsat databázovou aplikaci. Protože v tomto seriálu jsme se zabývali databázemi jen velmi povrchně a navíc již dávno, otevíráme toto nesmírně rozsáhlé, avšak zajímavé téma znovu. A začneme od úplných základů: jaká je databázová filozofie v Delphi? A jak ji podporuje IDE?
Programování databází je jedním z témat, kterým je náš seriál nejvíce dlužen. Přestože svět spěje k centralizovanému, systematickému, organizovanému ukládání dat do databází, náš seriál se krčí v ústraní se svými díly 17 a 18, které obsahují velmi stručný popis vývoje aplikací pomocí mechanismu BDE. Databáze v Delphi jsou však jednou z jeho nejrychleji se rozvíjejících fragmentů; v dnešním díle a v několika následujících dílech se na ně proto zaměříme znovu, důkladněji.

Pokud je snad mezi váženými čtenáři někdo, kdo pochybuje o významu, přínosu a použitelnosti databází, přidám výsledky jednoho odborného průzkumu, podle něhož lze v současnosti přes 80% aplikací označit za databázové. Zdá se to nemožné; uvědomme si však, že většina aplikací potřebuje ukládat data a manipulovat s nimi, a přesun od souborového přístupu k databázovému je více než zřejmý.

Vzhledem ke své snaze vysvětlit vše co nejpodrobněji nejsem momentálně s to dopředu určit, kolik dílů zabere popis databází. Pokud získáte kdykoliv při čtení pocit, že něco vysvětluji zbytečně moc nebo naopak málo, ozvěte se prosím v diskusi nebo na můj email.

A nyní již k náplni dnešního dílu. Protože základní informace o databázích v Delphi, které jsou uvedeny v 17. a 18. dílu, jsou značně kusé a navíc zastaralé, vysvětlíme si nejprve databázovou architekturu použitou v Delphi. Informace uvedené v následujících odstavcích jsou platné vždy, ať se rozhodnete pracovat s databázemi pomocí BDE nebo pomocí „čehokoliv jiného“. Poznamenejme hned na úvod, že databázová podpora, kterou se budeme učit, je přítomna až od Delphi verze 6. Důležitá je také edice: Personal neobsahuje databázovou podporu, všechny prvky naleznete až v edici Enterprise.

Architektura databází v Delphi

Tvorba databází v Delphi se může zpočátku zdát poněkud komplikovaná, protože na vás ze všech stran útočí „databázové“ pojmy jako DataSource, BDE, Interbase, DataAccess, dbExpress, DBNavigator, StoredProc... Je logické, že začátečník, který do databázové architektury Delphi příliš nevidí, se cítí zmaten. Pokud si však dáte tu práci a pochopíte základní filozofii, s níž se k databázím v Delphi přistupuje, najednou zjistíte, že vytvářet databáze je nejen zábavné, ale též snadné.

Původní záměr Delphi spočívá ve zjednodušení návrhu a implementace (byť poměrně složité a rozsáhlé aplikace). Tento záměr je fyzicky realizován čtyřmi základními body:

  • výkonné prostředí s řadou průvodců a šablon,
  • vizuální návrh,
  • objektový přístup,
  • koncept znovupoužitelných komponent.

Aby mohla být i tvorba databázových aplikací co možná nejjednodušší, je nutné rozdělit (ve smyslu zmíněných 4 pravidel) do několika vrstev. Proč? Pokud strukturujeme aplikaci do relativně oddělených vrstev, získáme robustní návrh, v němž bude možné (a relativně snadné, resp. snadnější) provádět změny. Co když napíšete aplikaci pro databázi Interbase a zákazník za rok přejde na platformu Oracle? V ideálním případě postačí změnit jednu aplikační vrstvu a všechny ostatní (včetně uživatelského rozhraní) mohou zůstat beze změny. V praxi sice není situace bezproblémová, nicméně obecně tato myšlenka platí.

Jak tedy vypadá databázová aplikace vytvořená v Delphi? Podívejte se na obrázek:

Klepněte pro větší obrázek

Pojďme si jednotlivé vrstvy podrobně vysvětlit:

  • Fyzické připojení k datům: prostřednictvím specializovaných komponent (obvykle různých pro jednotlivé platformy) zajišťuje tato vrstva fyzické připojení k databázovému stroji a „komunikaci“ s tímto strojem. Poznamenejme, že v této vrstvě se nemusí jednat jen o připojení k databázi jako takové; namísto databázového stroje se lze připojit třeba k jiné datové sadě. Příkladem komponenty z této vrstvy je třeba IBDatabase, kterou najdete v paletě Interbase nebo komponenta Database z palety BDE.
  • Datová sada: tato vrstva zpřístupňuje data přijatá (získaná) z databáze. Datová sada je stále ještě závislá na používané databázové platformě a v podstatě pro každou platformu nalezneme v Delphi speciální komponenty datových sad. Příkladem komponenty z této vrstvy je IBTable z palety Interbase nebo komponenta Table z palety BDE.
  • Datový zdroj: vrstva datového zdroje je již zcela nezávislá na databázové platformě. S komponentami této vrstvy při programování „svazujeme“ komponenty uživatelského rozhraní. Jinak řečeno – máme-li komponentu uživatelského rozhraní, která vypisuje příjmení zaměstnance, řekneme této komponentě, že toto příjmení získá z příslušného datového zdroje, tedy z příslušné komponenty vrstvy Datasource. Je tedy zřejmé, že aplikace může obsahovat více komponent z této vrstvy (které mohou klidně získávat data z různých databází) a tytéž komponenty uživatelského rozhraní mohou tedy pracovat střídavě s daty z různých databází. A nebo naopak lze mít více komponent uživatelského rozhraní, které pracují s tímtéž datovým zdrojem. Při změně databázové platformy by ideálně mělo být možné zachovat datové zdroje beze změn. Typickým příkladem komponenty z této vrstvy je DatSource z palety DataAccess (bez ohledu na použité komponenty v nižších vrstvách).
  • Vrstva uživatelského rozhraní: je asi zbytečné zdůrazňovat, že tato vrstva je zcela nezávislá na platformě. Tato vrstva je zodpovědná za zobrazování dat uživatelům. Kromě toho může „sbírat“ od uživatelů požadavky a zprostředkovávat tak úpravy dat v databázi (samozřejmě prostřednictvím komponent z nižších vrstev). Příkladem této komponenty je DBGrid, DBMemo, DBRichEdit apod. z palety DataControls.

Architektura konkrétní databázové aplikace může obecně vypadat různě, ale lze říci, že v obvyklých případech se více či méně přibližujeme ke konceptu popsanému v předchozím textu. Typická databázová aplikace obsahuje tedy minimálně čtyři komponenty – jednu z každé vrstvy. Existují samozřejmě výjimky: pokud pracujeme s BDE, je na 2. vrstvě patrné, k jaké databázi se připojujeme, proto není nutné vkládat do aplikace komponentu z 1. vrstvy (Database). Delphi ji za běhu vytvoří automaticky.

A co na to IDE Delphi?

Už tedy známe v hrubých obrysech databázovou architekturu v Delphi. Víme, že v běžné aplikaci se vyskytují alespoň 4 komponenty. Avšak pouze jedna z nich se promítne do uživatelského rozhraní běžící aplikace. Zbylé tři jsou nevizuální a v návrhu zbytečně zabírají místo. Navíc není příliš stylové, když je nutné „zamořit“ formulář řadou nevizuálních komponent potřebných pro připojení k databázi a pro přístup k datům: na formuláři (jakožto představiteli budoucího okna) by ideálně měly být jen komponenty uživatelského rozhraní.

Kam ale ostatní komponenty umístit? Delphi nyní nabízí tzv. datové moduly (Data Modules). Ty se v určitých ohledech podobají formulářům, když vytvoří svou vlastní programovou jednotku (Unit) a třídu. Lze do nich umísťovat komponenty a prvky, které nepotřebujeme zobrazovat uživatelům. Základní odlišností je, že jsou odvozeny přímo od TComponent a nemají tedy žádnou vizuální reprezentaci. Za běhu zkrátka nevytvoří okno. Datový modul je jen jakýmsi elegantním kontejnerem pro další objekty.

Je zřejmé, že při vývoji aplikace, která obsahuje celou řadu „nevizuálních“ komponent, je použití datového modulu doporučeníhodné. Ukážeme si na jednoduchém příkladu, jak datový modul vytvořit (je to nesmírně jednoduché):

1. Vytvořte novou aplikaci (File – New – Application).

2. Na formulář umístěte komponentu ProgressBar (z palety Win32) a Button.

3.Zvolte File – New – Data Module. Prázdný modul je ihned vytvořen (viz následující obrázek):

Klepněte pro větší obrázek

4. Když nyní na tento modul klepnete myší, všimněte si, co se stalo s paletou komponent: vizuální komponenty se skryly a zůstaly jen ty relevantní, tedy nevizuální, které lze umístit do datového modulu.

5. Najděte záložku System a umístěte do datového modulu komponentu Timer.

6. Nyní ošetřete událost OnTimer komponenty Timer:

procedure TDataModule2.Timer1Timer(Sender: TObject);
begin
  Form1.ProgressBar1.Position := Form1.ProgressBar1.Position + 1;
end;

7. Ošetřete událost OnClick tlačítka Button1:

procedure TForm1.Button1Click(Sender: TObject);
begin
  DataModule2.Timer1.Enabled := True;
end;

8. Zkuste aplikaci přeložit a spustit. Objeví se dialog tázající se, zda chcete přidat odkaz na datový modul do sekce Uses hlavního modulu (modulu formuláře). Potvrdíme:

Klepněte pro větší obrázek

9. Zkusíme znovu přeložit. Objeví se podobné hlášení, tentokráte potvrdíme přidání odkazu na formulář do datového modulu.

10. Do třetice přeložíme. Všechno funguje, po klepnutí na tlačítko se rozběhne ProgressBar.

Výhody? Zřejmé: časovač Timer nezabírá místo na formuláři. Jeden Timer by nám samozřejmě nevadil, ale kdyby jich bylo deset, formulář by v návrhu vypadal úplně jinak než za běhu. Do datového modulu lze umístit kromě komponent řadu „podružných“ deklarací a pravidel, sama firma Borland doporučuje využít právě souboru s datovým modulem k umístění nejrůznějších „businnes rules“, které mají být v aplikaci použity.

Umí IDE ještě něco zajímavého?

V souvislosti s databázovými aplikacemi si ukážeme ještě jednu zajímavou vlastnost prostředí Delphi. Kdo z vás již má za sebou návrh nějaké databáze, asi mi dá za pravdu, že při návrhu databáze je velmi důležitá možnost ztvárnit návrh graficky, se zachycením nejrůznějších vazeb mezi prvky návrhu (typicky mezi tabulkami). V Delphi nalézáme možnost velmi jednoduše vytvářet vizuální diagramy, které v době návrhu přinesou velmi přehledné zobrazení vztahů mezi objekty.

Diagram vytvoříte velmi jednoduše tak, že se v návrhové fázi přepnete v Code Editoru na stránku Diagram (záložky Code a Diagram jsou umístěny ve spodní části Code Editoru, bezprostředně nad posuvnou lištou). Na záložce Code je umístěn programový kód, záložka Diagram ukáže (prázdný) diagram. Naplnění dialogu prvky se provede opět velmi snadno přetažením požadovaných objektů z okna Object Tree View, které je umístěno nad Object Inspectorem. Stačí požadovaný objekt „chytit“ myší a přetáhnout do diagramu: vazby budou vytvořeny automaticky.

Abychom si ukázali význam diagramu, připravil jsem jednoduchou databázovou aplikaci. Poté jsem během několika okamžiků přetahal komponenty a získal tak neocenitelný vizuální náhled na strukturu aplikace:

Klepněte pro větší obrázek

Pomiňme nyní, že jsme se o databázích ještě nic nenaučili, a soustřeďme se na obrázek: z diagramu je hned patrné, že na komponentě IBDatabase1 (připojení do databáze Interbase) jsou závislé komponenty IBTransaction1 databázová transakce) a IBTable1 (databázová tabulka KANALY). Na tabulce je dále závislá komponenta DataSource1, která z ní získává data. Konečně komponenta DBGrid, která zobrazuje data na formuláři, získává údaje z datového zdroje DataSource1.

Kromě toho, že zde vidíte význam diagramů, se můžete přesvědčit, jak v praxi vypadají všechny 4 výše popsané vrstvy databázové architektury v Delphi.

Dodejme, že diagramy je možné vytvářet nejen objektů na formuláři, ale též z údajů v datovém modulu. Postup je úplně stejný – objekty se přetahají z Object Tree View.

Do diagramu je možné doplňovat další prvky, typicky komentáře nebo popisky, viz tlačítka nad horním okrajem a vedle levého okraje diagramu.

Na závěr

Tolik pro dnešek k náplni aktuálního dílu. Věřím, že vás toto shrnutí databázových možností a myšlenek v Delphi nenudilo. Jsem si totiž jist, že základem pro kvalitní a jisté programování databází je nutné nejprve pochopit, jakým způsobem jsou vlastně databáze v Delphi myšleny. Pokud pochopíte koncept těchto čtyř, relativně nezávislých databázových vrstev, můžete si být jisti, že se vám brzy začne zdát programování databází v Delphi jako velmi zábavná činnost.

V dalších dílech seriálu se budeme nejprve obecně, a pak i velmi konkrétně zabývat jednotlivými databázovými platformami a možnostmi. Ukážeme si, jak s nimi pracovat v Delphi, čeho se vyvarovat a na co se naopak zaměřit. Věřím, že shledáte toto téma přínosným.

Prosba o pomoc

Na úplný závěr si dovolím přednést prosbu, kterou možná někteří z vás odsoudí jako reklamu. Ujišťuji však všechny, že celá věc má s komercí pramálo společného. Pokud je někdo z vás ochoten pomoci k úspěšné obhajobě mé diplomové práce :-), prosím jej, aby zavítal na adresu www.reminder.cz, kde se pomalu rozbíhá systém, jehož návrh a implementace je součástí mé diplomky. Protože nutnou (bohužel nikoliv postačující :-)) podmínkou úspěšné obhajoby je nasbírání co nejvyššího počtu připomínek, komentářů a požadavků uživatelů, chtěl bych poprosit všechny dobrovolníky o registraci a zaslání stručného hodnocení projektu, včetně případných požadavků na další verzi, která bezpochyby vznikne. Pro zaslání komentáře můžete použít formulář připravený na stránkách, nebo libovolný emailový kontakt přímo na mne. Všem upřímně předem děkuji :-)

Diskuze (6) Další článek: Windows XP: hesla jsou k ničemu

Témata článku: Software, Programování, Uživatelské rozhraní, Úspěšný editor, Díl, Databázová aplikace, Vizuální kontakt, Určitý ohled, Obec, Jednotlivé prvky, Základní prvek, Typický příklad, Delphi, Připravený průvodce, Používané data, Modul, Fragment, Databáze, Hrubý obrys, Speciální komponent, Uživatelská data, Různé požadavky, Základní popis, Komponenta, Jednotlivý díl


Určitě si přečtěte

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

** Total Commander je na Windows takřka legendou ** Licence však stojí více než tisíc korun ** Našli jsme pro vás deset alternativ dostupných zdarma

Karel Kilián | 141

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

** Microsoft představil nový tablet Surface Go ** Nový model zaujme nízkou cenou, ale schopnostmi zařízení Surface ** Microsoft nepoužil čip ARM, ale klasický procesor od Intelu 

Karel Javůrek | 116

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 65

Apple dal do MacBooku procesor Core i9 a 4TB SSD. Ani se neptejte, co za to chce...

Apple dal do MacBooku procesor Core i9 a 4TB SSD. Ani se neptejte, co za to chce...

** Apple aktualizoval notebooky MacBook Pro, dostaly nový hardware ** Těšit se můžete na nové procesory a větší paměť ** Cena nejvybavenějšího modelu překročí 200 tisíc korun

Martin Miksa | 99

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

** Systém Windows 10 umí spoustu užitečných drobností ** O mnoha praktických funkcích pravděpodobně ani nevíte ** Poznejte užitečné tipy, které se vám mohou hodit každý den

Vladislav Kluska | 36


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji