Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00462 009702 11027405 na godz. na dobę w sumie
Delphi 7 i bazy danych - książka
Delphi 7 i bazy danych - książka
Autor: Liczba stron: 240
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-129-0 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> delphi - programowanie
Porównaj ceny (książka, ebook, audiobook).

Borland Delphi to jedno z najpopularniejszych narzędzi służących do szybkiego tworzenia aplikacji bazodanowych. Używając Delphi nie tylko w prosty sposób połączysz się z wieloma systemami zarządzania relacyjnymi bazami danych, ale także szybko stworzysz elegancki i wygodny interfejs, pozwalający końcowemu użytkownikowi na dostęp do danych. Właśnie stąd wzięła się ogromna popularność Delphi przy pisaniu aplikacji bazodanowych klient-serwer.

Książka przedstawia zarówno rozmaite systemy bazodanowe, z jakimi można spotkać się w praktyce programistycznej (w tym m.in. InterBase, MS Access, MS SQL Server 2000 i MySQL) jak też i podstawowe komponenty wspomagające z poziomu Delphi 7 zarządzanie danymi. Prześledzisz proces tworzenia bazy danych, modelowania jej struktury i sposobów korzystania z danych w niej zawartych z poziomu Delphi.

Poznasz:

Jeśli zamierzasz pisać w Delphi, wcześniej czy później staniesz przed koniecznością skorzystania z systemu bazodanowego. Kupujące tę książkę możesz być pewien, że żaden z tych systemów nie zaskoczy Cię i nie przerośnie Twoich umiejętności.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI Delphi 7 i bazy danych KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG Autor: Marian Wybrañczyk ISBN: 83-7361-129-0 Format: B5, stron: 240 Zawiera CD-ROM TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Borland Delphi to jedno z najpopularniejszych narzêdzi s³u¿¹cych do szybkiego tworzenia aplikacji bazodanowych. U¿ywaj¹c Delphi nie tylko w prosty sposób po³¹czysz siê z wieloma systemami zarz¹dzania relacyjnymi bazami danych, ale tak¿e szybko stworzysz elegancki i wygodny interfejs, pozwalaj¹cy koñcowemu u¿ytkownikowi na dostêp do danych. W³aġnie st¹d wziê³a siê ogromna popularnoġæ Delphi przy pisaniu aplikacji bazodanowych klient-serwer. Ksi¹¿ka przedstawia zarówno rozmaite systemy bazodanowe, z jakimi mo¿na spotkaæ siê w praktyce programistycznej (w tym m.in. InterBase, MS Access, MS SQL Server 2000 i MySQL) jak te¿ i podstawowe komponenty wspomagaj¹ce z poziomu Delphi 7 zarz¹dzanie danymi. Przeġledzisz proces tworzenia bazy danych, modelowania jej struktury i sposobów korzystania z danych w niej zawartych z poziomu Delphi. Poznasz: • Podstawowe informacje na temat baz danych i jêzyka SQL • Narzêdzia wspomagaj¹ce tworzenie i modyfikacjê bazy danych • MS Access i interfejs ODBC • InterBase i interfejs IBX • MS SQL Server 2000 i interfejs ADO • MySQL i narzêdzie dbExpress • Metody korzystania z BDE • DataSnap i tworzenie aplikacji w architekturze trójwarstwowej • Zasady pisania w³asnych komponentów Jeġli zamierzasz pisaæ w Delphi, wczeġniej czy póĥniej staniesz przed koniecznoġci¹ skorzystania z systemu bazodanowego. Kupuj¹ce tê ksi¹¿kê mo¿esz byæ pewien, ¿e ¿aden z tych systemów nie zaskoczy Ciê i nie przeroġnie Twoich umiejêtnoġci. Spis treści Wstęp ...................................................z............................................ 7 Rozdział 1. Przykładowa baza danych...................................................z................ 9 Analiza problemu ...................................................o...................................................o..........9 Model bazy danych ...................................................o...................................................o.....10 Uwagi na temat implementacji...................................................o.......................................14 Podsumowanie ...................................................o...................................................o............16 Rozdział 2. Elementy SQL ...................................................z............................... 17 SQL — co to jest? ...................................................o...................................................o.......17 Baza danych ...................................................o...................................................o..........18 Tabele...................................................o...................................................o....................18 Select...................................................o...................................................o.....................21 Klucz główny (primary key) ...................................................o....................................23 Klucz obcy (foreign key) i integralność referencyjna.................................................24 Wartość NULL...................................................o...................................................o......26 Domena ...................................................o...................................................o.................27 Indeksy...................................................o...................................................o..................29 Widoki (perspektywy) ...................................................o.............................................30 Wyzwalacze i generatory ...................................................o.........................................32 Procedury ...................................................o...................................................o..............34 Transakcje ...................................................o...................................................o.............35 Rozdział 3. Narzędzia wspomagające tworzenie i modyfikację bazy danych.......... 37 Database Desktop...................................................o...................................................o........37 Datapump ...................................................o...................................................o....................41 Konfiguracja ODBC ...................................................o................................................41 Konfiguracja BDE ...................................................o...................................................o43 Rozdział 4. MS Access i ODBC ...................................................z....................... 47 Tworzymy bazę danych w MS Access ...................................................o..........................47 Tabele...................................................o...................................................o....................47 Relacje...................................................o...................................................o...................50 Kwerendy...................................................o...................................................o..............50 Formularze ...................................................o...................................................o............52 4 Delphi 7 i bazy danych ODBC i MS Access ...................................................o...................................................o....53 Łączymy się z MS Access poprzez ODBC...................................................o..............57 ODBC i XBase ...................................................o...................................................o............58 Podsumowanie ...................................................o...................................................o............61 Rozdział 5. InterBase i IBX ...................................................z............................. 63 IBConsole...................................................o...................................................o................ ....64 Interactive SQL ...................................................o...................................................o...........72 Backup...................................................o...................................................o.........................77 Restore...................................................o...................................................o.........................79 Użytkownicy i uprawnienia ...................................................o...........................................80 IBX ...................................................o...................................................o..............................83 Połączenie z InterBase ...................................................o.............................................84 Monitorowanie bazy danych InterBase...................................................o........................108 Odinstalowanie serwera InterBase ...................................................o...............................109 Podsumowanie ...................................................o...................................................o..........109 Rozdział 6. MS SQL Server 2000 i ADO...................................................z......... 111 Wstęp...................................................o...................................................o.........................111 MS SQL Server 2000 ...................................................o...................................................o112 Tworzymy bazę danych ...................................................o...............................................112 Połączenie z bazą danych ...................................................o.............................................115 ADOConnection ...................................................o...................................................o.116 ADOCommand ...................................................o...................................................o...118 ADOTable, ADOQuery, ADOStoredProc...................................................o.............120 ADODataSet ...................................................o...................................................o.......121 ADO i Transakcje ...................................................o..................................................124 Motor JET ...................................................o...................................................o...........126 Podsumowanie ...................................................o...................................................o..........128 Rozdział 7. MySQL i dbExpress ...................................................z..................... 129 Wstęp...................................................o...................................................o.........................129 MySQL uruchomienie serwera ...................................................o....................................130 Użytkownicy i uprawnienia ...................................................o.........................................132 Zmiana hasła administratora ...................................................o..................................132 Inni użytkownicy ...................................................o...................................................o133 Definiowanie użytkownika ...................................................o....................................133 Minimum uprawnień...................................................o..............................................133 Tworzenie bazy danych...................................................o................................................135 Usuwanie bazy danych...................................................o.................................................135 Tworzenie tabel ...................................................o...................................................o.........136 dbExpress ...................................................o...................................................o..................137 SQLConnection...................................................o...................................................o...139 SQLDataSet ...................................................o...................................................o........141 Transakcje ...................................................o...................................................o.................151 ClientDataSet ...................................................o...................................................o............156 Komunikacja dwukierunkowa ...................................................o...............................161 Informacje na temat bazy danych ...................................................o..........................164 SQLMonitor ...................................................o...................................................o..............165 Podsumowanie ...................................................o...................................................o..........166 Rozdział 8. BDE ...................................................z........................................... 167 Wstęp...................................................o...................................................o.........................167 Database ...................................................o...................................................o....................170 Query...................................................o...................................................o.........................171 Spis treści 5 Table...................................................o...................................................o..........................174 UpdateSQL...................................................o...................................................o................187 StoredProc ...................................................o...................................................o.................191 Podsumowanie ...................................................o...................................................o..........193 Rozdział 9. DataSnap ...................................................z................................... 195 Wstęp — architektura trójwarstwowa...................................................o..........................195 DataSnap ...................................................o...................................................o...................196 Serwer aplikacji...................................................o...................................................o.........197 Program klienta ...................................................o...................................................o.........199 Ograniczenia...................................................o...................................................o..............200 Odświeżanie danych...................................................o...................................................o..204 Konflikt ...................................................o...................................................o................. Podsumowanie ...................................................o...................................................o..........207 ....206 Rozdział 10. Podstawy tworzenia komponentów ................................................. 209 Wstęp...................................................o...................................................o.........................209 Podstawowe informacje ...................................................o...............................................209 Podejście tradycyjne...................................................o...................................................o..213 Tworzymy pierwszy komponent...................................................o..................................215 Komponenty bazodanowe ...................................................o............................................220 Kontrolka bazodanowa...................................................o.................................................223 Styl projektowania komponentów...................................................o................................224 Instalacja komponentu w środowisku Delphi ...................................................o..............227 Wykorzystanie komponentu...................................................o.........................................228 Podsumowanie ...................................................o...................................................o..........230 Dodatek A Adresy Internetowe...................................................z..................... 231 Skorowidz...................................................z................................... 233 Rozdział 10. Podstawy tworzenia komponentów Wstęp W tym rozdziale chciałbym przedstawić podstawy związane z tworzeniem kompo- nentów bazodanowych. Korzystając ze środowiska Delphi, używamy przede wszyst- kim biblioteki VCL (ang. Visual Components Library). Jak sama nazwa sugeruje, VCL to biblioteka komponentów. Komponenty te mają nie tylko charakter kompo- nentów wizualnych. Na bibliotekę składają się również komponenty niewizualne, kontrolki zbiorów danych, komponenty związane z Internetem oraz klasy. Kompo- nenty można podzielić na grupy:  Komponenty (wywodzą się od klasy 6 QORQPGPV);  Kontrolki niewizualne (wywodzą się od klasy 6 QORQPGPV);  Kontrolki wizualne (wywodzą się od klasy 6 QPVTQN), a w nich:  Kontrolki okienkowe (wywodzą się od klasy 69KP QPVTQN),  Kontrolki nieokienkowe (wywodzą się od klasy 6)TCRJKE QPVTQN). Podstawowe informacje Podstawowa klasą dla wszystkich komponentów jest klasa 6 QORQPGPV. Jednak klasa ta już dziedziczy po klasie 62GTUKUVGPV (nazwa klasy pochodzi od ang. persistent — trwały). Celowo nie wspominam tutaj o klasie 61DLGEV, od której dziedziczą wszystkie klasy, w tym również klasa 62GTUKUVGPV (listing 10.1). 210 Delphi 7 i bazy danych Listing 10.1. Definicja klasy TPersistent 62GTUKUVGPVENCUU 61DLGEV RTKXCVG RTQEGFWTG#UUKIP TTQT 5QWTEG62GTUKUVGPV  RTQVGEVGF RTQEGFWTG#UUKIP6Q GUV62GTUKUVGPV XKTVWCN RTQEGFWTG GHKPG2TQRGTVKGU (KNGT6(KNGT XKTVWCN HWPEVKQP)GV1YPGT62GTUKUVGPVF[PCOKE RWDNKE FGUVTWEVQT GUVTQ[QXGTTKFG RTQEGFWTG#UUKIP 5QWTEG62GTUKUVGPV XKTVWCN HWPEVKQP)GV0COG2CVJUVTKPIF[PCOKE GPF W ramach interfejsu publicznego klasa 62GTUKUVGPV udostępnia przede wszystkim metodę #UUKIP, która kopiuje aktualną wartość obiektu. Definicję klasy 6 QORQPGPV znajdziemy w pliku (dla domyślnej instalacji Delphi) C:pro gram filesorlanddelphi7source tlcommonclasses.pas. Klasa ta jest dość rozbudo- wana, dlatego podam tutaj tylko jej fragment (głównie jej interfejs publiczny). Warto przyjrzeć się poszczególnym składnikom klasy, aby się przekonać, jakie podstawowe cechy posiada każdy komponent (listing 10.2): Listing 10.2. Fragment definicji klasy TComponent 6 QORQPGPVENCUU 62GTUKUVGPV++PVGTHCEG++PVGTHCEG QORQPGPV4GHGTGPEG RTKXCVG (1YPGT6 QORQPGPV (0COG6 QORQPGPV0COG (6CI.QPIKPV ( QORQPGPVU6.KUV ( GUKIP+PHQ.QPIKPV ( QORQPGPV5VCVG6 QORQPGPV5VCVG  RWDNKE EQPUVTWEVQT TGCVG #1YPGT6 QORQPGPV XKTVWCN FGUVTWEVQT GUVTQ[QXGTTKFG RTQEGFWTG$GHQTG GUVTWEVKQPQXGTTKFG RTQEGFWTG GUVTQ[ QORQPGPVU RTQEGFWTG GUVTQ[KPI HWPEVKQP ZGEWVG#EVKQP #EVKQP6$CUKE#EVKQP $QQNGCPF[PCOKE HWPEVKQP(KPF QORQPGPV EQPUV#0COGUVTKPI 6 QORQPGPV RTQEGFWTG(TGG0QVKHKECVKQP # QORQPGPV6 QORQPGPV  RTQEGFWTG4GOQXG(TGG0QVKHKECVKQP # QORQPGPV6 QORQPGPV  RTQEGFWTG(TGG1P4GNGCUG HWPEVKQP)GV2CTGPV QORQPGPV6 QORQPGPVF[PCOKE HWPEVKQP)GV0COG2CVJUVTKPIQXGTTKFG HWPEVKQP*CU2CTGPV$QQNGCPF[PCOKE RTQEGFWTG+PUGTV QORQPGPV # QORQPGPV6 QORQPGPV  RTQEGFWTG4GOQXG QORQPGPV # QORQPGPV6 QORQPGPV  RTQEGFWTG5GV5WD QORQPGPV +U5WD QORQPGPV$QQNGCP  HWPEVKQP5CHG CNN ZEGRVKQP ZEGRV1DLGEV61DLGEV  ZEGRV#FFT2QKPVGT *4GUWNVQXGTTKFG HWPEVKQP7RFCVG#EVKQP #EVKQP6$CUKE#EVKQP $QQNGCPF[PCOKE Rozdział 10. ♦ Podstawy tworzenia komponentów 211 HWPEVKQP+U+ORNGOGPVQT1H EQPUV+++PVGTHCEG $QQNGCP HWPEVKQP4GHGTGPEG+PVGTHCEG EQPUV+++PVGTHCEG1RGTCVKQP61RGTCVKQP $QQNGCP RTQRGTV[ QO1DLGEV+7PMPQYPTGCF)GV QO1DLGEV RTQRGTV[ QORQPGPVU=+PFGZ+PVGIGT?6 QORQPGPVTGCF)GV QORQPGPV RTQRGTV[ QORQPGPV QWPV+PVGIGTTGCF)GV QORQPGPV QWPV RTQRGTV[ QORQPGPV+PFGZ+PVGIGTTGCF)GV QORQPGPV+PFGZYTKVG5GV QORQPGPV+PFGZ RTQRGTV[ QORQPGPV5VCVG6 QORQPGPV5VCVGTGCF( QORQPGPV5VCVG RTQRGTV[ QORQPGPV5V[NG6 QORQPGPV5V[NGTGCF( QORQPGPV5V[NG RTQRGTV[ GUKIP+PHQ.QPIKPVTGCF( GUKIP+PHQYTKVG( GUKIP+PHQ RTQRGTV[1YPGT6 QORQPGPVTGCF(1YPGT RTQRGTV[8 . QO1DLGEV2QKPVGTTGCF(8 . QO1DLGEVYTKVG(8 . QO1DLGEV RWDNKUJGF RTQRGTV[0COG6 QORQPGPV0COGTGCF(0COGYTKVG5GV0COGUVQTGF(CNUG RTQRGTV[6CI.QPIKPVTGCF(6CIYTKVG(6CIFGHCWNV GPF Klasa ta oferuje pewną cechę związaną z komponentami o nazwie RWDNKUJGF (opubliko- wane). Jak widać z definicji klasy, dyrektywa RWDNKUJGF jest wymieniona w identyczny sposób jak inne dyrektywy dostępu do pól klasy: 60CYCA-NCU[ENCUU 2WDNKE  RTQVGEVGF  RTKXCVG  RWDNKUJGF RTQRGTV[  GPF Najprościej rzecz ujmując, można stwierdzić, że to, co znajdzie się po dyrektywie RWDNKUJGF (poprzedzone słowem RTQRGTV[), widzimy jako właściwości komponentu, gdy podglądamy je w oknie Object Inspector. W podanej definicji klasy 6 QORQPGPV widzimy dwie opublikowane właściwości (ang. properties), którymi są 0COG oraz 6CI. RWDNKUJGF RTQRGTV[0COG6 QORQPGPV0COGTGCF(0COGYTKVG5GV0COGUVQTGF(CNUG RTQRGTV[6CI.QPIKPVTGCF(6CIYTKVG(6CIFGHCWNV GPF Proszę otworzyć dowolny projekt Delphi i wskazać dowolny komponent. W oknie Object Inspector każdego komponentu zobaczymy właściwości 0COG (nazwa kompo- nentu) oraz 6CI. Przy czym właściwość 6CI, jak wynika z opisu dokumentacji pomocy środowiska Delphi (menu: help), została dodana dla wygody projektanta. Możemy w niej umieścić, co chcemy — w ramach zgodności z typem tej właściwości. Przypatrując się nadal definicji klasy 6 QORQPGPV, możemy zauważyć, że komponent może mieć swojego właściciela: (1YPGT6 QORQPGPV 212 Delphi 7 i bazy danych Komponent zostanie dodany do listy komponentów za pośrednictwem metody +PUGTV å QORQPGPV; przy czym lista komponentów jest dostępna za pośreidnictwem: RTQRGTV[ QORQPGPVU=+PFGZ+PVGIGT?6 QORQPGPVTGCF)GV QORQPGPV Komponent ma swoją pozycję QORQPGPV+PFGZ na liście komponentów: RTQRGTV[ QORQPGPV+PFGZ+PVGIGTTGCF)GV QORQPGPV+PFGZYTKVG5GV QORQPGPV+PFGZ Do ustawienia wartości QORQPGPV +PFGZ służy metoda: RTQEGFWTG5GV QORQPGPV+PFGZ 8CNWG+PVGIGT  a do pobrania aktualnej wartości: HWPEVKQP)GV QORQPGPV+PFGZ+PVGIGT Komponent może również być właścicielem innych komponentów. Na przykład kom- ponent 2CPGN, na którym możemy umieścić inne komponenty — wówczas 2CPGN dla pozostałych komponentów będzie ich właścicielem. Komponenty umieszczone na komponencie 2CPGN będą wówczas miały odpowiednio ustawioną właściwość 2CTGPV. Wówczas: PCYCAMQORQPGPVW2CTGPV0COG wyświetli nazwę komponentu rodzica (właściciela). Możemy sprawdzić, czy komponent ma właściciela: HWPEVKQP*CU2CTGPV$QQNGCPF[PCOKE Chcąc się odwołać do jednego z komponentów znajdujących się na takim panelu, możemy skorzystać z metody: HWPEVKQP(KPF QORQPGPV EQPUV#0COGUVTKPI 6 QORQPGPV Jeżeli chcemy, możemy również przejrzeć całą listę kompionentów XCT MM+PVGIGT DGIKP HQTMMVQ QORQPGPV QWPVFQDGIKP KH QORQPGPVU=MM?KU 6$WVVQP VJGPDGIKP  QORQPGPVU=MM?CU6$WVVQP (QPV5KG GPF GPF GPF W podanym przykładzie w ramach pętli (na przykład: wewnątrz formularza) przej- rzymy wszystkie komponenty znajdujące się na formularzu. Jeżeli komponentem jest komponent klasy 6$WVVQP, wówczas zostanie dla niego zmieniona wielkość aktualnie wykorzystywanej czcionki na rozmiar 12 punktów. Wiemy już, że komponenty posiadają właściwości i metody. Domyślamy się również, że komponenty potrafią reagować na wystąpienie pewnych zdarzeń. Zakładka events (w oknie Object Inspector) większości komponentów zawiera bogatą listę zdarzeń, jakie można dla nich oprogramować. Jednocześnie, jak o tym wspomniałem wcześniej, Rozdział 10. ♦ Podstawy tworzenia komponentów 213 właściwości widoczne w oknie Object Inspector należą również do grupy właściwości (ang. properties). Dlatego żeby obsłużyć zdarzenie komponentu $WVVQP, jakim jest 1P NKEM, należy przypisać właściwości tego zdarzenia odpowiednią metodę. Dzięki temu można różnym zdarzeniom przypisać tę samą metodę — nawet dla różnych komponentów. Podejście tradycyjne Aby wejść łagodnie w świat projektowania komponentów, zademonstruję, jak na pew- nych etapach można osiągnąć pozornie skomplikowany cel, jakim jest utworzenie komponentu. W wielu programach korzystałem z komponentu klasy 6 QODQ$QZ, który służył mi m. in. do wyboru miesiąca (w zakresie 1 – 12). Najprostszym rozwiązaniem jest umieszczenie na formularzu komponentu QODQ$QZ oraz wstępne wypełnienie jego właściwości +VGOU wartościami od 1 do 12 reprezentujących kolejne miesiące. Wobec tego komponentu — nazwijmy go ED/ — miałem jeszcze jeden wymóg. Otóż potrzebo- wałem, aby początku swej pracy komponent na był ustawiony na wartość, jaką posia- da aktualny miesiąc. Narzuca się naturalne i proste rozwiązanie, aby skorzystać z klas i odpowiednio oprogramować zachowanie się nowej klasy tak, aby spełniała moje ocze- kiwania. W tym celu utworzyłem nową klasę dziedziczącią wprost od klasy 6 QODQ$QZ. Oryginalny konstruktor klasy 6 QODQ$QZ ma postać: EQPUVTWEVQTETGCVG #QYPGT6 QORQPGPV QXGTTKFG Jego parametr #1YPGT jest identyfikowany z właścicielem komponentu. Postanowiłem nieco zmodyfikować konstruktor, aby móc na starcie określić właściciela komponentu, jego rodzicaoraz położenie lewego górnego rogu, w jakim ma się znaleźć komponent. W efekcie, konstruktor przyjął postać: 6[RG /[ QODQ$QZENCUU 6 QODQ$QZ RWDNKE EQPUVTWEVQT TGCVG #1YPGT6 QORQPGPV R2CTGPV69KP QPVTQN R.GHVR6QR+PVGIGT  RTQEGFWTGY[RGNPKLAKAWUVCYAOE  GPF Jego implementacja wygląda następująco: EQPUVTWEVQT/[ QODQ$QZ TGCVG #1YPGT6 QORQPGPV R2CTGPV69KP QPVTQN R.GHVR6QR+PVGIGT  DGIKP KPJGTKVGF TGCVG #1YPGT  2CTGPVR2CTGPV .GHVR.GHV 6QRR6QR 9KFVJ Y[RGNPKLAKAWUVCYAOE  GPF 214 Delphi 7 i bazy danych Kolejno w ciele konstruktora wykonuje się wywołanie konstruktora klasy bazowej, przypisanie rodzica, ustawienie położenia lewego górnego rogu komponentu oraz wywoływana jest metoda, której zadaniem jest wypełnienie listy komponentu warto- ściami od 1 do 12 oraz ustawienie właściwości +VGO+PFGZ (aktywny wiersz komponentu klasy MyComboBox) na odpowiadającą numerowi bieżącego miiesiąca (listing 10.3): Listing 10.3. Kod realizujący ustawienie wewnętrznej zawartości kkontrolki RTQEGFWTG/[ QODQ$QZ9[RGNPKLAKAWUVCYAOE  XCT OEKPVGIGT ;GCT/QPVJ C[*QWT/KP5GE/5GE9QTF FKUKCL6 CVG6KOG RQ+PVGIGT UGGMOE+PVGIGT UU5VTKPI DGIKP HQTOEVQFQDGIKP +VGOU#FF +PV6Q5VT OE  GPF FKUKCL0QY   GEQFG CVG FKUKCL;GCT/QPVJ C[  UGGMOEOQPVJ UU+PV6Q5VT UGGMOE  RQ+VGOU+PFGZ1H UU  KHRQ VJGPDGIKP +VGO+PFGZRQ GPF GPF Natomiast, aby użyć mechanizmu w postaci nowo zdefiniowanej klasy, wykonuję wywołanie: RTQEGFWTG6(QTO(QTO#EVKXCVG 5GPFGT61DLGEV  XCT QD/[ QODQ$QZ DGIKP QD/[ QODQ$QZ TGCVG 5GNH(QTO  GPF Takie jest tradycyjne podejście. Proste i skuteczne (pełny kod znajduje się w przykła- dowym projekcie o nazwie 2T[MNCF w c:helionprzykladykomponentykrok1source Przyklad28). Ale ma swoją wadę. Przejawia się ona głównie tym, że jeżeli na przykład projektujemy okno dialogowe posiadające wiele obiektów kontrolnych w postaci kom- ponentów, takich jak na przykład FKV, /CUM FKV, CVG6KOG2KEMGT, QODQ$QZ itd., to wygodnie jest albo wszystkie komponenty umieszczać na formularzu ściągając je z palety komponentów, albo wszystkie je tworzymy w locie, jak w przykładzie powy- żej. Metoda polegająca na mieszaniu tych dwóch metod jest chyba najgorszym z roz- wiązań. Rozwiązaniem najbardziej sensownym jest utworzenie komponentu realizu- jącego te samo zadanie. Rozdział 10. ♦ Podstawy tworzenia komponentów 215 Tworzymy pierwszy komponent Komponenty można tworzyć zupełnie od podstaw lub wykorzystując istniejące klasy wraz z mechanizmami, które klasy te posiadają. W dalszym ciągu postaram się omówić sposób utworzenia prostego komponentu powstałego na bazie komponentu QODQ$QZ. Wykonuje on te same zadania, co utworzony w poprzednim punkcie obiekt klasy /[ QO DQ$QZ (omawiany przykład znajduje się w przykładowym projekcie o nazwie 2T[MNCF — c:helionprzykladykomponentykrok1sourcePrzyklad29). Aby utworzyć nowy komponent, należy po uruchomieniu środowiska Delphi zamknąć ewentualnie otwarty projekt oraz z menu wybrać: Component/New Component. Na ekranie zobaczymy okno jak na rysunku 10.1. Rysunek 10.1. Okno tworzenia nowego komponentu W oknie tym mamy do wyboru następujące parametry:      Ancestor Type — należy wybrać klasę przodka; Class Name — należy podać naszą propozycję nazwy dla tworzonej iklasy komponentu; Palette Page — należy podać nazwę istniejącej (lub nowej) palety, nai której ma się znaleźć tworzony komponent; Unit File Name — należy podać położenie pliku z kodem źródłowym komponentu; Search Path (ścieżka poszukiwań) — najczęściej nie trzeba tutaj nic izmieniać. Po podaniu wymaganych danych zatwierdzamy nasze dane, iwybierając klawisz OK. W efekcie, mechanizm tworzenia nowego komponentu utworzy nowy moduł w miejscu pliku jak w parametrze Unit File Name. Bedzie on zawierał definicje klasy o nazwie NCUU0COG dziedziczącą od #PEGUVQT 6[RG. Oto zawartość pliku (listing 10.4): Listing 10.4. Początkowa zawartość modułu WPKV/9 QODQ$QZ KPVGTHCEG WUGU 5[U7VKNU NCUUGU QPVTQNU5VF VTNU 216 Delphi 7 i bazy danych V[RG 6/9 QODQ$QZENCUU 6 QODQ$QZ RTKXCVG ]2TKXCVGFGENCTCVKQPU_ RTQVGEVGF ]2TQVGEVGFFGENCTCVKQPU_ RWDNKE ]2WDNKEFGENCTCVKQPU_ RWDNKUJGF ]2WDNKUJGFFGENCTCVKQPU_ GPF RTQEGFWTG4GIKUVGT KORNGOGPVCVKQP RTQEGFWTG4GIKUVGT DGIKP 4GIKUVGT QORQPGPVU 75 4 =6/9 QODQ$QZ?  GPF GPF Nie ma tutaj specjalnych niespodzianek. Mamy w zasadzie szkielet klasy i jedną pro- cedurę o nazwie 4GIKUVGT. Deklaracja metody 4GIKUVGT jest następująca: RTQEGFWTG4GIKUVGT QORQPGPVU EQPUV2CIGUVTKPI EQPUV QORQPGPV NCUUGUCTTC[QH6 QORQPGPV NCUU  Procedura 4GIKUVGT dokona rejestracji komponentu 6/9 QODQ$QZ na karcie o nazwie 75 4. Aby tworzony komponent mógł zachowywać się jak jego przodek klasy 6 QODQ$QZ, trzeba do sekcji RWDNKE dodać konstruktor, za pomocą którego wywołamy konstruktor przodka. Ja rozszerzyłem możliwości konstruktora o moiżliwość przyjęcia parametrów klasy podstawowej. RWDNKE EQPUVTWEVQT TGCVG #1YPGT6 QORQPGPVR2CTGPV69KP QPVTQN  Chciałem również, aby nowy komponent posiadał właściwość /E, która przechowywałaby aktualną wartość numeryczną miesiąca. W tym celu dodałem właściwość opublikowaną o takie nazwie do sekcji RWDNKUJGF: RWDNKUJGF RTQRGTV[/E6/KGUKCEGTGCF)GV/EYTKVG5GV/E Nowa właściwość /E pojawi się w oknie Object Inspector z taką samą nazwą. Aby móc ustawiać tę właściwość, trzeba zadeklarować odpowiednią zmienną w sekcji prywatnej. Zmienna ta powinna przyjmować wartości tylko z zakresu od 1 do 12. Aby tak się stało, utworzyłem nowy typ: V[RG 6/KGUKCEG a w sekcji RTKXCVG podałem: RTKXCVG H/E6/KGUKCEG Rozdział 10. ♦ Podstawy tworzenia komponentów 217 Zmienna H/E oraz właściwość /E są ze sobą nierozerwalnie związane. Odczyt i zapis zmiennej jest realizowany za pośrednictwem obiektów wymienionych po słowach TGCF i YTKVG. Proste zmienne można ustawiać i odczytywać za pomocą konstrukcji (dla zmien- nej H/E): RTQRGTV[/E6/KGUKCEGTGCFH/EYTKVGH/E Przy czym odczyt (po słowie: „read”) odbywałby się ze zmiennej H/E, a zapis (po słowie: „write”) do tej samej zmiennej H/E. W podanym wcześniej fragmencie kodu podałem drugi sposób osiągnięcia tego samego celu: RTQRGTV[/E6/KGUKCEGTGCF)GV/EYTKVG5GV/E W tym przypadku odczyt będzie się odbywał za pomocą metody )GV/E, a ustawianie właściwości /E poprzez metodę 5GV/E. Skoro tak, to trzeba zadeklarować obie metody: RWDNKE RTQEGFWTG5GV/E EQPUV8CNWG6/KGUKCEG  HWPEVKQP)GV/E6/KGUKCEG RTQEGFWTG9[RGNPKLAKAWUVCYAOE  Do sekcji RWDNKE dodałem również metodę, która wypełni i odpowiednio ustawi listę, z której będzie można wybierać odpowiednie wartości iY[RGNPKLAKAWUVCYAOE . Do pełnej funkcjonalności komponentu przydałoby się jeszcze odpowiednie oprogra- mowanie zdarzeń, jakie zajdą, gdy użytkownik komponentu zmieni wartość miesiąca na inny. W tym celu dodamy obsługę zdarzenia. Oto fragment kodu związany z obsługą zdarzenia: 6/9 QODQ$QZENCUU 6 QODQ$QZ RTKXCVG H1P JCPIG60QVKH[ XGPV RTQVGEVGF RTQEGFWTG OKCPCF[PCOKE RWDNKUJGF RTQRGTV[1P JCPIG60QVKH[ XGPVTGCFH1P JCPIGYTKVG(1P JCPIG GPF Została zadeklarowana zmienna H1P JCPIG typu 60QVKH[ XGPV, przy czym ten ostatni ma następującą deklarację: V[RG60QVKH[ XGPVRTQEGFWTG 5GPFGT61DLGEV QHQDLGEV Zdarzenie będzie również właściwością: RTQRGTV[1P JCPIG60QVKH[ XGPVTGCFH1P JCPIGYTKVG(1P JCPIG a odczyt i ustawianie będzie się odbywało poprzez zmiienną H1P JCPIG. Istnieje jeszcze metoda: RTQEGFWTG OKCPCF[PCOKE którą wywołam na koniec operacji związanych z ustawiieniem zmiennej (5GV/E). Cały kod przygotowanego komponentu przedstawia się nasitępująco (listing 10.5): 218 Delphi 7 i bazy danych Listing 10.5. Końcowa postać modułu realizującego obsługę kontrolki WPKV6T[ QODQ$QZ KPVGTHCEG WUGU 5[U7VKNU NCUUGU QPVTQNU5VF VTNU V[RG 6/KGUKCEG 6/9 QODQ$QZENCUU 6 QODQ$QZ RTKXCVG H/E6/KGUKCEG H1P JCPIG60QVKH[ XGPV RTQVGEVGF RTQEGFWTG OKCPCF[PCOKE RWDNKE RTQEGFWTG5GV/E EQPUV8CNWG6/KGUKCEG  HWPEVKQP)GV/E6/KGUKCEG RTQEGFWTG9[RGNPKLAKAWUVCYAOE  EQPUVTWEVQT TGCVG #1YPGT6 QORQPGPVR2CTGPV69KP QPVTQN  RWDNKUJGF RTQRGTV[1P JCPIG60QVKH[ XGPVTGCFH1P JCPIGYTKVG(1P JCPIG RTQRGTV[/E6/KGUKCEGTGCF)GV/EYTKVG5GV/E GPF RTQEGFWTG4GIKUVGT KORNGOGPVCVKQP RTQEGFWTG4GIKUVGT DGIKP 4GIKUVGT QORQPGPVU 75 4 =6/9 QODQ$QZ?  GPF EQPUVTWEVQT6/9 QODQ$QZ TGCVG #1YPGT6 QORQPGPVR2CTGPV69KP QPVTQN  DGIKP KPJGTKVGF TGCVG #1YPGT  2CTGPVR2CTGPV 9KFVJ 9[RGNPKLAKAWUVCYAOE  GPF RTQEGFWTG6/9 QODQ$QZ OKCPC  DGIKP KH#UUKIPGF H1P JCPIG VJGPDGIKP (1P JCPIG 5GNH  GPF GPF RTQEGFWTG6/9 QODQ$QZ5GV/E EQPUV8CNWG6/KGUKCEG  XCT RQKPVGIGT UU5VTKPI Rozdział 10. ♦ Podstawy tworzenia komponentów 219 DGIKP H/E8CNWG UU+PV6Q5VT 8CNWG  RQ+VGOU+PFGZ1H UU  KHRQ VJGPDGIKP +VGO+PFGZRQ GPF GNUGDGIKP +VGO+PFGZ GPF  OKCPC  GPF HWPEVKQP6/9 QODQ$QZ)GV/E 6/KGUKCEG DGIKP 4GUWNVH/E GPF RTQEGFWTG6/9 QODQ$QZ9[RGNPKLAKAWUVCYAOE  XCT OEKPVGIGT ;GCT/QPVJ C[*QWT/KP5GE/5GE9QTF FKUKCL6 CVG6KOG RQ+PVGIGT UGGMOE+PVGIGT UU5VTKPI DGIKP KHPQV EU GUKIPKPIKP QORQPGPV5VCVG VJGPDGIKP HQTOEVQFQDGIKP +VGOU#FF +PV6Q5VT OE  GPF GPF FKUKCL0QY   GEQFG CVG FKUKCL;GCT/QPVJ C[  UGGMOEOQPVJ UU+PV6Q5VT UGGMOE  RQ+VGOU+PFGZ1H UU  KHRQ VJGPDGIKP +VGO+PFGZRQ H/E/QPVJ GPF GPF GPF Utworzony kod należy zapamiętać, po czym dobrze by było przetestować działanie powstałego kodu. W systemie pomocy środowiska Delphi pod hasłem Testing unin- stalled components (zakładka Znajdź) znajduje się podpowiedź o tym, jak testować napisany komponent przed jego instalacją w zakładce komponentów. Operację należy wykonać w sześciu krokach. 220 Delphi 7 i bazy danych 1. Dodajemy do sekcji WUGU formularza głównego nazwę modułu zawierającego testowany komponent: 7UGU6T[ QODQ$QZ 2. Dodajemy obiekt do sekcji RWDNKE RWDNKE ]2WDNKEFGENCTCVKQPU_ 1D6/9 QODQDQZ 3. Dodajemy obsługę zdarzenia 1P TGCVG formularza: V[RG 6(QTOENCUU 6(QTO RTQEGFWTG(QTO TGCVG 5GPFGT61DLGEV  GPF 4. Tworzymy egzemplarz obiektu testowanej klasy: RTQEGFWTG6(QTO(QTO TGCVG 5GPFGT61DLGEV  DGIKP 1D6/9 QODQDQZ TGCVG 5GNH(QTO   GPF 5. Ustawiamy właściwość 2CTGPV, jeżeli komponent jest kontrolką. U mnie 2CTGPV to drugi parametr wywołania konstruktora (tutaj (QTO): 1D6/9 QODQDQZ TGCVG 5GNH(QTO  6. Ustawiamy pozostałe (inne) parametry komponentu: 1D.GHV 1D6QR W następnych paragrafach przyjrzymy się bliżej problematyce związanej z podstawami projektowania komponentów bazodanowych.
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Delphi 7 i bazy danych
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: