Vytvorenie Win32 klienta MySQL v Delphi

Document Sample
Vytvorenie Win32 klienta MySQL v Delphi Powered By Docstoc
					Vytvorenie Win32 klienta MySQL v Delphi
MySQL ako client-server
Doteraz preberaná problematika bola zameraná na vytvorenie desktopovej databázovej aplikácie,
ktorá dokáže zobrazovať údaje z tabuliek, ktoré boli uložené niekde na lokálnom disku počítača.
Takéto aplikácie sú v prevažnej miere určené pre jedného používateľa.
Už niekoľko rokov prevládajú databázové systémy postavené na architektúre klient – server.
Tieto databázové systémy dokážu bez problémov odpovedať na požiadavky viacerých
používateľov súčasne. Požiadavky používateľov prichádzajú v podobe príkazov jazyka SQL.
Existuje nespočetné množstvo databázových systémov postavených na architektúre C/S.
V cvičeniach bude použitý databázový systém MySQL. Hoci sa tento server veľmi často používa
spolu so skriptovacím jazykom php a webovým serverom Apache, možno sa k nemu pripájať
okrem webového rozhrania aj pomocou Win32 klienta. A práve obsahom nasledujúcich hodín
bude tvorba takéhoto klienta v prostredí Delphi.

Inštalácia MySQL
MySQL možno inštalovať samostatne. Existujú inštalácie pre operačné systémy Windows,
Linux, a iné. Často sa však MySQL inštaluje ako súčasť balíka, určeného pre tvorbu webových
databázových aplikácií. Táto alternatíva bude použitá aj v tomto texte. Populárny balík sa nazýva
XAMPP a možno ho stiahnuť z jeho domovskej stránky www.xampp.de. Výhodou použitia
XAMPP je skutočnosť, že ho stačí rozbaliť v cieľovom adresári, nie je ho potrebné inštalovať
a na rozdiel od iných balíkov nevyužíva register Windows. Po rozbalení XAMPP je potrebné
dvojklikom spustiť xampp-control.exe. Následne treba spustiť MySQL tlačidlom Štart. Ak je
všetko v poriadku, zobrazí sa tlačidle text Running.
Okrem serveru MySQL je potrebné spustiť webový server Apache. Ten sa spustí rovnakým
spôsobom, kliknutím na tlačido Štart. Pre urýchlenie práce spojenej s vytvorením databázy a jej
tabuliek bude využité prostredie aplikácie phpmyadmin, ktoré umožňuje vo forme formulárov
definovať základné štruktúry databázy.
Ak sú spustené MySQL a Apache, možno zadaním adresy localhost v prehliadači zobraziť
webové rozhranie XAMPP. V ňom stačí kliknúť na položku menu phpmyadmin.




Ako prvé je potrebné nastaviť v phpmyadmin správnu znakovú sadu, aby sa vkladané údaje
zobrazovali správne a nedochádzalo k nekorektnému nahradeniu niektorých znakov. Jazyk sa
nastavuje v poli so zoznamom s názvom Language, správna jazyková sada má označenie Slovak
(sk-utf-8) .
Príklad: Vytvorte databázu, ktorá bude evidovať tovar malého obchodu. Evidujte číslo tovaru,
názov tovaru, množstvo, jednotkovú cenu, dátum expirácie a druh.

Po definovaní znakovej sady možno prejsť na vytvorenie databázy. Stačí zadať názov databázy,
pre ktorý platia rovnaké konvencie ako pre názvy premenných, v poli Vytvoriť novú databázu.
Pole so zoznamom Porovnávanie môže zostať bez zmeny.




Po kliknutí na tlačidlo bola vytvorená databáza tovar. Taktiež si možno všimnúť, že SQL príkaz,
ktorý spôsobil vytvorenie databázy má tvar CREATE DATABASE <<<meno_databazy>>>;.
Jednotlivé príkazy jazyka SQL budú obsahom nasledujúcich cvičení. Po vytvorení databázy sa jej
meno zobrazilo aj na ľavej strane okna, ako aj v poli so zoznamom, čo znamená, že všetky ďalšie
príkazy sa budú vykonávať práve v tejto databáze.




                 V ďalšom kroku je potrebné definovať prvú tabuľku databázy. Tento krok
                 pozostáva z definovania názvu tabuľky a zadania počtu jej stĺpcov. V príklade
                 evidencie tovaru sa zatiaľ spomína jedna tabuľka, ktorá sa bude volať
                 sklad_tovaru. Predpokladaný počet stĺpcov je 6. Po kliknutí na tlačidlo sa
                 zobrazí formulár pre definovanie dátových typov a IO jednotlivých atribútov
tabuľky.
Dátových typov má MySQL viac ako napríklad Paradox, ktorý bol súčasťou predchádzajúcich
cvičení. To umožňuje optimalizovať veľkosť výslednej databázy. K základným dátovým typom
patria INT, FLOAT, DATE, VARCHAR, TEXT, BLOB. Podrobnejšie sa o jednotlivých typoch
možno dozvedieť z manuálu.
Pre jednotlivé stĺpce v príklade Tovar boli vybraté nasledujúce dátové typy. Ako primárny kľuč
bol zvolený stĺpec ID – neznamienkový (unsigned) integer s vlastnosťou auto_increment, ktorá sa
definuje v poli Extra.
Názov tovaru (nazov_tovaru) je string s maximálnou dĺžkou 50 znakov. V MySQL sa označuje
ako VARCHAR. Pre tento typ je nevyhnutné definovať jeho veľkosť.
Množstvo (mnozstvo) tovaru je INT, jednotková cena (jednotkova_cena) je FLOAT, aby bolo
možné zachytiť prípadné haliere. Dátum expirácie (datum_expiracie) je typu DATE. Každý tovar
patrí do druhu, ktorý je tiež typu VARCHAR a má dĺžku 30 znakov. Na prípadný podrobný popis
tovaru slúži pole popis s dátovým typom TEXT.
Pre všetky uvedené polia možno nastaviť predvolenú hodnotu a to, či môže obsahovať hodnoty
NULL, tzn., či hodnotu je nutné uvádzať u každej položky.




SQL dotaz, ktorý spôsobí vytvorenie tabuľky je uvedený na obrázku. Obrázok taktiež zobrazuje
štruktúru vytvorenej tabuľky. Všetko, čo možno s tabuľkou robiť, je zhrnuté v horizontálnom
menu. Vytvorená tabuľka je prázdna. Na naplnenie slúži možnosť Vložiť z horizontálneho menu.
Vkladanie údajov do tabuľky by malo byť bezproblémové.
V ďalšom kroku možno konečne prejsť do prostredia Delphi a začať vytvárať klienta, ktorý
načíta databázu tovar.

Komponenty na pripojenie k MySQL
V prostredí Delphi sa otvorí nový projekt. Na formulár form1 sa uložia komponenty ako vidno na
obrázku dole. Toto rozloženie pozostáva z dvoch Panelov, DBGridu, DBNavigatora
a komponentov pre prácu s MySQL.
Na rozdiel od predchádzajúcich cvičení sa zmenil databázový systém, z ktorého má aplikácia
získavať údaje. Na pripojenie k MySQL možno použiť BDE, v kombinácií s ODBC, ale tento
spôsob má za následok celkové spomalenie práce s údajmi.
Výhodnejšou alternatívou je pridať do Delphi komponenty, ktoré sú optimalizované pre prácu
s MySQL.
Komponenty na pripojenie k serveru MySQL si možno stiahnuť z kurzu Programovanie
databázových aplikácií. Po rozbalení v ľubovoľnom adresári kliknete na jediný inštalačný súbor
s názvom MyComponents Setup.msi. Celá inštalácia by mala prebehnúť bez problémov, dôležité
je vybrať správnu verziu komponentov pre danú verziu Delphi.
Po úspešnej inštalácií sa v palete komponentov v IDE Delphi pridá záložka MySQL, ktorá
obsahuje štyri komponenty.




Na zobrazenie údajov v gridoch sa používalo spojenie komponentov Table à DataSource à
DBGrid (alebo nejaký iný komponent s predponou DB). Tento postup umožňuje načítať údaje
z jedinej tabuľky. Často krát je však potrebné zobrazovať súčasne informácie z viacerých
tabuliek, medzi ktorými existuje určitý vzťah. K tomu ale nemožno použiť komponent Table.
Riešením je použiť komponent Query, ktorý k tabuľkám pristupuje pomocou jazyka SQL.
Aj k prípade komponent pre prácu s MySQL je na výber, či sa použije komponent MySQLTable,
ktorý má rovnaké výhody a nevýhody ako klasický Table, alebo sa použije komponent
MySQLQuery, ktorý pracuje s databázou pomocou SQL príkazov.

Vytvorenie spojenia medzi klientom a databázovým serverom MySQL
Na to, aby bolo možné pracovať s údajmi z MySQL v prostredí klientskej aplikácie, je potrebné
zadefinovať parametre spojenia. Niekedy sa parametre spojenia označujú aj ako Connection
String. K základným parametrom, ktoré je nevyhnutné nastaviť patrí:

   •   Host: IP adresa alebo DNS záznam počítača, na ktorom je spustený MySQL
   •   Port: Predvoleným portom – komunikačným kanálom pre klienta MySQL je port 3306.
       Upozornenie: je potrebné zistiť, či daný port je v sieti otvorený.
   •   Login: Prihlasovacie meno, pod ktorým sa dostane používateľ do svojej databázy.
   •   Password: Heslo používateľa databázy. Spolu s loginom a hostom, na ktorom je spustený
       klient, jednoznačne určujú práva používateľa v MySQL.
   •   DatabaseName: Vlastný názov databázy.
   •   LoginPrompt: Nastavenie, či sa pri každom spojení bude vyžadovať opätovné zadanie
       hesla.

V prípade aplikácie, ktorá načítava údaje z databázy tovar, bude postup nastavenia jednotlivých
parametrov nasledovný:




                 MySQLServer1                                    MySQQuery1
Keďže je inštalovaný server MySQL na tom istom počítači ako klient, možno pre vlastnosť Host
komponenty MySQLServer1 zadať adresu Hostu v tvare localhost, prípadne 127.0.0.1. Aj
v tomto prípade sa aplikácia pripája k databázovému systému rovnako, ako keby bol na inom
počítači. Okrem hostu je určení aj port, defaultne je to port 3306. Použitý databázový systém
nemá definované žiadne bezpečnostné opatrenia, je vytvorený iba účet s loginom root, ktorý
nemá heslo. V prípade serióznej práce s MySQL, je potrebné túto bezpečnostnú chybu odstrániť
hneď po inštalácii. Vlastnosť LoginPrompt je nastavená na False, aby nebolo potrebné pri
každom prístupe k údajom cez sieť zadávať heslo.
Komponent MySQL je druhým článkom spojenia. Stačí nastaviť vlastnosť Server na
MySQLServer1, a vlastnosť DatabaseName na meno databázy, v tomto prípade na tovar. Okrem
toho je na rozdiel od použitia komponentu Table potrebné zadať SQL príkaz, ktorý z databázy na
serveri získa požadované údaje. SQL príkaz sa v najjednoduchšom prípade zadáva pomocou
vlastnosti SQL komponentu SQLQuery. Pre načítanie všetkých údajov do DBGridu má tvar:

SELECT * FROM sklad_tovaru ORDER BY nazov_tovaru.




V komponente Datasource sa nastaví vlastnosť Dataset na MySQLQuery1 a v DBGride vlastnosť
DataSource na DataSource1. Po nastavení vlastnosti Active komponentu MySQLQuery1 v kóde
alebo v návrhu by malo byť spojenie nadviazané a DBGrid by mal zobrazovať obsah tabuľky
sklad_tovaru, ktorá je uložená na serveri.