Sign in Join
Wiki copytemporary

MySQLDatabases/sk: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Úvod
22
33V článku [[Lazarus Database Tutorial|Database tutorial]] sme videli prvý pokus na spojenie s MySQL serverom. V tejto chvíli sme nepoužili žiadne komponenty, ani vizuálne, ani nevizuálne. Táto stránka si kladie za cieľ vysvetliť pripojenie k MySQL serveru (snáď) jednoduchším spôsobom.
44
55## Dostupné komponenty
66
77### SQLdb komponenty
88
99Iná možnosť je inštalácia balíčka umiestneného v adresári \$Lazarus/components/sqldb. Tu môžete vidieť balík nazvaný sqldblaz.lpk. Potrbeujete nainštalovať tento balíček a mysql4connlaz.lpk z adresára \$Lazarus/components/sqldb/mysql. Prvý z nich obsahuje niekoľko všeobecných komponentov vhodných pre všetky databázy. Sú to komponenty TSQLTransaction a TSQLQuery a môžete ich nájsť na novom tabe nazvanom SQLdb. Po inštalácii mysql4connlaz.lpk uvidíte v tomto tabe taktiež ďalší komponent nazvaný TMySQLConnection (s nakresleným delfínom).
1010
1111Pokiaľ nemôžete nájsť adresár \$Lazarus/components/sqldb/mysql a balík mysql4connlaz.lpk, znamená to, že používate novšiu verziu, v ktorej je mysql4connlaz.lpk spojený s sqldblaz.lpk. je to v poriadku, keď nainštalujete sqldblaz.lpk, získate všetky spomenuté komponenty v jednom tabe lišty komponentov.
1212
1313Pokiaľ neviete, ako nainštalovať komponenty/balíčky, pozrite sa na túto [[Install Packages|stránku]], kde nájdete "Inštalačné Howto". Nakoľko sú SQLdb všeobecné a môžu byť tak použité aj s inými dtaabázami jednoduchým vymenením TMySQLCOnnection za inštanciu TIBConnection, vyvinieme si program používajúci SQLdb komponenty.
1414
1515## Popis použitých komponentov
1616
1717### TMySQLConnection
1818
1919TMySQLConnection sa používa na uloženie parametrov potrebných na pripojenie k databázovému serveru. Umožňuje nastaviť host, užívateľa a heslo, ktoré sa majú použiť pri pripájaní. Iná vlastnosť TMySQLConnection označuje databázu, ktorú chcete použiť. 'LoginPrompt' v súčasnosti nie je funkčný, takže sa pred pripájaním ka serveru uistite, že názov stroja vo vlasnosti 'HostName' spolu s užívateľským menom ('UserName') a heslom ('Password') pre databázu určenú vo vlastnosti 'DatabaseName' majú správne hodnoty. Taktiež sa uistite, že máte nastavenú TSQLTransaction a pripojte ju do vašej MySQLConnection (cez vlastnosť 'Transaction'), inak nebudete môcť otvoriť SQLQuery.
2020
2121Poznámka. V poslednej SVN verzii Lazara nájdete 3 komponenty MySQLConnection. Sú to: TMySQL40Connection, TMySQL41Connection a TMySQL50Connection. Používajte správnu verziu na pripájanie k vášmu MySQl serveru. Čiže ak máte MySQL 4.1, použite TMySQL41Connection.
2222
2323### TSQLTransaction
2424
2525SQLTransaction sa používa pre určité vnútorné housekeeping. SQLTransaction je automaticky aktivovaná, keď otvoríte dataset, ktorý ju používa. Uzatvorenie spojenie taktiež deaktivuje príslušné transakcie a uzatvorí všetky datasety, ktoré ich využívali.
2626
2727### TSQLQuery
2828
2929TSQLQuery sa požíva na vykonávanie SQL dotazov na server. Môžete získavať dáta nastavením vlastnosti SQL na nejaký príkaz SELECT a zavoalním metódy Open. Pri použití príkazu INSERT, DELETE alebo UPDATE môžete s dátami manipulovať. V poslednom prípade by ste nemali používať metódu Open,a le namiesto nej metódu ExecSQL.
3030
3131### TDataSource
3232
3333Datasource je akýmsi mostom poskytujúcim spojenie medzi viditeľnými komponentami ako sú DBEdit, DBGrid atď. a datasetom. Umožňuje týmto komponentom zobrazovať dáta získané databázy. Datasource môže byť v jednej chvíli pripojený iba k jedinému datasetu, avšak samotný datasource môže byť využívaný viacerými komponentami na prácu s dátami.
3434
3535### TDBGrid
3636
3737DBGrid môže byť použitý na prezentovanie dát získaných od datasetu. DBGrid sa k datasetu pripája cez datasource. Keď je dataset otvorená, DBgrid bude automaticky zobrazovať údaje z databázy.
3838
3939## Náš program
4040
4141### Základy
4242
4343Pokúsime sa vytvoriť program, ktorý je založený na jednom už urobenom [[Lazarus Database Tutorial/nl|tu (holandsky)]] a ten bol postavený na základoch [[Lazarus Database Tutorial|iného (anglicky)]] od Chrisa.
4444
4545### Hlavný formulár
4646
4747Použijeme rovnaké hlavné okno a celú funkcionalitu postavím kompletne od nuly :) Ako uvidíte, budem s tým mať o mnoho menej roboty, pretože komponenty skutočne za nás urobia všetku ťažkú prácu! Takže, začnime vytvorením okna ako je toto:\
4848![](/wiki-images/2/28/Trymysql.png)\
4949Z tabu SQLdb umiestnite na formulár TMySQLConnection, TSQLTransaction a TSQLQuery ![](/wiki-images/6/6d/Components.png). Nemeňte default mená týchto komponentov. Okrem Connection komponentu. Aby bol tento článok rovnaký pre všetky verzie MySQL, pomenujte váš MySQL??Connection komponent: MySQLConnection1. Teraz musíme tieto komponenty prepojiť, aby mohli robiť svoju prácu. Musia byť nastavené nasledujúce vlastnosti:
5050
5151| | | |
5252|------------------|--------------|------------------|
5353| **Component** | **Property** | **Value** |
5454| MySQLConnection1 | Transaction | SQLTransaction1 |
5555| SQLTransaction1 | Database | MySQLConnection1 |
5656| SQLQuery1 | Database | MySQLConnection1 |
5757| SQLQuery1 | Transaction | SQLTransaction1 |
5858
5959Vlastnosť Transaction pre SQLQuery1 bude nastavená automaticky, ak ste už predtým nastavili vlastnosť Transaction pre MySQLConnection1. Keď tak urobíte, všimnite si, že SQLTransaction1.Database bola nastavená na MySQLConnection1.
6060
6161Ako som povedal skôr: uistite sa, že používate správny komponent na pripájanie k vašej verzii MySQL servera.
6262
6363### Kód
6464
6565Ako môžete vidieť na obrázku, jediné prístupné tlačidlá po štarte programu sú "Connect to server" ("Pripojiť k serveru") a "Exit" ("Koniec"). Aby boli sprístupnené aj ostatné tlačidlá, potrebujeme viac informácií, takže nateraz nie je umožnené na ne klikať. Mohli by sme sa tiež rozhodnúť zneprístupniť aj tlačidlo "Connect to server", pokiaľ neboli dané informácie o hoste, užívateľovi a hesle. Ale to som sa rozhodol nerobiť, nakoľko náš užívateľ si môže pomyslieť: "Nič tu nefunguje, tak stlačím "exit" :-)
6666
6767Predtým, ako Vám ukážem nejaký kód, rád by som zdôraznil, že v kóde by sa malo viac manipulovať s výnimkami. Kritické sekcie by mali byť umiestnené v konštrukciách:
6868
6969`try ... finally`
7070
7171alebo
7272
7373`try ... except`
7474
7575#### Pripojenie k serveru
7676
7777Prvá vec, ktorú by sme maliurobiť, je spojiť sa so serverom. Keďže pri pripájaní nevieme, aké databázy sú na serveri, vypýtame si pri pripájaní zoznam databáz. Je tu však jeden háčik. Aby sme sa mohli pripojiť, vlastnosť DatabaseName komponentu MySQLConnection musí obsahovať platné meno databázy. V kóde uvidíte, že ja používam databázu nazvanú "mysql". Túto databázu používa mysql server pre riadenie svojej činnosti (napríklad obsahuje tabuľky definujúce prístupové práva jednotlivých užívateľov), takže sa na serveri určite nachádza.
7878
7979`procedure TFormTryMySQL.ConnectButtonClick(Sender: TObject);`\
8080`begin`\
8181`  // Overíme si, či máme aktívne pripojenie. Ak áno, zavrieme ho.`\
8282`  if MySQLConnection1.Connected then CloseConnection(Sender);`\
8383`  // Nastavíme parametre pre pripojenie`\
8484`  MySQLConnection1.HostName := HostEdit.Text;`\
8585`  MySQLConnection1.UserName := UserEdit.Text;`\
8686`  MySQLConnection1.Password := PasswdEdit.Text;`\
8787`  MySQLConnection1.DatabaseName := 'mysql'; // Táto databáza sa na serveri nachádza vždy!`\
8888`  ShowString('Opening a connection to server: ' + HostEdit.Text);`\
8989`  MySQLConnection1.Open;`\
9090`  // Najskôr získame zoznam dostupných databáz`\
9191`  if MySQLConnection1.Connected then begin`\
9292`    ShowString('Connected to server: ' + HostEdit.Text);`\
9393`    ShowString('Retrieving list of available databases.');`\
9494`    SQLQuery1.SQL.Text := 'show databases';`\
9595`    SQLQuery1.Open;`\
9696`    while not SQLQuery1.EOF do begin`\
9797`      DatabaseComboBox.Items.Add(SQLQuery1.Fields[0].AsString);`\
9898`      SQLQuery1.Next;`\
9999`    end;`\
100100`    SQLQuery1.Close;`\
101101`    ShowString('List of databases received!');`\
102102`  end;`\
103103`end;`
104104
105105Prvú vec, ktorú robíme, je overenie, či sme pripojení k serveru. Ak áno, zavoláme privátnu metódu "CloseConnection". Táto metóda vykoná určité potrebné "udržiavacie práce", ako zneprístupnenie tlačidiel, vyčistenie comboboxov a listboxov. Potom nastavíme nevyhnutné parametre na pripojenie k serveru.
106106
107107
108108*V našom programe môžete vidieť metódu ShowString. Táto pridáva do mema v našom formulári riadok, ktorý slúži ako log.*
109109
110110S nastavenými parametrami sa môžeme pripojiť na server. Urobíme to volaním:
111111
112112`MySQLConnection1.Open;`
113113
114114V skutočnej aplikácii by každý správny programátor umiestnil do bloku so správou výnimiek, aby prípadne mohol užívateľovi vypísať nejaké pekné chybové správy o zlyhaní pripojenia. Keď sme už pripojení, radi by sme získali zoznam dostupných databáz na serveri. Na získavanie dát od servera sa používa TSQLQuery. Do vlastnosti SQL sa vloží dotaz odosielaný na server. MySQL používa príkaz "SHOW DATABASES" na zobrazenie zoznamu databáz. Takže, keď sme nastavili SQL.text, zavoláme:
115115
116116`SQLQuery1.Open;`
117117
118118V pripade, ze pouzivame MySQL5 je nutno mit nastaveno, jinak program vraci hlasku se spatnou syntaxi:
119119
120120`SQLQuery1.ParseSQL:=false; SQLQuery1.ReadOnly:=true;`
121121
122122K výsledku získanom pomocou SQLQuery môžeme pristupovať pomocou jeho vlastnosti fields. Ako vidíte, cezjednotlivé záznamy iterujeme volaním
123123
124124`SQLQuery1.Next;`
125125
126126Keď sme už pridali všetky dostupné databázy docomboboxu, opäť zatvoríme SQLQuery.
127127
128128#### Výber databázy
129129
130130Ak užívateľ vyberie databázu v DatabaseComboBox-e, sprístupníme tlačidlo "Select Database" ("Vybrať databázu"). V udalosti OnClick tohto tlačidla nastavíme pre MySQLConnection1 vlasnosť DatabaseName a vyžiadame si zoznam tabuliek vo vybranej databáze. Posledný príkaz tejto procedúry sprístupnňuje tlačidlo "Open Query" ("Vykonať dotaz"), takže užívateľ bude môcť poslať serveru svoj dotaz,ktorý zapíše do "Command" Editbox-u.
131131
132132`procedure TFormTryMySQL.SelectDBButtonClick(Sender: TObject);`\
133133`begin`\
134134`  // Databáza bola vybraná, pozrime sa na jej tabuľky`\
135135`  CloseConnection(Sender);`\
136136`  if DatabaseComboBox.ItemIndex <> -1 then begin`\
137137`    with DatabaseComboBox do`\
138138`      MySQLConnection1.DatabaseName := Items[ItemIndex];`\
139139`    ShowString('Retreiving list of tables');`\
140140`    SQLQuery1.SQL.Text := 'show tables';`\
141141`    SQLQuery1.Open;`\
142142`    while not SQLQuery1.EOF do begin`\
143143`      TableComboBox.Items.Add(SQLQuery1.Fields[0].AsString);`\
144144`      SQLQuery1.Next;`\
145145`    end;`\
146146`    SQLQuery1.Close;`\
147147`    ShowString('List of tables received');`\
148148`  end;`\
149149`  OpenQueryButton.Enabled := True;`\
150150`end;`
151151
152152MySQL má špeciálny príkaz "show tables", pomocou ktorého získava zoznam tabuliek v databáze. K výsledkom tohto dotazu sa pristupuje podobne, ako pri získavaní zoznamu databáz a všetky tabuľky sú pridané do TableComboBox-u. Môžno sa čudujete, prečo sme opať neotvorili spojenie pred samotným otváraním query. Toto sa totiž urobí automaticky (pokiaľ je to nevyhnutné) vždy, keď aktivujete SQLQuery.
153153
154154#### Polia v tabuľke
155155
156156V MySQL môžete použiť príkaz "SHOW" aj na získanie polí v tabuľke a to príkazom v tvare: "SHOW COLUMNS FROM \<meno_tabuľky\>". Keď užívateľ vyberie tabuľku z TableComboBox-u, spustíme obsluhu udalosti OnChange tohto ComboBox-u a v nej vyplníme FieldListbox.
157157
158158`procedure TFormTryMySQL.TableComboBoxChange(Sender: TObject);`\
159159`begin`\
160160`  FieldListBox.Clear;`\
161161`  SQLQuery1.SQL.Text := 'show columns from ' + TableComboBox.Text;`\
162162`  SQLQuery1.Open;`\
163163`  while not SQLQuery1.EOF do begin`\
164164`    FieldListBox.Items.Add(SQLQuery1.Fields[0].AsString);`\
165165`    SQLQuery1.Next;`\
166166`  end;`\
167167`  SQLQuery1.Close;`\
168168`end;`
169169
170170Okrem mena poľa obsahuje výsledok aj informácie o type poľa, či je na poli definovaný kľúč, či sú dovolené hodnoty NULL a podobne.
171171
172172#### Zobrazovanie dát
173173
174174Už sme is hovorili o použití komponentov na pripojenie k databázovému serveru, teraz si ukážeme, ako použiť komponenty na zobrazenie dát. Na zobrazenie grid-u s dátami, ktoré si vyžiadal používateľ, použijeme druhý formulár. Tento formulár sa zobrazí, keď užívateľ napíše sql príkaz do "Command" editobox-u a následne klikne na tlačidlo "OpenQuery". Takto vyzerá obsluha udalosti OnClick:
175175
176176`procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);`\
177177`begin`\
178178`  ShowQueryForm := TShowQueryForm.Create(self);`\
179179`  ShowQueryForm.Datasource1.DataSet := SQLQuery1;`\
180180`  SQLQuery1.SQL.Text := CommandEdit.Text;`\
181181`  SQLQuery1.Open;`\
182182`  ShowQueryForm.ShowModal;`\
183183`  ShowQueryForm.Free;`\
184184`  SQLQuery1.Close;`\
185185`end;`
186186
187187Formulár ShowQueryForm vyzerá takto::
188188
189-<center>
190-
191-<figure>
192-<img src="Mysqlshow.png" title="Mysqlshow.png" />
193-<figcaption>Mysqlshow.png</figcaption>
194-</figure>
195-
196-</center>
189+![](/wiki-images/4/47/Mysqlshow.png)
197190
198191a obsahuje
199192
200193| | | |
201194|-------------|------------|-------------|
202195| TPanel | Align | alBottom |
203196| TDataSource | | |
204197| TDBGrid | Align | alClient |
205198| | DataSource | DataSource1 |
206199| TButton | Caption | Close |
207200
208201Tlačidlo je umiestnené na paneli. Čo sa stane pri kliknutí na "OpenQuery", je toto: Najskôr vytvoríme inštanciu TShowQueryForm. Nastavíme vlastnosť DataSet nášho DataSource na SQLQuery1. Potom nastavíme príkaz pre SQLQuery podľa toho, čo zadal užívateľ do editbox-u "Command" a vykonáme ho (metóda Open). Modálne zobrazíme ShowQueryForm (modálne znamená, že ako jediné okno z naše aplikácie bude mať fokus). Keď sa okno zavrie, tak uvoľníme ho uvoľníme (metóda "free") a zavrieme SQLQuery1.
209202
210203## Zdrojové kódy
211204
212205Zdrojové kódy tohto projektu si môžete stiahnuť [tu](http://prdownloads.sourceforge.net/lazarus-ccr/mysql_demo_20050408.tar.gz?download) Ak chcete vidieť viac demonštračných príkladov, navštívte [sourceforge](http://sourceforge.net/project/showfiles.php?group_id=92177&package_id=148359)
213206
214207---
215208*From the Free Pascal wiki, page "MySQLDatabases/sk", as it stood on 2009-04-06 after a change by Swen, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history