Image
18.5.2016 0 Comments

Databázy II / 9.časť

Späť na úvod >> Späť na seriál

Keďže aj v tejto časti sa budeme venovať skôr „delfistom“, tak pre ostatných „maj-es-que-el-ákov“ aspoň jedna dobrá správa:
Niekoľko testerov vykonalo porovnania MySQL verzie 4 beta s verziou 3.23.xy. Keďže sa priznali, že práve nefandia MySQL, ich hodnotenie považujem za nenadnesené, a tak môžem povedať, že ma ich výsledky priam nadchli.
Takže: MySQL ver. 4 beta je zatiaľ pri malom počte záznamov asi dvakrát pomalšia ako verzia 3.23.xy. Rýchlosť sa prejaví až pri veľmi veľkých počtoch záznamov. Dá sa však predpokladať, že sa to podarí doriešiť do vypustenia ostrej verzie. Veľmi potešujúce je, že sub-selekty [vnorené selekty = select (select.....)] fungujú veľmi dobre. A teraz to najdôležitejšie: Transakcie, ktoré doteraz MySQL nepodporovala a ktoré jej mnohí odporcovia vytýkali a v tejto verzii sú už implementované, pracujú veľmi spoľahlivo! To skutočne povyšuje MySQL na úroveň veľkých databáz, kde sú pomerne citlivé dáta (hlavne finančné operácie, zásoby, sklady, elektronický obchod a pod.).
My ako skúsení databázisti už nájdeme pre MySQL 4.x to správne uplatnenie! Už sa teším na ostrú verziu... Vráťme sa však k nášmu projektu. V ňom dokážeme veľmi pekne prezerať dáta v určitej tabuľke, konkrétne KNIHA, ale nevedeli sme ich zatiaľ doplniť alebo zmeniť.
Teraz si upravíme aplikáciu z predošlej časti seriálu tak, že ju rozšírime o možnosť pridávať záznamy.

ZJEDNODUŠENIE OBSAHU TABUĽKY. Už na počiatku našej práce s MySQL sme vytvorili tabuľku KNIHA, ktorá má túto štruktúru:

CREATE TABLE `kniha` (
`id` int(11) NOT NULL auto_increment,
`nazov` varchar(40),
`autor` varchar(30),
`vydavatel` varchar(25),
`cis_odd` int(11),
`cena` decimal(5,2),
`poznamka` varchar(25),
PRIMARY KEY  (`id`)
)

Tentoraz na ilustráciu budeme využívať iba tieto stĺpce:

  • id
  • nazov
  • autor
  • vydavatel
  • cena

Ostatné stĺpce zostanú nevyplnené.
Vieme, že stĺpec id má autoinkrementačnú vlastnosť, takže ho nemusíme zadávať, stačí, ak v príkaze INSERT necháme prázdne miesto, SQL server doplní číslo sám. (Spomeňme si na to, keď sme preberali autoinkrementáciu!)
Aby sme mohli dopĺňať ostatné 4 položky, musíme v našej aplikácii použiť editačné polia.

Úprava formulára
Komponent Form1 typu TForm  upravíme tak, že doplníme tieto komponenty:

  • Edit1, Edit2, Edit3, Edit4 typu TEdit, ktorý umožňuje zadávanie textu do prázdnej kolónky, s ktorými budeme ďalej pracovať. Tieto komponenty nájdeme na záložke Standard
  • Button1 typu TButton zo záložky Standard, ktorú budeme používať na zápis editovaných dát do tabuľky na SQL serveri
  • Label1, Label2, Label3, Label4, Label5 a Label6 typu TLabel zo záložky Standard; tie použijeme na opis jednotlivých editačných polí

Zároveň upravíme formulár tak, aby sme aspoň trochu ergonomicky rozmiestnili všetky vizuálne komponenty nového projektu. Jedno z možných riešení je na obr.č.18-1:

ÚPRAVA JEDNOTLIVÝCH KOMPONENTOV. Teraz pristúpime k úprave jednotlivých komponentov:
Editačné polia Edit1, Edit2 a Edit3 upravíme v Object Inspectore tak, že vlastnosť Text zostane prázdna (obr. 2):

Obr. 1

Komponent Edit4 upravíme tak, že do vlastnosti Text v Object Inspectore vpíšeme text „0.00“. Tým naznačíme používateľovi, že v tomto okne sa očakáva zadávanie peňažnej hodnoty.
Pristúpime k úprave komponentu Label1. V Object Inspectore vo vlastnosti Caption napíšeme text „Názov“ (obr.č.18-3).
Všimnime si, že sa takto zmenil aj komponent. Podobným spôsobom upravíme aj ostatné komponenty Label2, Label3Label4, ktorým Caption zmeníme na „Autor“, „Vydavateľ“ a „Cena“.
Label5 použijeme ako nadpis „Sem zadajte údaje o novej knihe:“ a upravíme ho obdobným spôsobom. Aby sme dosiahli zmenu písma, klikneme v Object Inspectore najprv na vlastnosť +Font. Tu sa objaví malé tlačidlo s tromi bodkami, na ktoré opätovne klikneme. Vtedy sa zobrazí štandardné windowsovské okno na úpravu písma (obr.č.18-4):

Obdobným spôsobom upravíme komponent Label6, ktorý vytvorí text „Obsah tabuľky KNIHA:

Obr. 2

 

Obr. 3

Na záver upravíme komponent Button1. Jeho úprava je veľmi podobná úprave komponentov Label. Stačí, ak v okne Object Inspectora zmeníme vlastnosť Caption na &Ulož“. Ako zdatní delfisti vieme, že znak „&“ (ampersand) znamená, že za ním nasledujúce písmeno bude tzv. horúci kláves. V našom prípade kombinácia Alt-U spôsobí to isté ako kliknutie myšou na tlačidlo Ulož. Len pre úplnosť: horúce klávesy sa poznajú podľa podčiarkovníka pod písmenom (napr. U).
Vizuálnu úpravu by sme mali za sebou. Tá závisí od estetického cítenia programátora, prípadne požiadaviek budúceho používateľa. Podstatne dôležitejšia je funkčná úprava.
Teraz nastavíme v komponente Database1 vlastnosť Connected na True a v komponente Query1 vlastnosť Active na True. Vyplníme správne prihlasovacie okno a uvidíme v mriežke skutočné dáta. (Toto sme si vysvetlili minule.)
Ak teraz skompilujeme náš projekt, uvidíme viac vizuálnych komponentov. Môžeme skúsiť vyplniť editačné polia podobne ako na obrázku 5. Ak teraz stlačíme tlačidlo Ulož, nič sa nevykoná a jeho funkčnosť ostáva nezmenená, teda rovnaká ako v predošlej časti seriálu. Prečo? Nestačí do projektu pridať pár komponentov, musíme ešte zabezpečiť, aby sa po stlačení tlačidla vykonala určitá činnosť.
ÚPRAVA ČINNOSTI TLAČIDLA ULOŽ. Keď v Borland Delphi klikneme na určitý komponent, otvorí sa okno zdrojového kódu projektu, napr. unit1.pas.
Automaticky sa zabezpečí, že sa pridá nová procedúra. Procedúra má meno formulára a komponentu v ňom, na ktorý sme klikli. V našom prípade sa objaví okno s touto procedúrou:

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

Telo procedúry ostáva voľné. A práve v tejto chvíli nastáva úloha pre programátora, aby sem vpísal zdrojový kód, čo má tlačidlo po jeho stlačení vykonať.
[A tu je to miesto, kde už funkcie negeneruje Delphi, ale ich vytvára človek. Podľa toho, aký kód napíše, sa hodnotí kvalita výsledného produktu. Treba mať na pamäti, že existuje mnoho ciest, ktoré vedú k rovnakému cieľu a o žiadnej rutine (= funkčná čiastočka kódu) nemožno povedať, že je jedine správna a najlepšia.]
Aby sme mohli napísať funkčnú rutinu, musíme si najprv rozmyslieť, čo má také kliknutie na tlačidlo, a teda konkrétna procedúra vykonať.
Poďme sa na to pozrieť najprv logicky:

a)   na tlačidlo Ulož klikáme až po vyplnení editačných polí
b)   treba vyčítať vyplnené texty editačných polí
c)   vyčítané texty uložíme do premenných
d)   dáta z premenných zašleme pomocou SQL príkazu na SQL server
e)   novo vytvorené dáta zobrazíme v mriežke v aplikácii
f)    celá aplikácia sa pripraví na príjem nových dát

Teraz sa pokúsme na to pozrieť z pohľadu SQL:

a)   na vytvorenie SQL príkazu použijeme komponent Query
b)   na dopĺňanie záznamov sa používa SQL príkaz INSERT
c)   musíme použiť parametre na prenos dát z editačných polí do príkazu INSERT
d)   vykonáme SQL príkaz
e)   po uložení dát na SQL serveri na zobrazenie použijeme ďalší SQL príkaz SELECT

Keď sme už rozobrali návrhy z týchto pohľadov, vytvoríme telo procedúry TForm1.Button1Click.
Z metodického hľadiska uvediem presný zdrojový kód tejto procedúry, ktorý si postupne rozoberieme.
Výpis celej procedúry je:

procedure TForm1.Button1Click(Sender: TObject);
begin
   Query1.Close;
   Query1.SQL.Clear;
   Query1.SQL.Add('insert into kniha(id, nazov, autor, vydavatel, cena) values('''', :nazov, :autor,      :vydavatel, :cena)');

   Query1.ParamByName('nazov').AsString := Edit1.Text;
   Query1.ParamByName('autor').AsString := Edit2.Text;
   Query1.ParamByName('vydavatel').AsString := Edit3.Text;
   Query1.ParamByName('cena').AsString := Edit4.Text;

   Query1.ExecSQL;

   Query1.SQL.Clear;
   Query1.SQL.Add('select * from kniha');
   Query1.Open;

   Query1.Last;

   Edit1.Text:= '';
   Edit2.Text:= '';
   Edit3.Text:= '';
   Edit4.Text:= '0.00';

end;

Obr. 4

 

Obr. 5

ROZBOR PROCEDÚRY. Celá procedúra vychádza z obidvoch spomenutých hľadísk. Zároveň rešpektuje pravidlá programovacieho jazyka produktu Borland Delphi. Všimnime si, že sa skladá z niekoľkých častí. Zámerne som ich oddelil medzerami, ktoré, samozrejme, nemajú vplyv na výsledný kód. Poďme si ich rozobrať riadok po riadku:

Obr. 6

Query1.Close – táto metóda (method) nastaví vlastnosť (property) Active na False. Tým uzavrie dátový zdroj. Pred každou manipuláciou s dátovým zdrojom ho treba uzavrieť.
Query1.SQL.Clear – táto vlastnosť komponentu Query vyčistí zoznam SQL príkazov zviazaných s týmto komponentom.
Query1.SQL.Add('insert into kniha(id, nazov, autor, vydavatel, cena) values('''', :nazov, :autor,      :vydavatel, :cena)') – táto funkcia pridá do vyčisteného zoznamu reťazec, ktorý obsahuje SQL príkaz INSERT INTO.
My už tento príkaz dobre poznáme a vieme, na čo slúži. Všimnime si však malé rozdiely oproti tomu, čo sme sa naučili. Zatiaľ sme pracovali s príkazmi SQL tak, že sme v časti values zadávali skutočné – reálne hodnoty, ktoré sa potom uložili v tabuľke.

Ako príklad uvediem:
INSERT INTO kniha(id, nazov, autor, vydavatel, cena) values('''', ‘Linux - internet server’, ‘Satrapa P.’, Neokortex’,’450.00’)

V našej aplikácii sa však skutoèné hodnoty nebudú zadávať priamo v SQL príkaze, ale ich budeme vpisovať do editaèných polí, skadiaľ ich chceme preniesť do SQL príkazu. Je jasné, že budú zakaždým inakšie, preto ich nemôžeme napísať do SQL príkazu „natvrdo“.
Preto sa v časti values nachádzajú tzv. parametre. Je to obdoba premenných. Tie označujeme dvojbodkou pred menom parametra. Obsah tohto parametra sa naplní v ďalšej časti procedúry. A len na zopakovanie: prázdne úvodzovky na prvej pozícii values znamenajú, aby sám SQL server doplnil hodnotu položky id podľa autoinkrementačných pravidiel.

Query1.ParamByName('nazov').AsString := Edit1.Text;
Query1.ParamByName('autor').AsString := Edit2.Text;
Query1.ParamByName('vydavatel').AsString := Edit3.Text;
Query1.ParamByName('cena').AsString := Edit4.Text;

Obr. 7

Metóda ParamByName komponentu Query spôsobí nastavenie parametra s konkrétnym menom. Táto metóda je veľmi vhodná na napĺňanie parametrov v tzv. runtime režime, teda za behu programu, nie pri jeho preklade.
Môžeme jednoducho povedať:
Parameter nazov sa naplní textovou hodnotou, ktorá sa rovná textu v editačnom poli komponentu Edit1.
Identicky to funguje aj v ostatných riadkoch.
Čo to znamená?
Keď sme vyplnili editačné polia na formulári, tie sa uložili do parametrov nazov, autor, vydavatel, cena.
Keďže sa mená týchto parametrov zhodujú s menami parametrov príkazu INSERT INTO v časti values (pozor – dvojbodka nie je súčasť mena parametra, len jeho označenie – je to špecifikum Delphi, v iných programovacích jazykoch to môže byť inak!), pri zavolaní tohto SQL príkazu sa obsahy parametrov rovnajú.
Query1.ExecSQL – zavolanie tejto procedúry spôsobí vykonanie SQL príkazu. Najprv sa parametre SQL príkazu naplnia hodnotami parametrov z metódy ParamByName a zároveň sa vykoná.
Teda v tomto našom príklade sa parametre časti values príkazu INSERT INTO naplnia textami komponentov Edit1Edit4.

Príkaz sa vykoná. Na SQL serveri sa uloží nový záznam s takými položkami, rovnajúcimi sa obsahom editačných polí formulára.
Query1.SQL.Clear – znova vyčistíme zoznam SQL príkazov.
Query1.SQL.Add('select * from kniha') – tentoraz naplníme zoznam príkazom SELECT * FROM kniha.
Query1.Open – táto procedúra je rovnaká ako ExecSQL, len pre SQL príkazy SQL, ktoré vracajú hodnotu, je vhodnejšie použiť Open. Spôsobí spustenie zadaného SQL príkazu. V našom príklade SQL server vráti výpis tabuľky KNIHA, ktorý sa zobrazí v komponente DBGrid1.

Obr. 8

Obr. 9

Query1.Last – táto procedúra nastaví kurzor na posledný záznam tabuľky. V našom prípade sme to urobili preto, aby sme vždy po doplnení záznamu a následnom stlačení tlačidla Ulož uvideli v mriežke novo pridaný záznam.
Edit1.Text:= '';
Edit2.Text:= '';
Edit3.Text:= '';

Tieto procedúry spôsobia vyprázdnenie editačných polí, aby sa pripravili na zadávanie nového záznamu.
Edit4.Text:= '0.00' – nastaví textovú hodnotu na tvar zápisu finančnej hodnoty.

Takto sme sa dopracovali ku koncu procedúry TForm1.Button1Click. Ak sme uvedený zdrojový kód vpísali do súboru patriaceho k nášmu projektu (u mňa je to unit1.pas, ale vy si ho môžete, samozrejme, premenovať), znovu skompilujeme náš projekt.
Spusťme projekt. Vyplňme správne meno a heslo loginového okna. Objaví sa formulár našej aplikácie tak, že kurzor v okne mriežky ukazuje na prvý záznam a všetky editačné polia okrem Ceny sú prázdne (obr. 6).
Prerolujme mriežkou a všimneme si, že sa údaje, ktoré sme zadávali na obr. č. 18-5, do tabuľky neuložili. To preto, lebo sme vtedy ešte nemali nadefinovanú činnosť tlačidla Ulož. Teraz presuňme kurzor na posledný záznam v tabuľke (obr. 7). Vidíme, že má poradové číslo 15. (Ak sa dobre pozriete na obrázok, uvidíte, že čísla id nejdú postupne za sebou. Prečo? Spomeňme si, čo sme si hovorili o autoinkrementácii!)
Teraz znovu vyplníme editačné polia a kliknime na tlačidlo Ulož (obr. 8).
Čo sa stalo? Editačné okná sa vyprázdnili, kurzor v mriežke sa posunul nižšie a objavil sa nový záznam, ktorého položky sú zhodné s tými, čo sme zadávali. Môžeme ukončiť činnosť aplikácie kliknutím na tlačidlo Koniec.
Aby sme sa presvedčili, že nové dáta sú skutočne zapísané na strane SQL servera, môžeme použiť ľubovoľný prostriedok na spojenie s SQL serverom a pozrieť sa na obsah tabuľky KNIHA inak, teda nie cez našu aplikáciu napísanú v Delphi. Ja používam výborný MySQL-Front (obr. 9).
(Všimnime si, že položky cis_oddpoznamka nie sú vyplnené. Je to tým, že sme nedefinovali ich vypĺňanie na ploche formulára.)
Isto vás napadne, že táto aplikácia je už pomerne dokonalá, nedokáže však záznamy mazať, prípadne opravovať nejaké preklepy a pod. Takisto by asi bolo výborné, keby sa číslo oddelenia nemuselo dopisovať, ale dalo by sa vybrať z prednastavených možností.
Úpravy aplikácie na tieto potreby by boli veľmi podobné tým, aké sme robili. Iba by sa zmenili SQL príkazy. Ak chcete, môžete si to urobiť za domácu úlohu. Ak to zvládnete, a ja verím, že áno, dostanete plnohodnotnú aplikáciu a ste pri cieli. Nie všetkým z nás vyhovuje spojenie pomocou ODBC. Nie na každom počítači je nainštalované alebo chodí bez problémov. Preto je v takýchto prípadoch vhodnejšie opustiť ODBC a ísť priamou cestou s využitím API. To dosiahneme pomocou iných komponentov v Delphi.

To vysvetlíme nabudúce. Zdrojové kódy príkladu z tohto pokračovania, ako aj spomenutý program z obr. 9 si môžete stiahnuť z mojej webovej stránky www.mior.host.sk.

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá