Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Wstp ............................................................................................... 7
Rozdzia 1. Przykadowa baza danych................................................................... 9
Analiza problemu ................................................................................................................9
Model bazy danych ...........................................................................................................10
Uwagi na temat implementacji..........................................................................................14
Podsumowanie ..................................................................................................................16
Spis treci
5
Table................................................................................................................................174
UpdateSQL......................................................................................................................187
StoredProc .......................................................................................................................191
Podsumowanie ................................................................................................................193
Rozdzia 10.
Podstawy tworzenia
komponentw
Wstp
W tym rozdziale chciabym przedstawi podstawy zwizane z tworzeniem komponentw bazodanowych. Korzystajc ze rodowiska Delphi, uywamy przede wszystkim biblioteki VCL (ang. Visual Components Library). Jak sama nazwa sugeruje,
VCL to biblioteka komponentw. Komponenty te maj nie tylko charakter komponentw wizualnych. Na bibliotek skadaj si rwnie komponenty niewizualne,
kontrolki zbiorw danych, komponenty zwizane z Internetem oraz klasy. Komponenty mona podzieli na grupy:
Komponenty (wywodz si od klasy );
Kontrolki niewizualne (wywodz si od klasy );
Kontrolki wizualne (wywodz si od klasy
), a w nich:
Podstawowe informacje
Podstawowa klas dla wszystkich komponentw jest klasa . Jednak klasa
ta ju dziedziczy po klasie (nazwa klasy pochodzi od ang. persistent
trway). Celowo nie wspominam tutaj o klasie , od ktrej dziedzicz wszystkie
klasy, w tym rwnie klasa (listing 10.1).
210
W ramach interfejsu publicznego klasa udostpnia przede wszystkim metod
, ktra kopiuje aktualn warto obiektu.
Definicj klasy znajdziemy w pliku (dla domylnej instalacji Delphi) C:\pro
gram files\borland\delphi7\source\rtl\common\classes.pas. Klasa ta jest do rozbudowana, dlatego podam tutaj tylko jej fragment (gwnie jej interfejs publiczny). Warto
przyjrze si poszczeglnym skadnikom klasy, aby si przekona, jakie podstawowe
cechy posiada kady komponent (listing 10.2):
Listing 10.2. Fragment definicji klasy TComponent
'$
( ))
( ))
'$*
" '$
%
$ '$%
$
+
'$ +
) +
'$
'$
,,,
'
" '$
#
-
#'$
#
. -
-
#
$
'$ %
$ '$
%
'$ '$
*$ %
'$ '$
*
!
'$ '$ #
$
!%
$
&
/
-
#
$
)'$'$ '$
*$'$'$ '$
'$)'$ -
'
..
. /*
0
-
-
#
$
211
212
W podanym przykadzie w ramach ptli (na przykad: wewntrz formularza) przejrzymy wszystkie komponenty znajdujce si na formularzu. Jeeli komponentem jest
komponent klasy , wwczas zostanie dla niego zmieniona wielko aktualnie
wykorzystywanej czcionki na rozmiar 12 punktw.
Wiemy ju, e komponenty posiadaj waciwoci i metody. Domylamy si rwnie,
e komponenty potrafi reagowa na wystpienie pewnych zdarze. Zakadka events
(w oknie Object Inspector) wikszoci komponentw zawiera bogat list zdarze,
jakie mona dla nich oprogramowa. Jednoczenie, jak o tym wspomniaem wczeniej,
213
Podejcie tradycyjne
Aby wej agodnie w wiat projektowania komponentw, zademonstruj, jak na pewnych etapach mona osign pozornie skomplikowany cel, jakim jest utworzenie
komponentu. W wielu programach korzystaem z komponentu klasy , ktry
suy mi m. in. do wyboru miesica (w zakresie 1 12). Najprostszym rozwizaniem
jest umieszczenie na formularzu komponentu oraz wstpne wypenienie jego
waciwoci wartociami od 1 do 12 reprezentujcych kolejne miesice. Wobec
tego komponentu nazwijmy go miaem jeszcze jeden wymg. Ot potrzebowaem, aby pocztku swej pracy komponent na by ustawiony na warto, jak posiada aktualny miesic. Narzuca si naturalne i proste rozwizanie, aby skorzysta z klas
i odpowiednio oprogramowa zachowanie si nowej klasy tak, aby speniaa moje oczekiwania. W tym celu utworzyem now klas dziedziczc wprost od klasy .
Oryginalny konstruktor klasy ma posta:
" '$
214
Takie jest tradycyjne podejcie. Proste i skuteczne (peny kod znajduje si w przykadowym projekcie o nazwie "
#$ w c:\helion\przyklady\komponenty\krok1\source\
Przyklad28). Ale ma swoj wad. Przejawia si ona gwnie tym, e jeeli na przykad
projektujemy okno dialogowe posiadajce wiele obiektw kontrolnych w postaci komponentw, takich jak na przykad %, %, & , itd., to
wygodnie jest albo wszystkie komponenty umieszcza na formularzu cigajc je
z palety komponentw, albo wszystkie je tworzymy w locie, jak w przykadzie powyej. Metoda polegajca na mieszaniu tych dwch metod jest chyba najgorszym z rozwiza. Rozwizaniem najbardziej sensownym jest utworzenie komponentu realizujcego te samo zadanie.
215
komponentu;
Palette Page naley poda nazw istniejcej (lub nowej) palety, na ktrej
komponentu;
Search Path (cieka poszukiwa) najczciej nie trzeba tutaj nic zmienia.
216
Nie ma tutaj specjalnych niespodzianek. Mamy w zasadzie szkielet klasy i jedn procedur o nazwie ) . Deklaracja metody ) jest nastpujca:
*'$
'$'
# '$'
Procedura ) dokona rejestracji komponentu na karcie o nazwie *+%).
Aby tworzony komponent mg zachowywa si jak jego przodek klasy ,
trzeba do sekcji
doda konstruktor, za pomoc ktrego wywoamy konstruktor
przodka. Ja rozszerzyem moliwoci konstruktora o moliwo przyjcia parametrw
klasy podstawowej.
'
" '$
='
Nowa waciwo pojawi si w oknie Object Inspector z tak sam nazw. Aby mc
ustawia t waciwo, trzeba zadeklarowa odpowiedni zmienn w sekcji prywatnej.
Zmienna ta powinna przyjmowa wartoci tylko z zakresu od 1 do 12. Aby tak si stao,
utworzyem nowy typ:
#
<
:,,:;
217
Przy czym odczyt (po sowie: read) odbywaby si ze zmiennej - , a zapis (po sowie:
write) do tej samej zmiennej - . W podanym wczeniej fragmencie kodu podaem
drugi sposb osignicia tego samego celu:
# < <
!< " <
Do sekcji
dodaem rwnie metod, ktra wypeni i odpowiednio ustawi list,
z ktrej bdzie mona wybiera odpowiednie wartoci !
..!./0.
Do penej funkcjonalnoci komponentu przydaoby si jeszcze odpowiednie oprogramowanie zdarze, jakie zajd, gdy uytkownik komponentu zmieni warto miesica
na inny. W tym celu dodamy obsug zdarzenia. Oto fragment kodu zwizany z obsug
zdarzenia:
<='$-.
'$-.
'&
%#
G$
#
$
&
# '&
%#
'&
" '&
Zostaa zadeklarowana zmienna - typu -%,, przy czym ten ostatni
ma nastpujc deklaracj:
# %#
218
219
<
4
)4
6
)$,).
6 @ 9: &
)$).
6
)$).
9:
G$
<='$-.,!< <
*
<
<='$-.,=#77
"7$
$
?
( <&(
#( /( <( ( < =
6
$
6 )
1$ )
'$
&
$
: :;
)$,)$
6
%"
6
( ?
( <&(
#
1$
$&
)1$
6
)$,).
6 @ 9: &
)$).
6
<
<&
,
220
testowany komponent:
0 #'$-.