Sign in Join
Wiki copytemporary

MySQLDatabases/pl: what changed

Revision 3 to 4. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1+---
2+[[Portal:Databases|**Portal bazy danych**]]
3+Bibliografia: · [[Databases|Informacje ogólne]] · [[Database libraries|Biblioteki]] · [[Database field type|Typy pól]] · [[Data Controls tab|Kontrolki]] · [[Lazarus DB Faq|FAQ]] · [[SqlDBHowto|SQL-instrukcje]] · [[Working With TSQLQuery|Praca z TSQLQuery]] · [[How to write in-memory database applications in Lazarus/FPC|Aplikacje bazodanowe w pamięci]] · Poradniki/porady praktyczne: · [[Lazarus Database Overview|Przegląd]] · [[SQLdb Tutorial0|0 - Konfiguracja bazy danych]] · [[SQLdb Tutorial1|1 - Rozpoczęcie pracy]] · [[SQLdb Tutorial2|2 - Edycja]] · [[SQLdb Tutorial3|3 - Zapytania]] · [[SQLdb Tutorial4|4 - Moduły danych]] · [[SQLdb Programming Reference|Informacje o programowaniu]] · Bazy danych · [[Advantage Database Server|Advantage]] \- MySQL \- [[mssqlconn/pl|MS SQL]] \- [[postgres|Postgres]] \- [[Firebird|Interbase]] \- [[Firebird]] \- [[Oracle]] \- [[ODBCConn|ODBC]] \- [[TParadox|Paradox]] \- [[SQLite/pl|SQLite]] \- [[Lazarus Tdbf Tutorial|dBASE]] \- [[MS Access]] \- [[Zeos tutorial|Zeos]]
4+
5+
16## Wprowadzenie
27
3-Ta strona wyjaśnia, jak połączyć się z serwerem bazy danych [[mysql|MySQL]] przy użyciu komponentów wizualnych.
8+Ta strona wyjaśnia, jak połączyć się z serwerem bazy danych [[mysql|MySQL]] przy użyciu komponentów wizualnych.
49
5-> **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
10+![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Uwaga:** 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
611
7-Uwaga: 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 .:
12+Uwaga: 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 .:
813
9-- [[SQLdb Tutorial1|SQLdb Samouczek1]]
10-- [[SQLdb Tutorial2|SQLdb Samouczek2]]
11-- [[SQLdb Tutorial3|SQLdb Samouczek3]]
14+ * [[SQLdb Tutorial1|SQLdb Samouczek1]]
15+ * [[SQLdb Tutorial2|SQLdb Samouczek2]]
16+ * [[SQLdb Tutorial3|SQLdb Samouczek3]]
1217
13-Te samouczki są napisane dla wszystkich baz danych obsługujących sqldb, w tym MySQL.
18+Te samouczki są napisane dla wszystkich baz danych obsługujących sqldb, w tym MySQL.
1419
15-W 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.
20+W 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.
1621
1722## Dostępne komponenty
1823
1924### Komponenty SQLdb
2025
21-W każdej, nawet dość niedawnej wersji Lazarusa, komponenty SQLdb są instalowane domyślnie.
26+W każdej, nawet dość niedawnej wersji Lazarusa, komponenty SQLdb są instalowane domyślnie.
2227
23-![](/wiki-images/4/4b/Sqldbcomponents2.png%E2%80%8E)
28+[![sqldbcomponents2.png](/wiki-images/a/ae/sqldbcomponents2.png)](</File:sqldbcomponents2.png>)
2429
25-W zakładce SQLdb znajdziesz:
30+W zakładce SQLdb znajdziesz:
2631
27-- 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.
28-- [[TSQLQuery]]
32+ * 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.
33+ * [[TSQLQuery]]
2934
30-Jeśli brakuje karty SQLdb, zajrzyj do [[Install Packages|Instalowanie pakietów]], aby uzyskać instrukcje dotyczące instalacji.
35+Jeśli brakuje karty SQLdb, zajrzyj do [[Install Packages|Instalowanie pakietów]], aby uzyskać instrukcje dotyczące instalacji.
3136
3237## Wyjaśnienie zastosowanych komponentów
3338
3439### TMySQLConnection
3540
36-TMySQLConnection 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.
41+TMySQLConnection 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.
3742
38-> **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.
43+![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Uwaga:** 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.
3944
40-Powinieneś 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.
45+Powinieneś 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.
4146
42-We wszystkich przypadkach należy umieścić kopię biblioteki libmysql.dll *i wszelkich innych wymaganych plików/bibliotek dll*
47+We wszystkich przypadkach należy umieścić kopię biblioteki libmysql.dll _i wszelkich innych wymaganych plików/bibliotek dll_
4348
44-- w twoim katalogu Lazarus i tym samym katalogu co pliki twojego projektu lub
45-- 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.
49+ * w twoim katalogu Lazarus i tym samym katalogu co pliki twojego projektu lub
50+ * 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.
4651
4752### TSQLTransaction
4853
49-[[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.
54+[[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.
5055
5156### TSQLQuery
5257
53-[[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.
58+[[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.
5459
5560### TDataSource
5661
57-[[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.
62+[[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.
5863
5964### TDBGrid
6065
61-[[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.
66+[[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.
6267
6368## Nasz program
6469
6570### Podstawy
6671
67-Spró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.
72+Spró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](</User:Kirkpatc> "User:Kirkpatc").
6873
6974### Formularz główny
7075
71-Uż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:
72-
73-![](/wiki-images/f/f4/Trymysql_pl.png)
76+Uż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:
7477
75-Korzystają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:
78+[![Trymysql pl.png](/wiki-images/f/f4/Trymysql_pl.png)](</File:Trymysql_pl.png>)
7679
77-| | | |
78-|------------------|----------------|------------------|
79-| **Komponent** | **Właściwość** | **Wartość** |
80-| MySQLConnection1 | Transaction | SQLTransaction1 |
81-| SQLTransaction1 | Database | MySQLConnection1 |
82-| SQLQuery1 | Transaction | SQLTransaction1 |
83-| SQLQuery1 | Database | MySQLConnection1 |
80+Korzystając z zakładki SQLdb umieść na swojej formatce komponenty [[TMySQL56Connection]] [![tmysql56connection.png](/wiki-images/7/76/tmysql56connection.png)](</File:tmysql56connection.png>) (lub inną wersję klienta mysql), [[TSQLTransaction]] [![tsqltransaction.png](/wiki-images/f/fd/tsqltransaction.png)](</File:tsqltransaction.png>) i [[TSQLQuery]] [![tsqlquery.png](/wiki-images/b/be/tsqlquery.png)](</File: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:
8481
85-Wł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.
82+**Komponent** | **Właściwość** | **Wartość**
83+---|---|---
84+MySQLConnection1 | Transaction | SQLTransaction1
85+SQLTransaction1 | Database | MySQLConnection1
86+SQLQuery1 | Transaction | SQLTransaction1
87+SQLQuery1 | Database | MySQLConnection1
88+
89+Wł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.
8690
87-Jak wspomniano wcześniej: upewnij się, że używasz odpowiedniego komponentu połączenia dla swojej wersji serwera MySQL.
91+Jak wspomniano wcześniej: upewnij się, że używasz odpowiedniego komponentu połączenia dla swojej wersji serwera MySQL.
8892
8993### Kod
9094
91-Jak 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”. :)
92-
93-Zanim 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
95+Jak 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”. :)
9496
95-```text
97+Zanim 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
98+```
9699try ... finally
97100```
98101
99-i / lub
100-
101-```text
102+i / lub
103+```
102104try ... except
103105```
104106
105107#### Połączenie z serwerem
106108
107-Pierwszą 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.
108-
109-``` pascal
109+Pierwszą 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.
110+```
110111procedure TFormTryMySQL.ConnectButtonClick(Sender: TObject);
111-begin
112- // Sprawdź, czy mamy aktywne połączenie. Jeśli tak, musimy je zamknąć.
113- if MySQLConnection1.Connected then CloseConnection(Sender);
114- // Ustaw parametry połączenia.
115- MySQLConnection1.HostName := HostEdit.Text;
116- MySQLConnection1.UserName := UserEdit.Text;
117- MySQLConnection1.Password := PasswdEdit.Text;
118- MySQLConnection1.DatabaseName := 'mysql'; // Baza mysql jest zawsze dostępna!
119- ShowString('Otwarcie połączenia z serwerem: ' + HostEdit.Text);
120- MySQLConnection1.Open;
121- // Najpierw pobierzmy listę dostępnych baz danych.
122- if MySQLConnection1.Connected then begin
123- ShowString('Połączono z serwerem: ' + HostEdit.Text);
124- ShowString('Pobieranie listy dostępnych baz danych.');
125- SQLQuery1.SQL.Text := 'show databases';
126- SQLQuery1.Open;
127- while not SQLQuery1.EOF do begin
128- DatabaseComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
129- SQLQuery1.Next;
112+ begin
113+ // Sprawdź, czy mamy aktywne połączenie. Jeśli tak, musimy je zamknąć.
114+ if MySQLConnection1.Connected then CloseConnection(Sender);
115+ // Ustaw parametry połączenia.
116+ MySQLConnection1.HostName := HostEdit.Text;
117+ MySQLConnection1.UserName := UserEdit.Text;
118+ MySQLConnection1.Password := PasswdEdit.Text;
119+ MySQLConnection1.DatabaseName := 'mysql'; // Baza mysql jest zawsze dostępna!
120+ ShowString('Otwarcie połączenia z serwerem: ' + HostEdit.Text);
121+ MySQLConnection1.Open;
122+ // Najpierw pobierzmy listę dostępnych baz danych.
123+ if MySQLConnection1.Connected then begin
124+ ShowString('Połączono z serwerem: ' + HostEdit.Text);
125+ ShowString('Pobieranie listy dostępnych baz danych.');
126+ SQLQuery1.SQL.Text := 'show databases';
127+ SQLQuery1.Open;
128+ while not SQLQuery1.EOF do begin
129+ DatabaseComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
130+ SQLQuery1.Next;
131+ end;
132+ SQLQuery1.Close;
133+ ShowString('Lista otrzymanych baz danych!');
134+ end;
130135 end;
131- SQLQuery1.Close;
132- ShowString('Lista otrzymanych baz danych!');
133- end;
134-end;
135136```
136137
137-Pierwszą 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.
138-
139-
140-*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.*
138+Pierwszą 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.
141139
142-Po ustawieniu parametrów możemy połączyć się z serwerem. Odbywa się to przez wywołanie
140+_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._
143141
144-``` pascal
142+Po ustawieniu parametrów możemy połączyć się z serwerem. Odbywa się to przez wywołanie
143+```
145144MySQLConnection1.Open;
146145```
147146
148-W 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
149-
150-``` pascal
147+W 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
148+```
151149SQLQuery1.Open;
152150```
153151
154-W MySQL5 ustaw to, aby poprawić błąd ze składnią SQL:
155-
156-``` pascal
152+W MySQL5 ustaw to, aby poprawić błąd ze składnią SQL:
153+```
157154SQLQuery1.ParseSQL := False;
158-SQLQuery1.ReadOnly := True;
155+ SQLQuery1.ReadOnly := True;
159156```
160157
161-Zestaw wyników SQLQuery można sprawdzić za pomocą właściwości fields. Jak widać, przeglądamy wszystkie zapisy, wywołując
162-
163-``` pascal
158+Zestaw wyników SQLQuery można sprawdzić za pomocą właściwości fields. Jak widać, przeglądamy wszystkie zapisy, wywołując
159+```
164160SQLQuery1.Next;
165161```
166162
167-Kiedy dodamy wszystkie dostępne bazy danych do naszego combobox, ponownie zamykamy SQLQuery.
163+Kiedy dodamy wszystkie dostępne bazy danych do naszego combobox, ponownie zamykamy SQLQuery.
168164
169165#### Wybieranie bazy danych
170166
171-Jeś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.
172-
173-``` pascal
167+Jeś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.
168+```
174169procedure TFormTryMySQL.SelectDBButtonClick(Sender: TObject);
175-begin
176- // Baza danych została wybrana, więc pobierzmy z niej tabele.
177- CloseConnection(Sender);
178- if DatabaseComboBox.ItemIndex <> -1 then begin
179- with DatabaseComboBox do
180- MySQLConnection1.DatabaseName := Items[ItemIndex];
181- ShowString('Pobieranie listy tabel');
182- SQLQuery1.SQL.Text := 'SHOW TABLES';
183- SQLQuery1.Open;
184- while not SQLQuery1.EOF do begin
185- TableComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
186- SQLQuery1.Next;
170+ begin
171+ // Baza danych została wybrana, więc pobierzmy z niej tabele.
172+ CloseConnection(Sender);
173+ if DatabaseComboBox.ItemIndex <> -1 then begin
174+ with DatabaseComboBox do
175+ MySQLConnection1.DatabaseName := Items[ItemIndex];
176+ ShowString('Pobieranie listy tabel');
177+ SQLQuery1.SQL.Text := 'SHOW TABLES';
178+ SQLQuery1.Open;
179+ while not SQLQuery1.EOF do begin
180+ TableComboBox.Items.Add(SQLQuery1.Fields[0].AsString);
181+ SQLQuery1.Next;
182+ end;
183+ SQLQuery1.Close;
184+ ShowString('Lista otrzymanych tabel');
185+ end;
186+ OpenQueryButton.Enabled := True;
187187 end;
188- SQLQuery1.Close;
189- ShowString('Lista otrzymanych tabel');
190- end;
191- OpenQueryButton.Enabled := True;
192-end;
193188```
194189
195-MySQL 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.
190+MySQL 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.
196191
197192#### Pola w tabeli
198193
199-W 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.
200-
201-``` pascal
194+W 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.
195+```
202196procedure TFormTryMySQL.TableComboBoxChange(Sender: TObject);
203-begin
204- FieldListBox.Clear;
205- SQLQuery1.SQL.Text := 'SHOW COLUMNS FROM ' + TableComboBox.Text;
206- SQLQuery1.Open;
207- while not SQLQuery1.EOF do begin
208- FieldListBox.Items.Add(SQLQuery1.Fields[0].AsString);
209- SQLQuery1.Next;
210- end;
211- SQLQuery1.Close;
212-end;
197+ begin
198+ FieldListBox.Clear;
199+ SQLQuery1.SQL.Text := 'SHOW COLUMNS FROM ' + TableComboBox.Text;
200+ SQLQuery1.Open;
201+ while not SQLQuery1.EOF do begin
202+ FieldListBox.Items.Add(SQLQuery1.Fields[0].AsString);
203+ SQLQuery1.Next;
204+ end;
205+ SQLQuery1.Close;
206+ end;
213207```
214208
215-Opró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.
209+Opró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.
216210
217211#### Wyświetlanie danych
218212
219-Tak 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:
220-
221-``` pascal
213+Tak 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:
214+```
222215procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
223-begin
224- ShowQueryForm := TShowQueryForm.Create(self);
225- ShowQueryForm.Datasource1.DataSet := SQLQuery1;
226- SQLQuery1.SQL.Text := CommandEdit.Text;
227- SQLQuery1.Open;
228- ShowQueryForm.ShowModal;
229- ShowQueryForm.Free;
230- SQLQuery1.Close;
231-end;
216+ begin
217+ ShowQueryForm := TShowQueryForm.Create(self);
218+ ShowQueryForm.Datasource1.DataSet := SQLQuery1;
219+ SQLQuery1.SQL.Text := CommandEdit.Text;
220+ SQLQuery1.Open;
221+ ShowQueryForm.ShowModal;
222+ ShowQueryForm.Free;
223+ SQLQuery1.Close;
224+ end;
232225```
233226
234-ShowQueryForm wygląda następująco:
235-
236-![](/wiki-images/a/aa/Mysqlshow_pl.png)
237-
238-i zawiera
227+ShowQueryForm wygląda następująco:
239228
240-| | | |
241-|----|----|----|
242-| [[TPanel]] | Align | alBottom |
243-| [[TDataSource]] | | |
244-| [[TDBGrid]] | Align | alClient |
245-| | DataSource | DataSource1 |
246-| [[TButton]] | Caption | Close |
229+[![Mysqlshow pl.png](/wiki-images/a/aa/Mysqlshow_pl.png)](</File:Mysqlshow_pl.png>)
247230
248-Przycisk 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.
231+i zawiera
249232
250-Formularz 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:
233+[[TPanel]] | Align | alBottom
234+---|---|---
235+[[TDataSource]] | |
236+[[TDBGrid]] | Align | alClient
237+| DataSource | DataSource1
238+[[TButton]] | Caption | Close
239+
240+Przycisk 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.
251241
252-Dodaj przycisk u dołu formularza ShowQuery o nazwie AddButton i podpisem „Dodaj”. Utwórz metodę dla AddButtonClick w następujący sposób:
242+Formularz 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:
253243
254-``` pascal
244+Dodaj przycisk u dołu formularza ShowQuery o nazwie AddButton i podpisem „Dodaj”. Utwórz metodę dla AddButtonClick w następujący sposób:
245+```
255246procedure TShowQueryForm.AddButtonClick(Sender: TObject);
256-begin
257- DataSource1.DataSet.Append;
258-end;
247+ begin
248+ DataSource1.DataSet.Append;
249+ end;
259250```
260251
261-Zmień kod dla OpenQueryButtonClick, aby umożliwić aktualizacje bazy danych po zakończeniu pracy z formularzem zapytania.
262-
263-``` pascal
252+Zmień kod dla OpenQueryButtonClick, aby umożliwić aktualizacje bazy danych po zakończeniu pracy z formularzem zapytania.
253+```
264254procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
265-begin
266- ShowQueryForm := TShowQueryForm.Create(nil);
267- try
268- ShowQueryForm.DataSource1.DataSet := SQLQuery1;
269- // Będziemy pisać w bazie danych, więc ustawmy ReadOnly na false,
270- // a do tego musimy ustawić ParseSQL na true
271- SQLQuery1.ParseSQL:=true;
272- SQLQuery1.ReadOnly:=false;
273- SQLQuery1.SQL.Text := CommandEdit.Text;
274- SQLQuery1.Open;
275- ShowQueryForm.ShowModal;
276- finally
277- // ustaw tryb aktualizacji i zaktualizuj bazę danych
278- SQLQuery1.UpdateMode:=upWhereChanged;
279- SQLQuery1.ApplyUpdates;
280- SQLTransaction1.Commit;
281- ShowQueryForm.Free;
282- SQLQuery1.Close;
283- // ustaw ReadOnly i ParsesSQL z powrotem na domyślne
284- SQLQuery1.ParseSQL:=false;
285- SQLQuery1.ReadOnly:=true;
286- end;
287-end;
255+ begin
256+ ShowQueryForm := TShowQueryForm.Create(nil);
257+ try
258+ ShowQueryForm.DataSource1.DataSet := SQLQuery1;
259+ // Będziemy pisać w bazie danych, więc ustawmy ReadOnly na false,
260+ // a do tego musimy ustawić ParseSQL na true
261+ SQLQuery1.ParseSQL:=true;
262+ SQLQuery1.ReadOnly:=false;
263+ SQLQuery1.SQL.Text := CommandEdit.Text;
264+ SQLQuery1.Open;
265+ ShowQueryForm.ShowModal;
266+ finally
267+ // ustaw tryb aktualizacji i zaktualizuj bazę danych
268+ SQLQuery1.UpdateMode:=upWhereChanged;
269+ SQLQuery1.ApplyUpdates;
270+ SQLTransaction1.Commit;
271+ ShowQueryForm.Free;
272+ SQLQuery1.Close;
273+ // ustaw ReadOnly i ParsesSQL z powrotem na domyślne
274+ SQLQuery1.ParseSQL:=false;
275+ SQLQuery1.ReadOnly:=true;
276+ end;
277+ end;
288278```
289279
290-Moż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.
291-
292-Jeś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):
280+Moż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.
293281
294-``` sql
282+Jeś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):
283+```
295284ALTER TABLE TRESTRIG
296-ADD COLUMN AUTOID INT
297-PRIMARY KEY AUTO_INCREMENT;
285+ ADD COLUMN AUTOID INT
286+ PRIMARY KEY AUTO_INCREMENT;
298287```
299288
300-a wtedy zauważysz, że przycisk Usuń w nawigatorze działa.
289+a wtedy zauważysz, że przycisk Usuń w nawigatorze działa.
301290
302291## Źródła
303292
304-Oryginalne ź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).
293+Oryginalne ź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>).
305294
306-> **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.
295+![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Uwaga:** 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.
307296
308297## Zobacz także
309298
310-- [[mysql]]
299+ * [[mysql]]
311300
312301---
313-*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).*
302+*From the Free Pascal wiki, page "MySQLDatabases/pl", as the Internet Archive kept it on 2024-09-20, last changed on 2021-11-13. 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