www.mamboteam.com
Project1.pl Advertisement
Start arrow Artykuły arrow Praktyczne wykorzystanie Delphi arrow Zastosowanie komponentów ZeosLib do obsługi baz danych
piątek, 10 wrzesień 2010
 
 
Menu główne
Start
Artykuły
FAQ
Download
Kontakt
Ciekawe linki
Mapa serwisu
Logowanie





Zapomniałeś hasła?
Nie masz konta? Załóż sobie
Zastosowanie komponentów ZeosLib do obsługi baz danych Drukuj E-mail
Oceny: / 16
KiepskiBardzo dobry 
Napisał: Berl   
czwartek, 08 wrzesień 2005
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://www.zeoslib.net





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;

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 Krasnal (do ściągnięcia z http://www.krasnal.tk/), gdyż zawiera on MySQL, a w dodatku jest od razu skonfigurowany i po zainstalowaniu (koniecznie w domyślnym folderze) od razu gotowy do pracy. Instalujemy go, uruchamiamy, i mamy dostęp do bazy MySQL (user : root, pass : krasnal).

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 : krasnal
c. Protocol : mysql
d. ReadOnly : false
e. User : root

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 tego Buttona :
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.
Komentarze
Dodane przez delphiak w dniu - 2006-02-14 17:09:22
Fajny artykuł. Ocena oczywiście 5.
Instalacja na wersji zeosdbo-6.5.1-alpha
Dodane przez Gość w dniu - 2006-06-22 15:25:39
Niestety wyżej opisany sposób instalacji nie działa z moim Delphi 7 Enterprise, więc opiszę moje boje z instalcją. 
Instalacja została wykonana na wersji zeosdbo-6.5.1-alpha_cvs_13-10-2005.zip w Delphi 7 Enterprise. 
1) Wybieramy z menu File->Open i otwieramy plik \packages\delphi7\ZeosDbo.bpg. 
2) Wybieramy z menu Compile->Compile All Projects. 
3) Wybieramy z menu View->Project Manager. 
4) Wyświetli się okno 'Project Manager'. Klikamy prawym przyciskiem na komponent ZComponent.bpl i wybieramy z menu kontekstowego 'Install'. 
6) Powinno pojawić się okno informacyjne z listą zainstalowanych komponentów. 
 
Na samym końcu listy dostępnych w Delphi komponentów, powinna pojawić się zakładka o nazwie 'Zeos Access'. 
 
Mam nadzieje, że komuś pomogłem. 
 
--------------------------------- 
Instalacja na wersji zeosdbo-6.5.1-alpha
Dodane przez Gość w dniu - 2006-06-22 15:44:04
To jeszcze nie koniec. 
1) Wybieramy z menu Tools->Environment Options. 
2) Pojawi się okienko 'Environment Options', w którym przechodzimy do zakładki 'Library' i dopisujemy do pola 'Library path' cztery katalogi: 
- /src/component/ 
- /src/core/ 
- /src/dbc/ 
- /src/parsesql/ 
- /src/plain/ 
 
Ja zainstalowałem sobie Zeosa w katalogu domowym Delphi i u mnie te dodatkowe scieżki wyglądają tak: 
$(DELPHI)\Vcls\ZeosDbo6\src\component;$(DELPHI)\Vcls\ZeosDbo 6\src\core;$(DELPHI)\Vcls\ZeosDbo6\src\dbc;$(DELPHI)\Vcls\Ze osDbo6\src\parsesql;$(DELPHI)\Vcls\ZeosDbo6\src\plain 
 
Gdzie $(DELPHI) oznacza katalog domowy Delphi 
 
---------------------------------  
mikom
Dodane przez Gość w dniu - 2006-11-30 00:31:55
Wspaniały artykuł 
 
Bardzo dziękuję autorowi oraz "
 
Dodane przez Gość w dniu - 2006-12-03 20:42:35
Witam 
A jak Zeos'a zainstalować w TC++ ? :( 
 
Przemo
Delphi 7 Pe
Dodane przez Gość w dniu - 2007-02-24 18:41:58
Niestety nie da się zainstalować zeos w Delphi 7 Personal. Brakuje dbrtl. 
Może ktoś wie jak to obejść?
Dodane przez viper_2000 w dniu - 2009-04-02 15:02:32
A jak Do zmiennej pobrać wartość komórki do zmiennej w celu wydonania obliczeń a potem wykonania zmiany tej wartości na nową ?? 
 
Prubowałem tak(niestety nie działa): 
var 
id, ilosc:integer; 
begin 
 
 
try 
 
//polaczenie z baza 
DM.ZConnection1.Connect; 
DM.ZQuery1.Close; 
DM.ZQuery1.SQL.Clear; 
id:=StrToInt(form3.Edit7.Text); 
ilosc:='select product_in_stock form from jos_vm_product where product_id="'+id+'"'; 
 
DM.ZQuery1.Open; 
 
except 
//jesli wystapil blad bazy danych 
ShowMessage('Blad !'); 
 
end; 
 
procedurka ma pobrać wartoś komurki "product_in_stock" z tabeli "jos_vm_product" z rekordu którego ID jest wpisywane przez urzytkownika do pola Edit7. 
 

Aby dodać komentarz zaloguj się. Jeśli nie masz konta, załóż je sobie.
Tylko zarejestrowani użytkownicy mogą pisać komentarze.

 
wstecz   dalej »
LINKUJ PRO
Gościmy
Odwiedza nas 7 gości
Licznik odwiedzin
117622
 
Góra Góra