Delphi a MySQL pokračovanie
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Delphi a MySQL pokračovanieDelphi a MySQL pokračovanie

 

Delphi a MySQL pokračovanie

Google       Google       17. 2. 2011       14 300×

V článku si bližšie rozoberieme prácu s MySQL databázou. Tento článok je pokračovaním projektu, ktorý sme začali v článku Delphi a MySQL. Budeme sa zaoberať zobrazovaním údajov v tabuľke, ich filtrovaním a upravovaním, ale nahliadneme aj na prácu s textovými súbormi.

Reklama
Reklama

Stiahneme a otvoríme projekt mysql.dproj (vytvorený v Delphi 2009). Začneme tým, že premenujeme formulár frmDB na frmProfil. Ďalej do projektu vložíme nový formulár (frmDB) a nastavíme ho tak, že sa zobrazí hneď po spustení programu. Urobíme to nasledovne:

  1. zobrazíme nastavenia projektu (Project->Options),
  2. prejdeme do ponuky Forms,
  3. Main form zmeníme na frmDB (viz obrázok 1).

Na formulár umiestnime tieto komponenty (obrázok 2):

  • 2× Panel (pMenu, pGrid)
  • pGrid -> DBGrid (Grid)
  • pMenu -> 2× GroupBox (gbFilter, gbZobrazit)
  • gbFilter -> Button (btnZobraz)
  • gbFilter -> LabeledEdit (leFilter)
  • gbZobrazit -> 5× CheckBox (cbID, cbMeno, cbZameranie, cbPrax)
  • pMenu -> 2× Button (btnUloz, btnKoniec)

V Unit3 (frmDB) od uses pridáme Unit1, Unit2.

Teraz nastavíme jednotlivé komponenty:

Grid
  • DataSource -> dmDB.DataSource
  • Options
    • dgEditing -> false (zakáže editovanie buniek)
    • dgIndicator -> false (nezobrazí ukazovateľa aktuálneho riadku)
    • dgColumnResize -> true (umožní úpravu dĺžky stĺpca)
    • dgColLines -> false (nezobrazí zvislú čiaru medzi stĺpcami v tabuľke)
    • dgRowSelect -> true (bude vyberať po riadkoch, nie po bunkách)
    • dgAlwaysShowSelection -> true (vždy musí byť vybraný jeden riadok)
    • dgMultiselect -> false (zakáže vybratie viacerých riadkov)
  • Columns
    • Klikneme na Add All Fields (obrázok 3),
    • odstránime položky fotka a životopis,
    • položka ID
      • Visible -> False

cbID
  • Checked -> false
cbMeno až cbPrax
  • Checked -> true

Ďalej ošetríme jednotlivé udalosti.

btnZobraz.Click:
var
 priezvisko: string;
begin
priezvisko:=leFilter.Text; //uloží vstup užívateľa do premennej priezvisko
dmDB.SQLQuery.Open; //umožní prácu s SQLQuery
dmDB.SQLQuery.SQL.Clear; //vyčistí príkazového interpreta
if priezvisko <> '' then //ak užívateľ zadá niaky text
//pridá sa SQL príkaz pre vyfiltrovanie do príkazového interpreta
 dmDB.SQLQuery.SQL.Add('SELECT * FROM zamestnanci WHERE priezvisko = "' + priezvisko + '"')
else
 dmDB.SQLQuery.SQL.Add('SELECT * FROM zamestnanci'); //alebo sa pridá príkaz na zobrazenie celého obsahu tabuľky
dmDB.SQLQuery.ExecSQL; //spustí sa zadaný príkaz
dmDB.SQLQuery.Open; //umožní prácu s SQLQuery
dmDB.SQLQuery.Refresh; 
dmDB.dataset.Refresh;
Grid.Refresh;
//urobí refresh datasetu, gridu a SQLQuery
end;

Aby sme zabránili neaktuálnosti dát, budeme každú aktiváciu frmDB data aktualizovať.

frmDB.Activate:
dmDB.SQLQuery.Open;
dmDB.SQLQuery.SQL.Clear; //vyčistí príkazového interpréta
//pridá sa príkaz na zobrazenie celého obsahu tabuľky
dmDB.SQLQuery.SQL.Add('SELECT * FROM zamestnanci'); 
dmDB.SQLQuery.ExecSQL; //spustí sa príkaz
dmDB.SQLQuery.Open;
dmDB.SQLQuery.Refresh;
dmDB.dataset.Open;
dmDB.dataset.Refresh;
Grid.Refresh;
//urobí refresh datasetu, gridu a SQLQuery

Teraz ošetríme udalosť, ktorá vyfiltrovaný obsah uloží do textového súboru s názvom tabulka.txt.

Tabuľka použitých funkcií a vlastností komponenty SQLQuery:
Vlastnosť alebo funkcia Popis
Fields[cislo_stlpca].FieldName Obsahuje názov stĺpca
Fields[cislo_sltpca].AsString Vypíše obsah stĺpca v aktuálnom riadku

Udalosť btnUloz.Click:

var
 subor: TextFile;
 I: Integer;
Begin
//pridelí premennej subor textový subor tabulka.txt, ak neexistuje vytvorí ho
AssignFile(subor, 'tabulka.txt'); 
ReWrite(subor); //otvorí subor pre zapisovanie 
//vloží do súboru zadaný text a zalomí riadok
WriteLn(subor,'-----------------------------------------------------------------------------------'); 
//zapíše do súboru zadaný text, ale riadok nezalomí
Write(subor, dmDB.SQLQuery.Fields[0].FieldName + ' '); 
Write(subor, dmDB.SQLQuery.Fields[1].FieldName + ' ');
Write(subor, dmDB.SQLQuery.Fields[2].FieldName + ' ');
Write(subor, dmDB.SQLQuery.Fields[3].FieldName + ' ');
WriteLn(subor, dmDB.SQLQuery.Fields[4].FieldName + ' ');
WriteLn(subor,'-----------------------------------------------------------------------------------');
I := dmDB.SQLQuery.RecordCount; //do premennej I zapíše počet riadkov v DB
//cyklus postupne vypíše všetky riadky z DB do textového suboru
for I :=  0 to dmDB.SQLQuery.RecordCount -1 do 
 begin
   Write(subor, dmDB.SQLQuery.Fields[0].AsString + ' ');
  Write(subor, dmDB.SQLQuery.Fields[1].AsString + ' ');
  Write(subor, dmDB.SQLQuery.Fields[2].AsString + ' ');
  Write(subor, dmDB.SQLQuery.Fields[3].AsString + ' ');
  WriteLn(subor, dmDB.SQLQuery.Fields[4].AsString + ' ');
  WriteLn(subor, '-----------------------------------------------------------------------------------');
  dmDB.SQLQuery.Next; //posunie sa v tabuľke o riadok ďalej
 end;
CloseFile(subor); //zatvorí subor.txt

Zatvorenie aplikácie (btnKoniec.Click):

Application.Terminate

Teraz si ošetríme skrývanie a zobrazovanie stĺpcov v gride. Ukážeme si to na udalosti cbID.Click, na ostatných CheckBoxoch je princíp ten istý.

if cbID.Checked then //ak je cbID zaškrtnutý
 Grid.Columns[0].Visible:=true //zobrazí stĺpec číslo 0 (v našom prípade ID)
Else //alebo
 Grid.Columns[0].Visible:=false; //schová stĺpec číslo 0

Ďalej si do projektu pridáme nový DataModul (dmUpdate) a umiestnime naň tieto komponenty (obrázok 4):

  • SQLConnection (SQLConnection)
  • SQLQuery (SQLQuery)

Tieto komponenty nastavíme tak isto ako v DataModule dmDB, iba v SQLQuery nezadáme žiadny DataSource. Tento DataModul budeme používať na upravovanie dát. Pridanie nového datamodulu do projektu iba zjednoduší zdrojový kód celého programu, kľudne by vystačil aj datamodul dmDB, ale to by značne znepriehľadnilo zdrojový kód.

Teraz si otvoríme formulár frmProfil a tlačítko btnNext nahradíme tlačítkom btnUprav a pridáme tlačítko btnUloz (obrázok 5).

Znova ošetríme udalosť btnKoniec.Click. Namiesto Application.Terminate dáme:

frmProfil.Close;

Tlačítko btnUloz uloží do textového súboru informácie o zobrazenom zamestnancovi. Tento textový súbor bude mať názov taký istý ako priezvisko zamestnanca a bude sa ukladať do priečinku info. Udalosť btnUloz.Click ošetríme nasledovne:

var
 subor: TextFile;
begin
//priradí súbor s názvom zamestnanca v priečinku info, ak neexistuje vytvorí ho
AssignFile(subor, 'info/' + dmDB.SQLQuery.Fields[1].AsString + '.txt'); 
ReWrite(subor); //otvorí súbor pre zapisovanie
WriteLn(subor, 'ID: ' + dmDB.SQLQuery.Fields[0].AsString);
WriteLn(subor, 'Meno: ' + dmDB.SQLQuery.Fields[1].AsString);
WriteLn(subor, 'Priezvisko: ' + dmDB.SQLQuery.Fields[2].AsString);
WriteLn(subor, 'Zameranie: ' + dmDB.SQLQuery.Fields[3].AsString);
WriteLn(subor, 'Prax: ' + dmDB.SQLQuery.Fields[4].AsString);
WriteLn(subor, '__________________________________________________________________________');
CloseFile(subor);//zatvorí subor

Ďalej vytvoríme nový formulár s názvom frmUprav. Pomocou tohto formulára budeme upravovať profily zamestnancov. Na formulár frmUprav umiestnime nasledujúce komponenty (obrázok 6):

  • 6× LabeledEdit (leMeno, lePriezvisko, lePrax, leZameranie)
  • StaticText (stZivotopis)
  • Memo (mZivotopis)
  • 2× Button (btnUloz, btnKoniec)

Udalosť btnKoniec.Click ošetríme príkazom frmUprav.Close. Do uses v Unite5 pridáme Unit4, Unit1 a Unit2, tiež deklarujeme globálnu premennú id ako string. Predtým ako ošetríme udalosť btnUloz.Click, musime ešte ošetriť btnUprav.Show:

dmDB.SQLQuery.Open;
//načíta do globálnej premennej id, id aktuálneho riadku v DB
id := dmDB.SQLQuery.Fields[0].AsString; 
btnUloz.Click:
dmUpdate.SQLQuery.Open;
dmUpdate.SQLQuery.SQL.Clear;
dmUpdate.SQLQuery.SQL.Add('UPDATE zamestnanci SET meno = "' + leMeno.Text + '", priezvisko = "' + lePriezvisko.Text + '", prax = "' + lePrax.Text + '", zameranie = "' + leZameranie.Text + '", zivotopis = "' + mZivotopis.Lines.Text + '" WHERE id = ' + id);
dmUpdate.SQLQuery.ExecSQL();
frmUprav.Close;

SQL príkaz UPDATE zmení údaje o zamestnancovi v tabuľke. Použijeme pri tom datamodul dmUpdate. Ešte ošetríme udalosť frmUprav.OnClose, aby sa aktualizovali komponenty, ktoré zobrazujú obsah DB:

dmDB.dataset.Open;
dmDB.SQLQuery.Open;
dmDB.SQLQuery.Refresh;
dmDB.dataset.Refresh;
frmProfil.dbMEno.Refresh;
frmProfil.dbPriezvisko.Refresh;
frmProfil.dbPrax.Refresh;
frmProfil.dbZameranie.Refresh;
frmProfil.dbZivotopis.Refresh;

Vrátime sa ešte na frmProfil a ošetríme tam udalosť btnUprav.Click:

frmUprav.Show;

V Unit3 deklarujeme globálnu premennú id ako integer. Ostáva už len posledná udalosť na formulári frmDB, a to Grid.DblClick:

  id := dmDB.dataset.RecNo; //do premennej id uloží číslo aktuálneho riadku
  dmDB.SQLQuery.Open;
  dmDB.SQLQuery.SQL.Clear;
  dmDB.SQLQuery.SQL.Add('SELECT * FROM zamestnanci WHERE id = ' + inttostr(id));
//vyfiltruje z tabuľky informácie iba o zadanom užívateľovi
  dmDB.SQLQuery.ExecSQL();
  dmDB.SQLQuery.Open;
  dmDB.SQLQuery.Refresh;
  frmProfil.Show;

Na záver zdrojový kód celého programu.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

2 názory  —  2 nové  
Hlasování bylo ukončeno    
1 hlas
Google
(fotka) Jakub DubecAutor sa venuje programovaniu v Delphi, PHP a MySQL.
Web     Twitter     Facebook    

Nové články

Obrázek ke článku NEWTON Media prohledá 200  milionů mediálních zpráv během sekund díky Cisco UCS

NEWTON Media prohledá 200 milionů mediálních zpráv během sekund díky Cisco UCS

Česká společnost NEWTON Media provozuje největší archiv mediálních zpráv ve střední a východní Evropě. Mezi její zákazníky patří například ministerstva, evropské instituce nebo komerční firmy z nejrůznějších oborů. NEWTON Media rozesílá svým zákazníkům každý den monitoring médií podle nastavených klíčových slov a nabízí online službu, kde lze vyhledat mediální výstupy v plném znění od roku 1996.

Reklama
Reklama
Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý