Sign in Join
Wiki copytemporary

MySQLDatabases/pl: what changed

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

OldNewLine
11## Wprowadzenie
22
33Ta strona wyjaśnia, jak połączyć się z serwerem bazy danych [[mysql|MySQL]] przy użyciu komponentów wizualnych.
44
55> **Note:** Ta strona została przetłumaczona z wersji angielskiej na język polski w dniu 2021.01.31, ale wersja angielska została napisana dawno temu i może nie być aktualna. Ponadto większość opisanych tutaj koncepcji nie jest specyficznych dla MySQL, ale ma zastosowanie do wszystkich baz danych SQLDB. Dlatego skorzystanie z poniższej serii samouczków SQLdb może być łatwiejsze
66
77Uwaga: zapoznaj się również z samouczkami, które uczą obsługi kontrolek związanych z danymi, zapytań parametrycznych, programowania niezależnego od bazy danych itp .:
88
99- [[SQLdb Tutorial1|SQLdb Samouczek1]]
1010- [[SQLdb Tutorial2|SQLdb Samouczek2]]
1111- [[SQLdb Tutorial3|SQLdb Samouczek3]]
1212
1313Te samouczki są napisane dla wszystkich baz danych obsługujących sqldb, w tym MySQL.
1414
1515W razie potrzeby zobacz również [[mysql|Samouczki SQLDB i przykładowy kod]], aby uzyskać więcej samouczków (które również zostały napisane dawno temu.
1616
1717## Dostępne komponenty
1818
1919### Komponenty SQLdb
2020
2121W każdej, nawet dość niedawnej wersji Lazarusa, komponenty SQLdb są instalowane domyślnie.
2222
23-<figure>
24-<img src="sqldbcomponents2.png‎" title="sqldbcomponents2.png‎" />
25-<figcaption>sqldbcomponents2.png‎</figcaption>
26-</figure>
23+![](/wiki-images/4/4b/Sqldbcomponents2.png%E2%80%8E)
2724
2825W zakładce SQLdb znajdziesz:
2926
3027- Różne złącza (connectors), w tym [[TMySQL40Connection]] .. [[TMySQL57Connection]] (a może nawet nowsze wersje) i najbardziej wszechstronne ze wszystkich [[TSQLConnector]], które mogą ładować dowolne ze sterowników baz danych takich jak mysql/oracle/postgres/mssql/interbase/firebird/odbc.
3128- [[TSQLQuery]]
3229
3330Jeśli brakuje karty SQLdb, zajrzyj do [[Install Packages|Instalowanie pakietów]], aby uzyskać instrukcje dotyczące instalacji.
3431
3532## Wyjaśnienie zastosowanych komponentów
3633
3734### TMySQLConnection
3835
3936TMySQLConnection służy do przechowywania parametrów połączenia z serwerem bazy danych. Umożliwia ustawienie hosta, z którym ma się łączyć, oraz identyfikatora użytkownika i hasła, które mają być używane w połączeniu. Inna właściwość TMySQLConnection służy do wskazania bazy danych, której chcesz użyć. „LoginPrompt” jeszcze nie działa, więc upewnij się, że obok właściwości HostName i DatabaseName uzupełnione są również wartości UserName i Password, zanim spróbujesz otworzyć połączenie. Pamiętaj, że aby użyć również TSQLTransaction i połączyć ją z MySQLConnection, ustaw właściwość Transaction, w przeciwnym razie nie będziesz mógł otworzyć zapytania SQLQuery.
4037
4138> **Note:** Jak wskazano powyżej, istnieją różne komponenty MySQLConnection, które różnią się numerem wersji. Numer wersji **musi** odpowiadać numerowi wersji biblioteki klienta, której używasz do łączenia się z serwerem. Jeśli więc używasz serwera MySQL 5.1, ale używasz klienta MySQL 5.0, użyj TMySQL50Connection.
4239
4340Powinieneś sprawdzić dokumentację MySQL, aby upewnić się, że połączenie między wersją klienta i wersją serwera jest obsługiwane - np. możesz mieć problemy z połączeniem się z serwerem 4.0 przy użyciu klienta 5.x.
4441
4542We wszystkich przypadkach należy umieścić kopię biblioteki libmysql.dll *i wszelkich innych wymaganych plików/bibliotek dll*
4643
4744- w twoim katalogu Lazarus i tym samym katalogu co pliki twojego projektu lub
4845- w katalogu systemowym Windows (jeśli nie chcesz dalej kopiować plików). Zauważ, że w 64-bitowym systemie Windows bibliotekę 32-bitową musisz umieścić w katalogu SysWOW64, podczas gdy biblioteki 64-bitowe należy przenieść do System32.
4946
5047### TSQLTransaction
5148
5249[[TSQLTransaction]] jest potrzebne do niektórych wewnętrznych procedur. SQLTransaction jest automatycznie aktywowana po otwarciu zestawu danych przy jej użyciu. Zamknięcie połączenia również dezaktywuje powiązaną transakcję i zamyka wszystkie korzystające z niej zbiory danych.
5350
5451### TSQLQuery
5552
5653[[TSQLQuery]] służy do wykonywania instrukcji SQL na serwerze. Możesz pobrać dane, ustawiając SQL na jakąś instrukcję SELECT i wywołując metodę Open. Możesz też manipulować danymi, wydając instrukcję INSERT, DELETE lub UPDATE. W tym drugim przypadku nie powinieneś używać metody Open, ale metodę ExecSQL.
5754
5855### TDataSource
5956
6057[[TDataSource]] zapewnia połączenie między widocznymi komponentami obsługującymi dane, takimi jak DBEdit, DBGrid i zbiorem danych. Przygotowuje dane do wyświetlania w komponentach obsługujących te dane. DataSource (źródło danych) może być jednocześnie połączone tylko z jednym zestawem danych, ale do niego może być połączonych kilka komponentów obsługujących dane.
6158
6259### TDBGrid
6360
6461[[TDBGrid]] może służyć do przedstawienia danych pobranych przez Dataset (zbiór danych). DBGrid potrzebuje Datasource (źródła danych), aby połączyć się ze zbirem danych. Gdy zbiór danych zostanie otwarty, DBGrid zostanie automatycznie wypełniony danymi.
6562
6663## Nasz program
6764
6865### Podstawy
6966
7067Spróbujemy stworzyć program w oparciu o ten stworzony [[Lazarus Database Tutorial/nl|tutaj (w języku niderlandzkim)]], który jest oparty na [[Lazarus Database Tutorial|oryginale (w języku angielskim)]] autorstwa Chris.
7168
7269### Formularz główny
7370
7471Użyjemy tego samego ekranu głównego i zbudujemy całą funkcjonalność od podstaw :) Jak zobaczysz, jest tu o wiele mniej do zrobienia, ponieważ komponenty naprawdę rozwiązują wszystkie trudne rzeczy! Zacznijmy więc od stworzenia ekranu, który wygląda tak:
7572
76-<figure>
77-<img src="Trymysql_pl.png" title="Trymysql_pl.png" />
78-<figcaption>Trymysql_pl.png</figcaption>
79-</figure>
73+![](/wiki-images/f/f4/Trymysql_pl.png)
8074
8175Korzystając z zakładki SQLdb umieść na swojej formatce komponenty [[TMySQL56Connection]] ![](/wiki-images/9/97/Tmysql56connection.png) (lub inną wersję klienta mysql), [[TSQLTransaction]] ![](/wiki-images/b/bd/Tsqltransaction.png) i [[TSQLQuery]] ![](/wiki-images/b/bb/Tsqlquery.png). Nie zmieniaj domyślnych nazw nadanych tym komponentom. Z wyjątkiem komponentu łączącego do bazy. Aby artykuł był taki sam dla wszystkich wersji MySQL, nazwij komponent TMySQL##Connection: `MySQLConnection1`. Musimy te komponenty połączyć razem, aby mogły wykonywać swoją pracę. Dlatego należy ustawić następujące właściwości:
8276
8377| | | |
8478|------------------|----------------|------------------|
8579| **Komponent** | **Właściwość** | **Wartość** |
8680| MySQLConnection1 | Transaction | SQLTransaction1 |
8781| SQLTransaction1 | Database | MySQLConnection1 |
8882| SQLQuery1 | Transaction | SQLTransaction1 |
8983| SQLQuery1 | Database | MySQLConnection1 |
9084
9185Właściwość Transaction komponentu SQLQuery1 zostanie ustawiona automatycznie, jeśli najpierw ustawisz właściwość Transaction dla MySQLConnection1. Gdy to ustawisz, zauważysz, że SQLTransaction1.Database została ustawiona na MySQLConnection1.
9286
9387Jak wspomniano wcześniej: upewnij się, że używasz odpowiedniego komponentu połączenia dla swojej wersji serwera MySQL.
9488
9589### Kod
9690
9791Jak widać na zrzucie ekranu, jedynymi przyciskami dostępnymi po uruchomieniu programu są „Połącz z serwerem” i „Zakończ”. Aby inne przyciski działały, potrzebujemy więcej informacji, więc są one wyłączone. Moglibyśmy również zdecydować o wyłączeniu opcji „Połącz z serwerem” do czasu podania informacji o hoście, nazwie użytkownika i haśle. Zdecydowałem się tego nie robić, ponieważ nasz użytkownik mógłby pomyśleć: „Nic nie wydaje się możliwe, więc przejdźmy do wyjścia”. :)
9892
9993Zanim zacznę podawać jakikolwiek kod, chciałbym podkreślić, że w kodzie powinna być dodana obsługa wyjątków. Sekcje krytyczne należy umieścić w blokach kodu
10094
10195`try ... finally`
10296
10397i / lub
10498
10599`try ... except`
106100
107101#### Połączenie z serwerem
108102
109103Pierwszą rzeczą, którą musimy zrobić, jest połączenie się z naszym serwerem. Ponieważ przy łączeniu nie wiemy, jakie bazy danych są dostępne na serwerze, przy połączeniu poprosimy o listę baz danych. Jest jednak jeden haczyk, aby nawiązać połączenie, musimy wprowadzić poprawną nazwę bazy danych we właściwościach MySQLConnection. W kodzie zobaczysz, że używam bazy danych „mysql”. Ta baza danych jest używana przez mysql do pewnych czynności porządkowych, więc zawsze tam będzie.
110104
111105``` pascal
112106procedure TFormTryMySQL.ConnectButtonClick(Sender: TObject);
113107begin
114108 // Sprawdź, czy mamy aktywne połączenie. Jeśli tak, musimy je zamknąć.
115109 if MySQLConnection1.Connected then CloseConnection(Sender);
116110 // Ustaw parametry połączenia.
117111 MySQLConnection1.HostName := HostEdit.Text;
118112 MySQLConnection1.UserName := UserEdit.Text;
119113 MySQLConnection1.Password := PasswdEdit.Text;
120114 MySQLConnection1.DatabaseName := 'mysql'; // Baza mysql jest zawsze dostępna!
121115 ShowString('Otwarcie połączenia z serwerem: ' + HostEdit.Text);
122116 MySQLConnection1.Open;
123117 // Najpierw pobierzmy listę dostępnych baz danych.
124118 if MySQLConnection1.Connected then begin
125119 ShowString('Połączono z serwerem: ' + HostEdit.Text);
126120 ShowString('Pobieranie listy dostępnych baz danych.');
127121 SQLQuery1.SQL.Text := 'show databases';
128122 SQLQuery1.Open;
129123 while not SQLQuery1.EOF do begin
130124 DatabaseComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
131125 SQLQuery1.Next;
132126 end;
133127 SQLQuery1.Close;
134128 ShowString('Lista otrzymanych baz danych!');
135129 end;
136130end;
137131```
138132
139133Pierwszą rzeczą, jaką robimy, jest sprawdzenie, czy jesteśmy połączeni z serwerem, jeśli tak, wywołujemy prywatną metodę „CloseConnection”. W tej metodzie robi się więcej porządków. jak wyłączanie przycisków i czyszczenie comboboxów i listbox. Następnie ustawiamy niezbędne parametry, aby połączyć się z serwerem.
140134
141135
142136*W całym naszym programie możesz zobaczyć wywołania ShowString. Ta metoda dodaje wiersz do notatki w naszym formularzu, który działa jak rodzaj dziennika.*
143137
144138Po ustawieniu parametrów możemy połączyć się z serwerem. Odbywa się to przez wywołanie
145139
146140``` pascal
147141MySQLConnection1.Open;
148142```
149143
150144W odpowiedniej aplikacji można by to umieścić w konstrukcji obsługi wyjątków, aby przedstawić użytkownikowi przyjazny komunikat w przypadku niepowodzenia połączenia. Kiedy jesteśmy połączeni, chcemy uzyskać listę baz danych z serwera. Aby uzyskać dane z serwera, używane jest zapytanie TSQLQuery. Właściwość SQL służy do przechowywania instrukcji SQL wysyłanej do serwera. MySQL zna polecenie „SHOW DATABASES”, aby uzyskać listę baz danych. Więc po ustawieniu tekstu SQL wywołujemy
151145
152146``` pascal
153147SQLQuery1.Open;
154148```
155149
156150W MySQL5 ustaw to, aby poprawić błąd ze składnią SQL:
157151
158152``` pascal
159153SQLQuery1.ParseSQL := False;
160154SQLQuery1.ReadOnly := True;
161155```
162156
163157Zestaw wyników SQLQuery można sprawdzić za pomocą właściwości fields. Jak widać, przeglądamy wszystkie zapisy, wywołując
164158
165159``` pascal
166160SQLQuery1.Next;
167161```
168162
169163Kiedy dodamy wszystkie dostępne bazy danych do naszego combobox, ponownie zamykamy SQLQuery.
170164
171165#### Wybieranie bazy danych
172166
173167Jeśli użytkownik wybierze bazę danych w DatabaseComboBox, włączamy przycisk „Wybierz bazę danych”. W zdarzeniu OnClick tego przycisku ustawiamy DatabaseName MySQLConnection1 i żądamy listy tabel. Ostatnia instrukcja tej procedury włącza przycisk „Otwórz zapytanie”, dzięki czemu użytkownik może wprowadzić zapytanie w polu edycji „Polecenie” i wysłać je na serwer.
174168
175169``` pascal
176170procedure TFormTryMySQL.SelectDBButtonClick(Sender: TObject);
177171begin
178172 // Baza danych została wybrana, więc pobierzmy z niej tabele.
179173 CloseConnection(Sender);
180174 if DatabaseComboBox.ItemIndex <> -1 then begin
181175 with DatabaseComboBox do
182176 MySQLConnection1.DatabaseName := Items[ItemIndex];
183177 ShowString('Pobieranie listy tabel');
184178 SQLQuery1.SQL.Text := 'SHOW TABLES';
185179 SQLQuery1.Open;
186180 while not SQLQuery1.EOF do begin
187181 TableComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
188182 SQLQuery1.Next;
189183 end;
190184 SQLQuery1.Close;
191185 ShowString('Lista otrzymanych tabel');
192186 end;
193187 OpenQueryButton.Enabled := True;
194188end;
195189```
196190
197191MySQL ma specjalne polecenie do pobierania listy tabel, porównywalne do pobierania listy baz danych, „SHOW TABLES”. Wynik tego zapytania jest obsługiwany w taki sam sposób, jak lista baz danych, a wszystkie tabele są dodawane do TableComboBox. Możesz się zastanawiać, dlaczego nie otwieramy ponownie połączenia przed otwarciem zapytania? Cóż, odbywa się to automatycznie (jeśli to konieczne), gdy aktywujemy SQLQuery.
198192
199193#### Pola w tabeli
200194
201195W MySQL możesz ponownie użyć formy „SHOW”, aby pobrać pola w tabeli. W tym przypadku „SHOW COLUMNS FROM \<nazwa tabeli\>”. Jeśli użytkownik wybierze tabelę z TableComboBox, wyzwalane jest zdarzenie OnChangeEvent tego ComboBox, które wypełnia pole FieldListbox.
202196
203197``` pascal
204198procedure TFormTryMySQL.TableComboBoxChange(Sender: TObject);
205199begin
206200 FieldListBox.Clear;
207201 SQLQuery1.SQL.Text := 'SHOW COLUMNS FROM ' + TableComboBox.Text;
208202 SQLQuery1.Open;
209203 while not SQLQuery1.EOF do begin
210204 FieldListBox.Items.Add(SQLQuery1.Fields[0].AsString);
211205 SQLQuery1.Next;
212206 end;
213207 SQLQuery1.Close;
214208end;
215209```
216210
217211Oprócz nazw pól, zestaw wyników zawiera informacje o typie pola, jeśli pole jest kluczem, czy dozwolone są wartości null i nie tylko.
218212
219213#### Wyświetlanie danych
220214
221215Tak jak powiedzieliśmy, użyjemy komponentów do połączenia się z bazą danych, użyjmy również niektórych komponentów, aby pokazać dane. W drugim formularzu pokażemy siatkę z danymi żądanymi przez użytkownika. Formularz ten zostanie wyświetlony, gdy użytkownik wpisze polecenie SQL w polu edycji „Polecenie”, a następnie kliknie przycisk „Otwórz zapytanie”. To jest zdarzenie OnClick:
222216
223217``` pascal
224218procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
225219begin
226220 ShowQueryForm := TShowQueryForm.Create(self);
227221 ShowQueryForm.Datasource1.DataSet := SQLQuery1;
228222 SQLQuery1.SQL.Text := CommandEdit.Text;
229223 SQLQuery1.Open;
230224 ShowQueryForm.ShowModal;
231225 ShowQueryForm.Free;
232226 SQLQuery1.Close;
233227end;
234228```
235229
236230ShowQueryForm wygląda następująco:
237231
238-<center>
239-
240-<figure>
241-<img src="Mysqlshow_pl.png" title="Mysqlshow_pl.png" />
242-<figcaption>Mysqlshow_pl.png</figcaption>
243-</figure>
244-
245-</center>
232+![](/wiki-images/a/aa/Mysqlshow_pl.png)
246233
247234i zawiera
248235
249236| | | |
250237|----|----|----|
251238| [[TPanel]] | Align | alBottom |
252239| [[TDataSource]] | | |
253240| [[TDBGrid]] | Align | alClient |
254241| | DataSource | DataSource1 |
255242| [[TButton]] | Caption | Close |
256243
257244Przycisk umieszczony jest na panelu. Kolejność działań w OnClick przycisku „Otwórz zapytanie” jest następująca. Najpierw tworzymy wystąpienie TShowQueryForm. Po drugie ustawiliśmy właściwość DataSet źródła danych na nasz SQLQuery1. Następnie ustawiamy polecenie SQLQuery SQL na to, co użytkownik wpisał w polu edycji „Polecenie” i otwieramy je. Następnie ShowQueryForm jest pokazywany modalnie, co oznacza, że ​​będzie się na nim koncentrował, dopóki nie zostanie zamknięty. Po zamknięciu „zwalniamy” go i ponownie zamykamy SQLQuery1.
258245
259246Formularz można dodatkowo ulepszyć poprzez wstawienie metody modyfikowania zawartości [[TDataSet]] i ostatecznie DataBase. Pełną wersję można pobrać z <http://digitus.itk.ppke.hu/~janma/lazarus/MySql5Test.tar.gz> (dzięki Arwen i JZombi z Lazarus MySQL Forum) ale istotne szczegóły są następujące:
260247
261248Dodaj przycisk u dołu formularza ShowQuery o nazwie AddButton i podpisem „Dodaj”. Utwórz metodę dla AddButtonClick w następujący sposób:
262249
263250``` pascal
264251procedure TShowQueryForm.AddButtonClick(Sender: TObject);
265252begin
266253 DataSource1.DataSet.Append;
267254end;
268255```
269256
270257Zmień kod dla OpenQueryButtonClick, aby umożliwić aktualizacje bazy danych po zakończeniu pracy z formularzem zapytania.
271258
272259``` pascal
273260procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
274261begin
275262 ShowQueryForm := TShowQueryForm.Create(nil);
276263 try
277264 ShowQueryForm.DataSource1.DataSet := SQLQuery1;
278265 // Będziemy pisać w bazie danych, więc ustawmy ReadOnly na false,
279266 // a do tego musimy ustawić ParseSQL na true
280267 SQLQuery1.ParseSQL:=true;
281268 SQLQuery1.ReadOnly:=false;
282269 SQLQuery1.SQL.Text := CommandEdit.Text;
283270 SQLQuery1.Open;
284271 ShowQueryForm.ShowModal;
285272 finally
286273 // ustaw tryb aktualizacji i zaktualizuj bazę danych
287274 SQLQuery1.UpdateMode:=upWhereChanged;
288275 SQLQuery1.ApplyUpdates;
289276 SQLTransaction1.Commit;
290277 ShowQueryForm.Free;
291278 SQLQuery1.Close;
292279 // ustaw ReadOnly i ParsesSQL z powrotem na domyślne
293280 SQLQuery1.ParseSQL:=false;
294281 SQLQuery1.ReadOnly:=true;
295282 end;
296283end;
297284```
298285
299286Możemy teraz dodawać rekordy do bazy danych. Jeśli dodamy TDBNavigator do formularza ShowQuery, możemy łatwiej poruszać się po siatce danych i edytować rekordy; baza danych jest aktualizowana o nasze zmiany za każdym razem, gdy zamykamy formularz ShowQuery i możemy to przetestować, otwierając go ponownie w celu sprawdzenia bazy danych.
300287
301288Jeśli chcesz mieć możliwość USUWANIA lub w inny sposób modyfikowania rekordów w oryginalnej bazie danych (tj. trzeba upewnić się, że zmiany wprowadzone w lokalnym zestawie danych zostaną zatwierdzone z powrotem w bazie danych), musisz mieć jedną kolumnę w tabeli bazy danych, która jest kluczem podstawowym autoincremented, ponieważ metoda 'delete' wymaga możliwości wygenerowania klauzuli 'where' podczas zapisywania instrukcji z powrotem do bazy danych, aby zidentyfikować rekordy wybrane do usunięcia. Użyj więc następującego kodu w swoim kliencie MySQL (wszystko może być wpisane w jednej linii, ale dla przejrzystości dodano podziały linii):
302289
303290``` sql
304291ALTER TABLE TRESTRIG
305292ADD COLUMN AUTOID INT
306293PRIMARY KEY AUTO_INCREMENT;
307294```
308295
309296a wtedy zauważysz, że przycisk Usuń w nawigatorze działa.
310297
311298## Źródła
312299
313300Oryginalne źródła tego projektu można pobrać [tutaj](http://prdownloads.sourceforge.net/lazarus-ccr/mysql_demo_20050408.tar.gz?download). Aby uzyskać więcej projektów demonstracyjnych, zobacz [sourceforge](http://sourceforge.net/project/showfiles.php?group_id=92177&package_id=148359).
314301
315302> **Note:** Projekty te powstały w latach 2004-2009 i nie były aktualizowane. Bez kilku poprawek mogą nie kompilować się w obecnym Lazarus 2.0.10.
316303
317304## Zobacz także
318305
319306- [[mysql]]
320307
321308---
322309*From the Free Pascal wiki, page "MySQLDatabases/pl", as it stood on 2021-11-12 after a change by Slawek, 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