|
W tym artykule zajmiemy się pisaniem programu wykorzystującego bazę danych MySQL. Użyjemy do tego komponentów Zeos, które są do pobrania pod adresem :
http://sourceforge.net/projects/zeoslib/
Jako że instalacja tych komponentów często przysparza problemy, pomimo jasno napisanej instrukcji instalacji, to napiszę jeszcze dokładniej, jak należy się do tego zabrać :
1. Rozpakowujemy komponenty do jakiegoś folderu na dysku, załóżmy, że będzie to c:\zeoslib;
2. Kopiujemy pliki z c:\zeoslib\lib\mysql do folderu c:\windows\system lub c:\windows\system32, w zależności od posiadanej wersji Windows, lub też kopiujemy je po prosty do katalogu programu.
3. Włączamy Delphi, wybieramy z menu głównego Tools\Environment Options..., przechodzimy na zakładkę Library, i w pole Library Path wpisujemy po kolei ścieżki dostępu do plików Zeosa, czyli :
c:\zeoslib\src\component c:\zeoslib\src\core c:\zeoslib\src\dbc c:\zeoslib\src\parsesql c:\zeoslib\src\plain Ścieżki oczywiście rozdzielamy średnikami;
4. W edytorze Delphi otwieramy i instalujemy pliki znajdujące się w c:\zeoslib\packages\delphiX\, gdzie X oznacza numer Twojej wersji Delphi, w następującej
kolejności :
ZCore.bpl ZParseSql.bpl ZPlain.bpl ZDbc.bpl ZComponent.bpl
Tak zainstalowane komponenty Zeos są gotowe do pracy.
Do napisania programu będziemy jeszcze potrzebować jakiejś bazy MySQL. Polecam pakiet WAMP (do ściągnięcia z http://www.wampserver.com/en/download.php), gdyż zawiera on MySQL, a w dodatku jest od razu skonfigurowany i po zainstalowaniu od razu gotowy do pracy. Instalujemy go, uruchamiamy, i mamy dostęp do bazy MySQL.
Teraz przechodzimy do pisania programu.
1. Przechodzimy do edytora Delphi i wybieramy File|New Application.
2. Dodajemy na formę następujące komponenty z zakładki Zeos Acces :
ZConnection ZQuery
3. Zmieniamy właściwości komponentu ZConnection1:
a. HostName : localhost b. Password : [wstawiamy swoje hasło] c. Protocol : mysql d. ReadOnly : false e. User : [wstawiamy swoją nazwę użytkownika]
4. Zmieniamy właściwości komponentu ZQuery1 :
a. Connection : ZConnection1
5. Dodajemy na formę komponenty z zakładki Data Controls.
DBGrid DataSource
Jeżeli nie dysponujesz takimi komponentami, oznacza to, że posiadasz wersję Delphi Personal, która niestety nie posiada komponentów bazodanowych. W takim
wypadku musisz spojrzeć na koniec artykułu, gdzie jest napisane, jak radzić sobie bez tych komponentów.
6. Zmieniamy właściwości komponentu DataSource1:
a. DataSet : ZQuery1
7. Zmieniamy właściwości komponentu DBGrid1 :
a. DataSource : DataSource1
8. Chcielibyśmy, żeby program od razu po włączeniu łączył się z odpowiednią bazą danych, i wyświetlał rekordy, jakie się w niej znajdują. Piszemy obsługę dla zdarzenia OnShow formy głównej :
procedure TForm1.FormShow(Sender: TObject);
begin
try
ZConnection1.Database := 'test';
ZConnection1.Connect;
ZQuery1.SQL.Add('SELECT * FROM osoby');
ZQuery1.Active := true;
except
ShowMessage('Tabela "osoby" nie jest jeszcze utworzona.');
end;
end;
Możemy teraz włączyć program i zobaczyć, jak będzie się on zachowywał.
Zgodnie z oczekiwaniami program wypisał komunikat o braku tabeli, z której chcemy odczytywać rekordy. Należałoby więc tą tabelę (oraz całą bazę danych)
utworzyć. Najpierw zajmiemy się utworzeniem bazy danych :
9. Dodajemy na formę komponent Button z zakładki Standard.
10. Zmieniamy jego właściwości : a. Caption : Stwórz bazę
11. Piszemy obsługę zdarzenia OnClick dla Buttona2
procedure TForm1.Button2Click(Sender: TObject);
begin
ZConnection1.Database := 'test';
ZConnection1.Connect;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('DROP TABLE IF EXISTS osoby');
ZQuery1.ExecSQL;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('CREATE TABLE osoby (id INT NOT NULL AUTO_INCREMENT,
imie CHAR(20), PRIMARY KEY(id))');
ZQuery1.ExecSQL;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('select * from osoby');
ZQuery1.Active := true;
end;
W ten sposób mamy stworzoną bazę danych, oraz mamy w tej bazie danych jedną pustą tabelę. Tabela ta wyświetli się w komponencie DBGrid1, gdy tylko zostanie utworzona.
Teraz zaimplementujemy dodawanie rekordów do naszej bazy.
15. Dodajemy na formę następujące komponenty z zakładki Standard :
Edit Button
16. Zmieniamy właściwości komponentu Button3:
a. Caption : Dodaj rekord
17. Piszemy obsługę zdarzenia OnClick dla komponentu Button3 :
procedure TForm1.Button3Click(Sender: TObject);
begin
ZConnection1.Connect;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('INSERT INTO osoby(id,imie) VALUES(0, :imie)');
ZQuery1.ParamByName('imie').AsString := Edit1.Text;
try
ZQuery1.ExecSQL;
ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('select * from osoby');
ZQuery1.Open;
except
ShowMessage('Błąd.');
end;
end;
Wystarczy teraz wpisać nowe imię, i nacisnąć przycisk Dodaj rekord. Imię wpisane w pole Edit1 zostanie wtedy dodane do bazy danych.
Może się jednak zdarzyć, że chcemy wykasować jakiś rekord z bazy danych. Dlatego napiszemy teraz obsługę kasowania rekordów z bazy danych.
18. Dodajemy na formę komponent Button z zakładki Standard 19. Zmieniamy właściwości komponentu Button4:
a. Caption : Skasuj rekord
20. Piszemy obsługę zdarzenia OnClick dla komponentu Button4 :
procedure TForm1.Button4Click(Sender: TObject);
begin
ZConnection1.Connect;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('DELETE FROM osoby WHERE imie=:imie_kasowanego');
ZQuery1.ParamByName('imie_kasowanego').AsString := Edit1.Text;
try
ZQuery1.ExecSQL;
ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('select * from osoby');
ZQuery1.Open;
except
ShowMessage('Błąd.');
end;
end;
Czasami może być też tak, że źle wpiszemy rekord do bazy danych, i nie chcemy go kasować, lecz tylko zmodyfikować. W tym celu zaimplementujemy modyfikowanie rekordu w naszej bazie danych.
21. Dodajemy na formę następujące komponenty z zakładki Standard :
Edit Button
22. Zmieniamy właściwości komponentu Button5:
a. Caption : Modyfikuj rekord
23. Piszemy obsługę zdarzenia OnClick dla komponentu Button5 :
procedure TForm1.Button5Click(Sender: TObject);
begin
ZConnection1.Connect;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('UPDATE osoby SET imie=:im_modyfikowane '+
'WHERE id=:identyfikator');
ZQuery1.ParamByName('im_modyfikowane').AsString := Edit1.Text;
ZQuery1.ParamByName('identyfikator').AsInteger := StrToInt(Edit2.Text);
try
ZQuery1.ExecSQL;
ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('select * from osoby');
ZQuery1.Open;
except
ShowMessage('Błąd.');
end;
end;
Jak jednak sobie radzić z bazami danych, gdy posiadamy wersję Delphi Personal, i tym samym nie dysponujemy komponentami DataSource i DBGrid? Otóż jest na to bardzo prosty sposób, mianowicie można wyswietlać rekordy w zwykłym StringGridzie.
24. Dodajemy na formę komponent Button z zakładki Standard. 25. Zmieniamy właściwości komponentu Button6:
a. Caption : Pokaż rekordy
26. Dodajemy na formę komponent StringGrid z zakładki Additional. 27. Piszemy obsługę zdarzenia OnClick dla komponentu Button5 :
procedure TForm1.Button6Click(Sender: TObject);
var
i : integer;
begin
i := 1;
ZQuery1.First;
while not ZQuery1.Eof do begin
StringGrid1.Cells[1,i] := ZQuery1.FieldByName('id').AsString;
StringGrid1.Cells[2,i] := ZQuery1.FieldByName('imie').AsString;
ZQuery1.Next;
i := i + 1;
end;
end;
Jak widać, obsługa bazy danych MySQL przy zastosowaniu komponentów Zeos jest zagadnieniem bardzo prostym i łatwym do zrozumienia.
|