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
Kylix. Tworzenie
aplikacji
Autorzy: Cary Jensen, Loy Anderson
Tumaczenie: Daniel Kaczmarek (roz. Wprowadzenie, 1- 5,
15 - 17, 19 - 21), Piotr Pilch (roz. 6 - 12), Anna Czerwiska
(roz. 13,14), Piotr Tczyski (roz. 18)
ISBN: 83-7197-651-8
Tytu oryginau: Building Kylix Applications
Format: B5, stron: 714
Przykady na ftp: 433 kB
Kylix to jedno z najbardziej oczekiwanych narzdzi programistycznych ostatnich lat.
Programistom piszcym programy dla systemu Linux brakowao narzdzia RAD,
pozwalajcego na szybkie, wizualne projektowanie i tworzenie gotowych aplikacje.
Std pojawienie si Delphi dla Linuksa, jak mona nazwa Kylix, przyjte zostao
z duym zainteresowaniem. Dziki Kyliksowi mona nie tylko tworzy potne serwery
dla Linuksa, ale te aplikacje posiadajce graficzny interfejs uytkownika.
Ksika Kylix. Tworzenie aplikacji jest przewodnikiem dla programisty, w ktrym
znany ekspert w dziedzinie Kyliksa, Cary Jensen, prezentuje wszystko, co niezbdne,
by w peni zapanowa nad tym najnowszym narzdziem typu RAD poczwszy od
podstawowych czynnoci programistycznych, a skoczywszy na wdraaniu aplikacji
przeznaczonych dla sieci WWW. Nauczysz si wic:
Spis treci
O Autorach............................................................................................13
Wprowadzenie .......................................................................................15
Cz I
19
Spis treci
Cz II
Aplikacje bazodanowe
155
Spis treci
405
10
Cz IV Technologie internetowe
537
Spis treci
11
Praca z HTML.........................................................................................................................555
Przegld HTML ................................................................................................................556
Wysyanie danych do rozszerze serwera WWW przy uyciu HTML ..................................557
Znacznik obrazu................................................................................................................558
Znacznik zakotwiczenia....................................................................................................559
Formularze HTML............................................................................................................560
Kompilacja serwera Apache wykorzystujcego biblioteki DSO............................................565
12
Skorowidz ...........................................................................................679
Rozdzia 8.
Klasa TField
W tym rozdziale:
omwienie pl,
pola stae,
praca z polami w czasie wykonania,
tworzenie nowych pl staych.
Zestaw danych suy do dziaania z jednym lub kilkoma rekordami wynikowego zestawu,
ale nie pozwala na kontrolowanie zachowa w przypadku pojedynczych pl tych rekordw. Do pracy z polami stosuje si obiekty pl, ktre s instancjami klas pochodnych
klasy . Kada z tych klas nich obsuguje okrelony typ pola. Zalenie od wynikowego zestawu, z ktrym pracujemy, bdziemy wykorzystywa egzemplarze rnych
klas, takich jak
,
,
,
,
,
.
W rozdziale tym omwimy stosowanie pl. Na pocztku dokonamy oglnego przegldu
pl, wczajc w to informacje na temat dostpu do pl dynamicznych w czasie wykonania. W dalszej czci zostan przyblione pola stae stosowane w fazie projektowania
do konfiguracji obiektw pl. Zostan omwione nastpujce zagadnienia: tworzenie pl
obliczeniowych, zastosowanie pl wyszukiwania, definiowanie pl agregacji, uycie
walidacji oraz okrelenie ogranicze na poziomie pola.
W rozdziale znajduje si kilka przykadw, ktre prezentuj rne techniki zwizane
z polami. W celu uproszczenia tych przykadw zostanie uyty szablon GetSales, ktry
zosta utworzony w poprzednim rozdziale. Jeeli nie masz tego szablonu to do poprawnego wykonania przykadw zawartych w tym rozdziale wymagane bdzie wykonanie
krokw opisanych w akapicie rozdziau 7. Przygotowanie szablonu komponentw
danych.
Cz II Aplikacje bazodanowe
238
Przegld pl
Pola s jedn z najwaniejszych kategorii obiektw w aplikacjach bazodanowych. Umoliwiaj odczytywanie pojedynczych wartoci pl zestawu rekordw udostpnianych
przez zestawy danych. Jeli zestaw danych pozwala na modyfikacj danych, ktre
zawiera, wtedy obiekty pl su do przypisywania nowych wartoci poszczeglnym
polom (zestaw danych posiada metody pozwalajce na przypisywanie wartoci wielu
polom w pojedynczym zapytaniu).
Obiekty pl pozwalaj take kontrolowa sposb, w jaki poszczeglne pola s wywietlane
w kontrolkach bazodanowych. Na przykad za pomoc pl mona zdefiniowa maski
edycji, ktre okrelaj format i zakres danych wprowadzanych do powizanej kontrolki
bazodanowej. Mona rwnie utworzy ograniczenia i procedury obsugi zdarze, ktre
dokonuj walidacji danych wprowadzanych przez uytkownika.
Domylnie po uruchomieniu zestaw danych tworzy jeden obiekt pola dla kadego powizanego z nim pola. Pola tworzone w ten sposb s okrelane mianem pl dynamicznych. Po uruchomieniu obiekty te udostpniane s przez waciwo Fields zestawu danych lub przy uyciu metody . Ewentualnie mona utworzy
obiekt pola w fazie projektowania.
Tak utworzony obiekt pola okrelany jest mianem pola staego. Pozwala w do prosty sposb w fazie projektowania konfigurowa pole. Podobnie jak w przypadku pola
dynamicznego, pole stae jest w fazie wykonania dostpne przez waciwo Fields
lub przy uyciu metody .
Dostp do pl
Jak wspomniano wczeniej, do dostpu do obiektw pl suy waciwo Fields lub metoda zestawu danych. Typem danych waciwoci Fields jest klasa ,
ktra moe przechowywa odwoanie do kilku pl. Poniej znajduje si deklaracja takiej
klasy.
!"#
$%%
&
&
'%%%
!&
( &
!&
()
&)$&
&)$&
"*
"
!"#
*
"$%%$%
*$%
239
&
&
+
&
"
&+
&
',
,
&
',
,
&
!&
,
!&
-",
,
!&
-"&,
&(,
!&
)
!
&.,
" &( &
"
"/)0(
*!&
Naley zauway, e waciwo Fields w deklaracji klasy jest zarwno waciwoci domyln, jak i indeksowan (klasa moe mie tylko jedn waciwo domyln).
Przy odwoaniu do waciwoci Fields egzemplarza klasy naley poda liczb
cakowit, ktra identyfikuje jeden z obiektw pl zestawu danych. Jeeli waciwo
indeksowana jest domylna to przy odwoaniu do obiektu danej klasy nastpuje odwoanie
do tej waciwoci. Oznacza to, e waciwo Fields zestawu danych jest stosowana
do bezporedniego dostpu do waciwoci Fields instancji klasy . Moe si
to wyda troch niezrozumiae, ale oznacza tylko, e ponisze dwa odniesienia funkcjonalnie s identyczne.
122/30
12/30
240
Cz II Aplikacje bazodanowe
&
+
* ,
&
"
&+ &
:
&+$&
$&$.
&&
&
&
!&
(-&!!: ,- &-
!&
(: , ,
!&
;:-
!&
- - &
!&
$&- &
&.! '&
&-&!!: ,- &
&"$&"&
&$-&!!:
"+--
(+-*+-
"+- - (+- *+-
"+&
"&
"(+&
"*+&
"
"+,,(+,*+,
"+<,,<,,(+<,,
*+<,,
"+ &(+ *+
"+ (+*+
"+(+=*+
"+$$(+$*+$
"+&+&*+&
"
&- (
&
*
&!&
"> !"- (> !"
"&$&$(&$&
"*
"8(8
""""
"",(",
"")(")
"#>'#>'*#>'
"#>':#>'
" (
"&,(&,
")- ()
"&- (&
" '&- ( '&* '&
" '& '&( '&
"*$&$(*$&**$&
"
!!
!!
"
$&$(
$&
":
:
*:
241
Jak mona zauway, klasa zawiera mnstwo informacji na temat kadego pola.
Ponadto poszczeglne pochodne tej klasy posiadaj dodatkowe metody i waciwoci,
ktre maj specyficzne dla nich zastosowanie. Na przykad klasa
zawiera
metody obsugujce adowanie danych z pliku lub ze strumienia.
Cz II Aplikacje bazodanowe
242
na rysunku 8.1.
Rysunek 8.1.
Zastosowanie
waciwoci
Fields zestawu
danych do dostpu
do poszczeglnych
obiektw pl
243
Pola stae
Waciwo Fields zestawu danych to waciwo
, co oznacza, e jest elementem interfejsu czasu wykonania i dostpna jest dopiero po uruchomieniu. Jeli musimy
konfigurowa pola w czasie dziaania aplikacji, naley utworzy pola stae. Pola takie s
tworzone w edytorze pl.
Mona wyrni dwa typy pl staych: pola oparte na polach zestawu danych oraz pola,
ktre na nich nie bazuj. Pola stae oparte na polach zestawu danych dostarczaj odpowiednikw pl dynamicznych w fazie projektowania. Pola niebazujce na polach zestawu
danych nie posiadaj odpowiednika w postaci pl dynamicznych. Do pl tych zaliczaj si:
pola obliczeniowe, wyszukiwania oraz agregacji.
Niestety dokumentacja Kyliksa nie precyzuje, jak nazywa takie specjalne pola stae.
Pola te s okrelane mianem nowych pl staych. Chocia termin nie jest zbyt jasny,
jest zgodny z pozycj menu suc do tworzenia takich pl. Aby utworzy jedno takie
specjalne pole stae, naley klikn prawym klawiszem myszy edytor pl i wybra New
Field, a nastpnie zdefiniowa pole w oknie dialogowym New Field. Ostatecznie w tej
ksice specjalne pola stae bd okrelane terminem nowych pl staych, natomiast
pozostae typy pl staych polami staymi.
Pola stae nie mog wystpowa w zestawie danych razem z polami dynamicznymi. Nawet
jeli tworzy si tylko jedno pole stae dowolnego typu, zestaw danych nie wygeneruje
pl dynamicznych i jedynymi polami, do ktrych bdzie istnia dostp, bd pola stae.
Jeeli mamy komponent SQLClientDataSet uywajcy zapytania do pobrania
dziesiciu pl tabeli i utworzymy tylko jedno pole stae to tylko pole powizane z polem
staym moe by przegldane, edytowane lub na inny sposb udostpnione.
W rezultacie ma to znaczcy wpyw na stosowanie zestaww danych. cile mwic,
w przypadku tworzenia pl staych zmiany w strukturze powizanej tabeli narzuc konieczno dokonania rwnie zmian w tych polach. W niektrych sytuacjach konieczne
bdzie usunicie wszystkich pl staych i ponowne ich dodanie po dokonaniu zmian
w strukturze tabeli lub pl zwracanych przez zapytanie. Jeli zdefiniowano waciwoci
i procedury obsugi zdarze dla usunitych pl staych, naley ponownie skonfigurowa
nowo dodane pola.
Nie trzeba dodawa, e naley dy do tego, aby przy tworzeniu pl staych, na ile to jest
moliwe, unikn dokonywania zmian struktury powizanych tabel.
Jednym ze sposobw realizacji tego zalecenia jest tworzenie aplikacji przy uyciu pl
dynamicznych i nastpnie dodanie pl staych, ale tylko po upewnieniu si, e struktury
danych s prawidowo zaprojektowane. Niestety nieprzewidziane zmiany w strukturze
danych s czasami konieczne i wtedy wie si to rwnie z dodatkowym nakadem
pracy przy polach staych. Wicej na ten temat w dalszej czci rozdziau.
Cz II Aplikacje bazodanowe
244
Tworzenie pl staych
Jak ju wspominalimy wczeniej, pola stae tworzone s w edytorze pl. Aby go otworzy, naley klikn dwukrotnie zestaw danych lub klikn prawym klawiszem myszy
zestaw i wybra edytor pl (patrz rysunek 8.2).
Rysunek 8.2.
Edytor pl
Aby w jednej operacji w edytorze pl doda pola stae dla kadego pola powizanego
zestawu danych, naley wcisn klawisze Ctrl+F lub klikn prawym klawiszem myszy
okno edytora, a nastpnie wybra opcj Add All Fields. W celu dodania nowego pola
staego naley wcisn klawisze Ctrl+N lub klikn prawym klawiszem myszy okno
edytora, a nastpnie wybra opcj New Fields. Operacja dodania nowego pola staego
zostaa opisana w dalszej czci rozdziau.
245
Aby umoliwi zarzdzanie polami staymi, edytor pl posiada rwnie prosty nawigator po zestawie danych stosowany w fazie projektowania. Za pomoc czterech
przyciskw nawigacji znajdujcych si w grnej czci edytora pl mona przechodzi do pierwszego, nastpnego, poprzedniego i ostatniego rekordu zestawu danych,
ktry jest wywietlony w edytorze. Moe to by przydatne w fazie projektowania,
gdy otwarty jest zestaw danych i chcemy zobaczy dane w dowolnej kontrolce bazodanowej dodanej do interfejsu uytkownika.
Konfiguracja pl staych
Pola stae konfigurowane s w fazie projektowania przy uyciu okna Object Inspector.
Aby rozpocz konfiguracj, naley wybra pole w edytorze pl lub z listy obiektw
okna Object Inspector. Rysunek 8.4 przedstawia okno Object Inspector z zaznaczonym
egzemplarzem klasy
.
Rysunek 8.4.
Po zaznaczeniu pola
staego w edytorze
pl jego waciwoci
mog by ustawiane
w oknie Object
Inspector
Wielu waciwoci pola staego uywaj inne obiekty, ktre z nim wsppracuj. Na przykad domylne obiekty kolumn tworzone przez komponent DBGrid stosuj waciwo
DisplayLabel pola staego do definiowania tekstu nagwka kolumny. Podobnie waciwoci Alignment oraz DisplayFormat wpywaj na zawarto pola wywietlanego w kontrolkach bazodanowych.
Poniej zostay opisane niektre waciwoci, ktre s ustawiane w fazie projektowania.
W celu prezentacji zostanie utworzony prosty projekt, ktry zostanie rwnie wykorzystany w dalszej czci rozdziau do pokazania innych technik i funkcjonalnoci.
1. Utwrz nowy projekt.
2. Wybierz z menu File/New, a nastpnie kreator Data Module z zakadki New
Cz II Aplikacje bazodanowe
246
W dalszej czci rozdziau zostan ustawione w fazie projektowania waciwoci niektrych obiektw pl staych utworzonych w powyszym projekcie. Edytor pl moe zosta
otwarty, poniewa bdzie przydatny przy wybieraniu pola, ktre zostanie skonfigurowane
w oknie Object Inspector. Jeli jednak zosta zamknity, wtedy w celu jego ponownego
otwarcia wystarczy klikn dwukrotnie komponent SQLClientDataSet. Po otwarciu edytor
pl wywietli wszystkie pola stae, ktre zostay zdefiniowane dla zestawu danych.
247
Projekt ten nie zawiera kodu obsugujcego zapis zmian dokonanych na danych.
W celu ich zapisania w tabeli SALES konieczne bdzie wykonanie odwoania do
metody . Przykadowy kod realizujcy to zadanie znajduje si na kocu
rozdziau 6.
Opis
Zero reprezentuje dokadnie jedn cyfr. Aby wywietli sta ilo miejsc po
przecinku, naley uy tego specyfikatora w uamkowej czci definiowanego
formatu. Aby wstawi zera pocztkowe, naley umieci 3 w czci cakowitej
definiowanego formatu.
Jeli w definicji formatu pojawi si znak A, wtedy zostan wywietlone separatory
czci tysicznej. Znakiem stosowanym do oddzielania czci tysicznej jest
znak, ktry zosta zdefiniowany w systemie operacyjnym.
Znak 2 , poprzedzony przez jeden lub kilka znakw D lub 3 stosowany jest
w celu doczenia kropki rozdzielajcej cz dziesitn od cakowitej. Znakiem
stosowanym do oddzielania czci dziesitnej od cakowitej jest znak, ktry
zosta zdefiniowany w systemie operacyjnym.
#C
499E
&
*4
Cz II Aplikacje bazodanowe
248
Dziaanie
AD233
333333233
Wywietla wszystkie cyfry, w tym sze dla czci cakowitej a dwie dla
dziesitnej. W tym przypadku brak separatorw czci tysicznej. Liczby
zawierajce pi lub mniej cyfr w czci cakowitej zostan wywietlone
z uyciem zer pocztkowych.
AD2DD44AD2DD44
4F4DA233
D23344D2334448 4 Wywietla zarwno dodatnie, jak i ujemne liczby z dokadnoci do dwch
249
Waciwo EditFormat rwnie wykorzystuje specyfikatory waciwoci DisplayFormat. Podstawow rnic jest to, e waciwo EditFormat ma wpyw na wywietlanie pola tylko wtedy, gdy znajduje si ono w trybie edycji. Jeli na przykad operacje
wykonane w powyszych krokach, majce na celu zdefiniowanie formatu wywietlania,
zostayby zastosowane wobec waciwoci EditFormat, a nie DisplayFormat, wtedy
aby zobaczy wymagane dwa miejsca po przecinku, naleaoby najpierw wej w tryb
edycji pola.
Cz II Aplikacje bazodanowe
250
Tabela 8.3. Specyfikatory stosowane do tworzenia maski edycji
Specyfikator
Opis
W tym miejscu mona wstawi drukowany znak, ale nie jest to wymagane.
W tym miejscu mona wstawi liczb lub znaki 'C', 'B', ale nie jest to wymagane.
W tym miejscu mona wstawi liter lub liczb, ale nie jest to wymagane.
Wszystkie litery wstawione po znaku 'J' maski zostan zamienione na due litery.
Wszystkie litery wstawione po znaku 'K' maski zostan zamienione na mae litery.
KJ
Dla wszystkich liter wstawionych po znakach 'KJ' maski nie zostanie dokonana
zmiana ich wielkoci.
Dowolny znak, ktry zostanie wstawiony za tym znakiem, jest sta acuchow
i jako taki zostanie wywietlony. Mona go zastosowa w celu dodania do maski
dowolnego znaku, w tym specyfikatorw lub znaku rednika. Kady znak, ktry
nie jest wykorzystywany przez mask, moe zosta w niej wstawiony bez uywania
znaku 'H' i bdzie traktowany jak staa acuchowa.
Kolejne kroki dodaj powysz mask edycji do pola staego PO_NUMBER. Zastosowany projekt zosta utworzony na pocztku tego rozdziau.
1. W oknie Object Inspector wybierz pole TOTAL_VALUE. W tym celu naley uy
251
Cz II Aplikacje bazodanowe
252
Przy definiowaniu ogranicze na poziomie pola naley rwnie skonfigurowa dwie waciwoci pola: CustomConstraint oraz ConstraintErrorMessage. Waciwoci CustomConstraint przypisywane jest wyraenie logiczne SQL, natomiast waciwo ConstraintErrorMessage okrela tekst wyjtku, ktry zostanie wywoany, jeli ograniczenie nie
zostanie spenione.
Wyraenie SQL typu booleowskiego dotyczy tylko pola, do ktrego zostao przypisane
ograniczenie. cile mwic, wyraenia takie mog si tylko odnosi do wartoci
wstawionej w polu rekordu znajdujcego si w buforze, w funkcjach SQL lub operatorach porwnania i staych. Wyraenie SQL nie moe odnosi si do wartoci innych pl
tego samego rekordu. Aby utworzy ograniczenie, ktre dotyczy wartoci dwch lub
wicej pl tego samego rekordu, naley zastosowa ograniczenia na poziomie zestawu
danych lub posuy si procedur obsugi zdarzenia OnValidate.
Nazwa, ktra zostanie uyta w wyraeniu typu booleowskiego do odwoywania si do
pola jest dowolna, jednak nie moe by jednym z zastrzeonych sw kluczowych jzyka
SQL. Na przykad ponisze dwa acuchy po wstawieniu do waciwoci CustomConstraint pola spowoduj identyczny efekt.
:
65>-#.
5
)
5
Nie ma tu znaczenia, e % nie jest nazw pola powizanego zestawu wynikowego, poniewa Kylix automatycznie stwierdza, e ma by wykonane odwoanie do wartoci pola,
z ktrym powizane jest ograniczenie. Co wicej, acuch PO_NUMBER zachowa si
identycznie, co oznacza, e wyraenie to jest poprawne, nawet jeli pole, do ktrego
jest ono przypisane, nie ma nazwy PO_NUMBER.
253
Ponisze kroki pokazuj, jak doda ograniczenia do projektu, ktry zosta utworzony
na pocztku rozdziau.
1. W oknie Object Inspector wybierz pole DISCOUNT. W tym celu naley uy
booleowskiego:
J 3
5. Zamknij aplikacj.
Praca z polami
Wszystkie operacje wykonane w fazie projektowania w rodowisku IDE mog by
zrealizowane rwnie w fazie wykonania. Mona na przykad w fazie projektowania
w Kyliksie ustawi publikowane waciwoci, takie jak CustomConstraint, DisplayFormat, lub po uruchomieniu w postaci kodzie metody lub procedury. Jednak odwrotna
zaleno nie zawsze jest moliwa. cile mwic, pewnych operacji, ktre mona
wykona po uruchomieniu nie da si zrealizowa w fazie projektowania. Nale do nich:
wstawianie w polu nowych wartoci, zapisywanie wartoci pola na dysku (pola memo
lub blob) oraz okrelenie rozmiaru danych pola.
Cz II Aplikacje bazodanowe
254
W dalszej czci rozdziau zostan omwione operacje na polach, ktre mona wykona
w fazie wykonania. Nale do nich: odczyt i zapis danych pl powizanej bazy danych
oraz walidacja wartoci pola przy uyciu procedury obsugi zdarzenia OnValidate.
Aby dokona zapisu pola, zestaw danych musi znajdowa si w jednym z dwch stanw:
dsEdit lub dsInsert. Jeli jest to pole wyliczeniowe, wtedy zapis do niego moliwy
jest tylko w stanach dsCalcFields lub dsInternalCalc. Do okrelenia aktualnego stanu
zestawu danych suy waciwo State, natomiast metody ( lub
su do
zmiany jego stanu, jeli jest to moliwe. Zestaw danych, ktrego waciwo CanModify
zwraca warto False, nie moe by modyfikowany. Uruchomienie metody ( lub
na takim zestawie danych spowoduje wywoanie wyjtku.
Zakadajc, e pole ORDER_STATUS jest pitym polem powizanego zestawu danych,
poniszy kod przypisuje warto temu polu dla aktualnego rekordu.
<12/P02& 44
Indeks waciwoci Fields liczony jest od zera. Aby odwoa si do pierwszego pola,
naley uy zera, a w przypadku pitego (jak w tym przykadzie) indeks ma warto 4.
Jeli utworzono pola stae, mona si nimi posuy do bezporedniego odwoywania
si do pl zamiast stosowania odwoywania za pomoc zestawu danych.
W projekcie modyfikowanym w kilku przykadach tego rozdziau utworzono jedno
pole stae dla kadego pola powizanego zestawu danych. Odwoanie przez pole stae do
pola ORDER_STATUS ma nazw SQLClientDataSet1ORDER_STATUS. Poprzedni
lini kodu mona zastpi ponisz:
<1
.#.6+52$& 44
255
Jeli przyjrzymy si obu liniom kodu, zauwaymy, e ta, ktra odwouje si bezporednio
przez pole stae zawiera wicej znakw, co wie si z wiksz pracochonnoci. Jest
tak tylko dlatego, e do pola staego zostaa przypisana domylna nazwa. Po dodaniu
pola staego do edytora pl mona w oknie Object Inspector zmieni warto waciwoci przechowujcej jego nazw. Po wybraniu krtkiej nazwy, takiej jak OS_FLD,
kod rwnie bdzie znacznie krtszy, co wida w poniszym przykadzie.
62$& 44
w grnym panelu.
2. Ustaw warto waciwoci Caption przycisku Button1 na Zamie na due
256
Cz II Aplikacje bazodanowe
* #
"
#77'"*
&#
-",4
.#.6+542$&
5-",4
.#.6+542$&
:
)
77.' &M"*"2 &2
77"
)
77* !
!"
#
77"
77*<1
257
Rysunek 8.10.
Kod powizany
z przyciskiem
Zamie na due
litery warto pola
ORDER_STATUS
przeszukuje rekordy
zestawu danych
i zamienia
zawarto pola
ORDER_STATUS
na due litery
Cz II Aplikacje bazodanowe
258
Ponisze kroki opisuj operacj definiowania walidacji na poziomie pola przy uyciu
procedury obsugi zdarzenia OnValidate. W tym przypadku procedura ta uyta dla
pola DATE_NEEDED sprawdzi, czy uytkownik wprowadzi poprawn dat, czyli dat
ktra nie jest dat z przeszoci.
1. Otwrz modu danych projektu, ktry by wykorzystywany w poprzednich
przykadach rozdziau.
2. Dodaj ponisz definicj typu w czci
moduu. Zostay w niej
zdeklarowane dwie nowe klasy (%
. Pierwsza z nich (+
(%
zdarzenia OnValidate.
5. Wprowad do niej poniszy kod:
&> &Q2<1+#6###$
!2+,K
##)
24+#6###, M"N4C
4R889R24
6. Zapisz projekt i uruchom go. Wstaw nowy rekord i podaj dat starsz ni data
259
Cz II Aplikacje bazodanowe
260
261
Drugi segment zawiera ponisze przypisania zmiennych, ktre dodawane s do procedury obsugi zdarzenia OnCreate moduu danych:
&> &Q2> &
*<1
+#:
65>-#.
-",4:
65>-#.4
+#56
-",456
4
+#+#6.#:
-",4+#6.#:4,
+#
.#.6+5
-",4
.#.6+54
+#
.#.6+#
-",4
.#.6+#4<,,
+#;:6+#
-",4;:6+#4<,,
+#+#6###
-",4+#6###4<,,
+#:+
-",4:+4
+#<S6
.#.#
-",4<S6
.#.#4
+#
+6$+5#
-",4
+6$+5#4-
+#
5
-",4
54
+##>6S:#
1-S,4#>6S:#4
+#+(#
-",4+(#4
Cz II Aplikacje bazodanowe
262
:
)
77.' &M"*"2 &2
77"
)
77* !
!"
#
77"
77*<1
Chocia zastosowanie tej techniki dostpu do pola wymaga wikszej iloci kodu, dokonywanie dowolnych zmian w strukturze tabeli moe by realizowane cakowicie w samym
module danych, co eliminuje potrzeb modyfikowania odwoa do pl w innych elementach aplikacji. Godny uwagi jest fakt, e jeli struktura danych czsto si zmienia, wtedy
w celu uatwienia zarzdzania aplikacj mona zastosowa zmienne pola.
263
Warto pola obliczeniowego okrelana jest po uruchomieniu aplikacji w oparciu o procedur obsugi zdarzenia OnCalcFields. Procedura obsugi zdarzenia OnCalcFields
do okrelenia wartoci pola wykorzystuje dane jednego lub kilku pl wynikowego zestawu.
Na przykad pole obliczeniowe moe zawiera poczenie wartoci pl przechowujcych
imiona i nazwiska lub wywietla dat zapaty faktury obliczon na podstawie wartoci
pola tabeli zawierajcego dat sprzeday oraz pola okrelajcego liczb dni, ktre ma
kupujcy do zapaty.
Pole wyszukiwania wywietla dane z innego powizanego wynikowego zestawu. Na przykad tabela SALES zawiera pole SALES_REP, przechowujce numer pracownika, ktry
dokona operacji sprzeday. Poniewa w bazie danych znajduje si rwnie tabela
EMPLOYEE zawierajca pole EMP_NO, ktrego wartoci odpowiadaj wartociom
pola SALES_REP i posiada te pole FULL_NAME, mona wtedy utworzy pole wyszukiwania dla tabeli SALES, ktre wywietli wartoci pola FULL_NAME.
Pole wewntrznych oblicze podobne jest do pola obliczeniowego. Rnica polega
jedynie na tym, e jego warto nie musi by kadorazowo obliczana, gdy wywoywana
jest procedura obsugi zdarzenia OnCalcFields. Procedura ta jest uruchamiana zawsze,
gdy wywietlana jest warto pola, ale poniewa komponent ClientDataSet przechowuje
w pamici podrcznej wartoci ju obliczonych pl wewntrznych, wtedy wystarczy j
tylko okreli, gdy jest wywietlana po raz pierwszy lub gdy zostanie zmodyfikowany
rekord. W przypadku stosowania pl wewntrznych oblicze naley sprawdzi warto
waciwoci State powizanego zestawu danych klienta. Jeli jest to warto dsInternalCalc, wtedy konieczne bdzie wykonanie ponownego obliczenia.
Pole agregacji wywietla statystyki podsumowujce, takie jak suma lub rednia obliczone
na rekordach zestawu danych klienta. Wemy dla przykadu pole TOTAL_VALUE tabeli
SALES. Pole agregacji moe suy do wywietlenia sumy pola TOTAL_VALUE dla
kadego klienta. Aby zastosowa pola agregacji, zestaw danych klienta musi posiada
indeks, ktry uporzdkuje dane zgodnie z obliczanymi wartociami pola. Na przykad
w celu obliczenia sumy pola TOTAL_VALUE dla kadego klienta, naley zastosowa
indeks, ktry posortuje dane wedug klienta.
Najczciej stosowanymi typami nowych pl staych s: pola obliczeniowe, wyszukiwania oraz agregacji. Kade z nich omwimy w dalszej czci rozdziau.
Cz II Aplikacje bazodanowe
264
dwukrotnie.
3. Kliknij prawym klawiszem myszy edytor pl i wybierz New Fields. Kylix
6. Aby zamkn okno dialogowe New Field, nacinij OK, a nastpnie dodaj
265
Tworzenie pl wyszukiwania
W rozdziale 7. pokazano, jak skonfigurowa komponent DBLookupListBox, aby wywietla na licie wartoci pola FULL_NAME tabeli EMPLOYEE w oparciu o wartoci
pola SALES_REP tabeli SALES. Oprcz tego wspomnielimy, e do zmiany wartoci
pola SALES_REP tabeli SALES mona uy komponentu DBLookupListBox.
Stae pola wyszukiwania mog znale podobne zastosowanie. Pole wyszukiwania na
pewno wywietli powizane dane z innego zestawu danych. Ponadto gdy pole takie pojawi
si w komponencie DBGrid, to domylnie siatka pozwoli uytkownikowi ustawi pole
wyszukiwania w trybie edycji, co spowoduje pojawienie si przycisku menu rozwijanego.
Gdy uytkownik kliknie ten przycisk, moe w celu zmiany wartoci pola wybra odpowiadajce mu wartoci wyszukiwania. Inaczej mwic, pole wyszukiwania wywietlone
w siatce tworzy pole, ktre zachowuje si podobnie jak komponent DBLookupComboBox.
Cz II Aplikacje bazodanowe
266
Ponisze kroki opisuj proces tworzenia staego pola wyszukiwania dla pola SALES_REP
tabeli SALES projektu ju wczeniej wykorzystywanego w tym rozdziale.
1. Wywietl modu danych projektu uywanego w poprzednich przykadach.
2. Dodaj do moduu danych kolejny komponent SQLClientDataSet z zakadki
dwukrotnie.
4. Kliknij prawym klawiszem myszy edytor pl i wybierz New Fields.
czynnoci pola Key Fields oraz Dataset Fields znajdujce si poniej sekcji
Lookup definition powinny by aktywne. Ustaw warto pola Key Fields na
SALES_REP, natomiast Dataset na SQLClientDataSet2. Teraz pola Lookup
Keys oraz Result Field powinny si uaktywni. Ustaw warto pola Lookup
Keys na EMP_NO, natomiast Result Field na FULL_NAME. Aby zapisa
nowe pole wyszukiwania, kliknij przycisk OK.
7. Zapisz projekt i uruchom go. Nastpnie przewi siatk komponentu DBGrid
267
Definiowanie pl agregacji
Pola agregacji dokonuj wyliczenia prostych statystyk w oparciu o grup rekordw.
Zaliczaj si do nich: suma, rednia, warto maksymalna i minimalna. Grupami rekordw,
na ktrych dokonywane s obliczenia, mog by wszystkie rekordy wynikowego zestawu
albo jeden lub kilka rekordw, ktre wykorzystuj podobne wartoci jednego lub kilku
poindeksowanych pl. Wemy dla przykadu tabel SALES stosowan w poprzednich
przykadach tego rozdziau. Mona utworzy pole agregacji, ktre obliczy sum wartoci
pola TOTAL_VALUE dla caego wynikowego zestawu. Jeli utworzymy indeks pola
CUST_NO, mona wtedy rwnie wykreowa pole agregacji, ktre obliczy sum wartoci
pola TOTAL_VALUE dla kadego klienta.
Pola agregacji nie dziaaj prawidowo w pocztkowej wersji Kyliksa. Aby sprawdzi,
czy dostpna jest poprawka usuwajca ten bd, zajrzyj na stron producenta pod
adresem www.borland.com. Mona rwnie zobaczy, czy na stronie autora tej
ksiki, pod adresem http://www.jensendatasystems.com/bka_book.htm, s informacje dotyczce moliwoci uzyskania najnowszych aktualizacji Kyliksa.
moe rwnie dotyczy innych pl, ale pola, ktre maj zosta pogrupowane,
musz si znale na jego pocztku. Aby na przykad indeks dotyczy pola
CUST_NO, wtedy musi by ono pierwszym jego polem. Zatem zarwno indeks
oparty na polu CUST_NO, jak i indeks oparty na polach CUST_NO oraz
PO_NUMBER bdzie poprawny tak dugo, jak pole CUST_NO bdzie jego
pierwszym polem.
2. Utwrz nowe stae pole agregacji.
3. Przypisz do waciwoci IndexName tego pola nazw indeksu, ktry posuy
grupowaniu.
4. Zdefiniuj wyraenie agregacji. Mog by w nim uyte nastpujce operatory:
, , ,
,
oraz %. Operator moe by zastosowany
&56
+6$+5#B
+6$+5#L
5
&,
+$+5#L133
&,
+6$+5#L5>
5
Cz II Aplikacje bazodanowe
268
Ponisze kroki opisuj proces tworzenia pola agregacji wywietlajcego sum wartoci
pola TOTAL_VALUE wedug wartoci pola CUST_NO.
1. Otwrz modu danych projektu wykorzystywanego w poprzednich przykadach
rozdziau.
2. Wybierz komponent SQLClientDataSet1.
3. W oknie Object Inspector wybierz waciwo IndexDefs komponentu
269
7. W polu Name Field wpisz "#)( i nastpnie ustaw opcj Field Type na
Aggregate. W celu zamknicia okna dialogowego New Field nacinij przycisk OK.
8. Utworzone pole agregacji pojawi si w edytorze pl. W przeciwiestwie do innych
Cz II Aplikacje bazodanowe
270
Rysunek 8.18.
Pole agregacji
zmienia si
automatycznie
w przypadku
przechodzenia
midzy rekordami
klientw i ich edycji