You are on page 1of 43

IDZ DO

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:

Posugiwa si zintegrowanym rodowiskiem programistycznym Kyliksa


Konfigurowa i rozszerza moliwoci edytora kodu rdowego
Usuwa bdy z programw
Wykorzystywa biblioteki CLX
Tworzy aplikacje bazodanowe w Kyliksie
Pisa aplikacje internetowe dziaajce po stronie serwera
Tworzy wasne serwery internetowe

Spis treci
O Autorach............................................................................................13
Wprowadzenie .......................................................................................15

Cz I

Tworzenie aplikacji w Kyliksie

19

Rozdzia 1. Wprowadzenie do Kyliksa.......................................................................21


Przegld Kyliksa .......................................................................................................................21
Tworzenie aplikacji przy uyciu komponentw.................................................................22
Kylix generuje kod rdowy .............................................................................................25
Kylix jako rodowisko programowania sterowane zdarzeniami ........................................27
Programowanie zorientowane obiektowo...........................................................................28
Open Tools API w Kyliksie................................................................................................28
Czym jest Rapid Application Development? .....................................................................29
Kylix dla programistw Delphi.................................................................................................29
Kylix i Linux.......................................................................................................................31
Przegld CLX .....................................................................................................................32
Puapki i sztuczki................................................................................................................34

Rozdzia 2. Tworzenie aplikacji ................................................................................39


Tworzenie najprostszej aplikacji...............................................................................................39
Tworzenie nowego projektu ...............................................................................................40
Umieszczanie i konfigurowanie komponentw..................................................................43
Procedury obsugi zdarze..................................................................................................45
Dodawanie menu ................................................................................................................48
Wykorzystanie dodatkowych form i okien dialogowych ...................................................51
Uruchamianie projektu z wiersza polece..........................................................................62
Pliki projektu Kyliksa ...............................................................................................................64
Plik rdowy projektu .......................................................................................................64
Modu..................................................................................................................................65
Plik formy ...........................................................................................................................66
Modu skompilowany .........................................................................................................66
Plik wykonywalny ..............................................................................................................66
Pliki zmodyfikowane ..........................................................................................................67
Plik ustawie projektu ........................................................................................................67
Plik ustawie kompilatora projektu ....................................................................................67

Rozdzia 3. Architektura RAD Kyliksa ......................................................................69


Wizualne dziedziczenie form....................................................................................................69
Zmiana waciwoci obiektw dziedziczonych..................................................................73
Pokrywanie procedur obsugi zdarze w obiektach potomnych ........................................73
Dziedziczenie form z projektu biecego...........................................................................76
Definiowanie wspdzielonego repozytorium obiektw ....................................................77

Kylix. Tworzenie aplikacji


Projektowanie list akcji.............................................................................................................77
Praca z ramkami........................................................................................................................81
Tworzenie ramki.................................................................................................................81
Wykorzystanie ramek .........................................................................................................83
Pokrywanie waciwoci komponentw osadzonych na kontenerze..................................84
Procedury obsugi zdarze obiektw w ramce ...................................................................86
Pokrywanie procedur obsugi zdarze obiektw w ramce .................................................88
Ramki i zasoby ...................................................................................................................89
Uproszczenie pracy z ramkami...........................................................................................91
Przeksztacanie ramek w komponenty................................................................................93
Praca z moduami danych .........................................................................................................94
Wspuytkowanie komponentw z moduami danych .....................................................95
Ograniczenia moduw danych ..........................................................................................96

Rozdzia 4. Wykorzystanie i konfiguracja edytora .....................................................99


Zbiory odwzorowa klawiszy edytora....................................................................................100
Uzyskiwanie pomocy na temat odwzorowa klawiszy ....................................................101
Wybrane kombinacje klawiszy edytora ..................................................................................102
Nagrywanie makr klawiszy ..............................................................................................102
Wstawianie i usuwanie wci w blokach tekstu...............................................................103
Wykorzystanie zakadek...................................................................................................104
Wykorzystanie pozycji listy To-Do jako zakadek...........................................................105
Nawigacja w klasie ...........................................................................................................106
Przegldanie kodu.............................................................................................................107
Uzupenianie klas..............................................................................................................108
Przeszukiwanie przyrostowe ............................................................................................110
Wyszukiwanie odpowiadajcych znakw ograniczajcych .............................................111
Operacje na kolumnach tekstu..........................................................................................112
Code Insight ............................................................................................................................112
Uzupenianie kodu ............................................................................................................113
Parametry kodu.................................................................................................................115
Wyznaczanie wartoci wyraenia.....................................................................................115
Podgld symbolu ..............................................................................................................116
Szablony kodu ..................................................................................................................116
Wizania klawiszy edytora .....................................................................................................119
Deklaracja klasy wizania klawiszy .................................................................................120
Implementacja klasy wizania klawiszy...........................................................................121
Deklaracja i implementacja procedury Register...............................................................126
Tworzenie i instalacja nowego pakietu fazy projektowania.............................................127

Rozdzia 5. Usuwanie bdw z aplikacji Kyliksa.....................................................131


Zintegrowany debugger ..........................................................................................................131
Wyznaczanie wartoci wyrae........................................................................................132
Okna debuggera ................................................................................................................133
Menu Run .........................................................................................................................139
Wyczanie debuggera ............................................................................................................140
Ignorowanie wyjtkw przez debugger............................................................................142
Ignorowanie okrelonych typw wyjtkw przez debugger ............................................142
Punkty kontrolne .....................................................................................................................144
Punkty kontrolne kodu rdowego..................................................................................144
Pozostae typy punktw kontrolnych................................................................................151
Zapamitywanie punktw kontrolnych midzy sesjami Kyliksa .....................................154

Spis treci

Cz II

Aplikacje bazodanowe

155

Rozdzia 6. Aplikacje bazodanowe..........................................................................157


Podstawy baz danych ..............................................................................................................158
Bazy danych i tabele.........................................................................................................158
Bazy danych i SQL...........................................................................................................160
Inne zagadnienia zwizane z bazami danych ...................................................................160
O bazie danych uywanej w tej ksice ...........................................................................161
Tworzenie bazy danych i tabel .........................................................................................162
Przegld sposobw budowania baz danych w Kyliksie..........................................................162
Typy aplikacji bazodanowych obsugiwanych w Kyliksie ..............................................163
Komponenty uywane w aplikacjach bazodanowych ............................................................172
Kontrolki bazodanowe......................................................................................................173
Komponenty dostpu do danych ......................................................................................174
Komponenty dbExpress....................................................................................................176
Przegld dbExpress .................................................................................................................178
Konfiguracja dbExpress....................................................................................................179
Tworzenie prostej aplikacji bazodanowej...............................................................................185

Rozdzia 7. Kontrolki bazodanowe..........................................................................191


Konfiguracja kontrolek bazodanowych ..................................................................................192
Kolejno tabulacji (Tab Order) i kontrolki wizualne ..................................................193
Zmiana kolejnoci tabulacji ..........................................................................................194
Konfiguracja kontrolek bazodanowych Kyliksa.....................................................................195
Przygotowanie szablonu komponentw danych...............................................................196
Zastosowanie komponentu DBGrid .................................................................................197
Zastosowanie komponentu DBNavigator.........................................................................219
Zastosowanie komponentu DBText .................................................................................221
Zastosowanie komponentu DBEdit ..................................................................................222
Zastosowania komponentu DBMemo ..............................................................................225
Zastosowanie komponentu DBListBox............................................................................226
Zastosowanie komponentu DBComboBox ......................................................................229
Zastosowanie komponentu DBCheckBox........................................................................230
Zastosowanie komponentu DBRadioGroup .....................................................................231
Zastosowanie komponentw DBLookupListBox i DBLookupComboBox .....................233

Rozdzia 8. Klasa TField ........................................................................................237


Przegld pl.............................................................................................................................238
Dostp do pl....................................................................................................................238
Pola stae .................................................................................................................................243
Tworzenie pl staych.......................................................................................................244
Konfiguracja pl staych...................................................................................................245
Praca z polami.........................................................................................................................253
Odczyt i zapis pl zestawu danych...................................................................................254
Obsuga zdarzenia OnValidate .........................................................................................257
Dostp do pola wydajno i zarzdzanie .....................................................................258
Tworzenie nowych pl staych ...............................................................................................262
Tworzenie pola obliczeniowego .......................................................................................263
Tworzenie pl wyszukiwania ...........................................................................................265
Definiowanie pl agregacji...............................................................................................267

Rozdzia 9. Jednokierunkowe zestawy danych ........................................................271


Jednokierunkowe zestawy danych ..........................................................................................272
Poczenie jednokierunkowych zestaww danych z zestawami danych typu in-memory ..272

Kylix. Tworzenie aplikacji


Zastosowanie jednokierunkowych zestaww danych.............................................................273
Konfigurowanie komponentu SQLConnection ................................................................273
Jednokierunkowe zestawy danych zwracajce zestawy rekordw...................................274
Jednokierunkowe zestawy danych niezwracajce wynikowych zestaww......................278
Zastosowanie zapyta parametryzowanych............................................................................279
Tworzenie powiza master-detail ...................................................................................282
Tworzenie powiza master-detail z zapytaniami doczanymi ......................................284
Przygotowanie zapyta jednokierunkowych ....................................................................286
Wykonywanie procedur zapamitanych .................................................................................288
Procedury zapamitane zwracajce pojedyncze wartoci ................................................289
Procedury zapamitane zwracajce zestawy danych........................................................291

Rozdzia 10. Zestawy danych typu in-memory ..........................................................295


Zestawy danych typu in-memory............................................................................................296
Tworzenie tabel i indeksw typu in-memory .........................................................................296
Definiowanie struktury komponentu ClientDataSet po uruchomieniu aplikacji..............303
Zapis danych i anulowanie zmian...........................................................................................305
Zastosowanie indeksw do sortowania...................................................................................307
Zastosowanie zakresw...........................................................................................................312
Zastosowanie metody ApplyRange ..................................................................................314
Filtrowanie ..............................................................................................................................315
Filtrowanie przy uyciu waciwoci................................................................................316
Waciwo FilterOptions.................................................................................................317
Obsuga zdarzenia OnFilterRecord...................................................................................318
Zastosowanie filtra do nawigacji po danych ....................................................................319
Wyszukiwanie danych ............................................................................................................319
Zastosowanie metod FindKey oraz FindNearest..............................................................320
Zastosowanie metod GotoKey oraz GotoNearest.............................................................322
Zastosowanie metod Locate oraz Lookup ........................................................................322
Walidacja na poziomie rekordu ..............................................................................................328
Wykorzystanie zdarzenia BeforePost ...............................................................................328

Rozdzia 11. Zaawansowane techniki bazodanowe ...................................................331


Sztuka aktualizacji danych......................................................................................................331
Omwienie edycji w zestawach danych typu in-memory ................................................332
Filtrowanie oparte na statusie rekordu..............................................................................338
Okrelanie statusu rekordu ...............................................................................................341
Usuwanie zmian z rejestru zmian .....................................................................................341
Odwieanie rekordw .....................................................................................................345
Dostosowywanie operacji aktualizacji....................................................................................348
Kontrola operacji aktualizacji przy uyciu waciwoci komponentu DataSetProvider ..348
Programowa obsuga operacji aktualizacji .......................................................................353
Obsuga bdw operacji aktualizacji...............................................................................358
Dodatkowe techniki ................................................................................................................361
Zastosowanie komponentu SQLMonitor..........................................................................361
Tworzenie kopii kursora ...................................................................................................362
Aktualizowanie tylko jednego rekordu.............................................................................363

Rozdzia 12. Tworzenie sterownikw dbExpress .......................................................367


Biblioteki producentw serwerw bazodanowych .................................................................368
Uruchomienie rodowiska ................................................................................................369
Poczenie z serwerem bazodanowym .............................................................................369
Konfiguracja uchwytu polecenia ......................................................................................369
Przygotowanie polecenia SQL .........................................................................................370
Przekazywanie parametrw startowych ...........................................................................370

Spis treci

Wykonywanie polecenia SQL ..........................................................................................371


Wizanie bufora rekordu ..................................................................................................371
adowanie rekordw ........................................................................................................372
Zwalnianie uchwytw oraz rozczanie............................................................................373
Implementacja podstawowych klas dbExpress.......................................................................373
Klasa SQLDriver ..............................................................................................................374
Klasa SQLConnection ......................................................................................................376
Klasa SQLCommand ........................................................................................................382
Klasa SQLCursor..............................................................................................................398
Klasa SQLMetaData.........................................................................................................403
Pliki rdowe interfejsu dbExpress .......................................................................................403

Cz III Zaawansowane moliwoci Kyliksa

405

Rozdzia 13. Aplikacje wielowtkowe ......................................................................407


Zalety wielowtkowoci .........................................................................................................409
Tworzenie aplikacji wielowtkowych ....................................................................................411
Uywanie klasy TThread..................................................................................................411
Synchronizacja wtkw ..........................................................................................................425
Uywanie metody Synchronize ........................................................................................425
Praca z sekcjami krytycznymi ..........................................................................................426
Czekanie na wtek ............................................................................................................429
Uywanie klasy TEvent....................................................................................................433
Blokowanie obiektw .......................................................................................................434
Inne techniki programowania wielowtkowego .....................................................................435
Zmienne lokalne wtku.....................................................................................................435
Testowanie wtkw ..........................................................................................................436
Wielowtkowy dostp do baz danych ..............................................................................437

Rozdzia 14. Biblioteki wspdzielone.......................................................................439


Omwienie bibliotek wspdzielonych...................................................................................440
Budowanie przykadowej biblioteki wspdzielonej ..............................................................441
Pisanie funkcji eksportowanych .......................................................................................443
Kontrola nazwy biblioteki wspdzielonej .......................................................................444
adowanie procedur z bibliotek wspdzielonych..................................................................449
Umiejscawianie bibliotek wspdzielonych .....................................................................451
Tworzenie moduw importu dla bibliotek wspdzielonych.................................................453
Dynamiczne adowanie bibliotek wspdzielonych................................................................454
Deklarowanie zmiennych .................................................................................................456
Dynamiczne adowanie bibliotek wspdzielonych .........................................................457
Uzyskiwanie adresu funkcji lub procedury ......................................................................457
Zwalnianie biblioteki wspdzielonej...............................................................................458
Testowanie bibliotek wspdzielonych...................................................................................460
Testowanie przy uyciu aplikacji macierzystej ................................................................460
Testowanie przy uyciu grupy projektu ...........................................................................462
Sekcje initialization i finalization biblioteki wspdzielonej..................................................463
Definiowanie kodu inicjujcego .......................................................................................463
Definiowanie procedury koczcej dziaanie...................................................................463

Rozdzia 15. Tworzenie komponentw......................................................................465


Przegld obiektw...................................................................................................................466
Od rekordu do klasy..........................................................................................................466
Hermetyzacja i widoczno skadowych ..........................................................................470
Definiowanie interfejsu fazy wykonania ..........................................................................471
Dziedziczenie i polimorfizm.............................................................................................474

10

Kylix. Tworzenie aplikacji


Wprowadzenie do tworzenia komponentw...........................................................................477
Wskazwki dotyczce projektowania komponentw.......................................................478
Przykadowy prosty komponent: definiowanie nowych wartoci domylnych waciwoci.....479
Wykorzystanie kreatora Component ................................................................................480
Pokrywanie metody ..........................................................................................................482
Implementacja pokrywanego konstruktora.......................................................................483
Testowanie nowego komponentu .....................................................................................485
Instalowanie komponentu.................................................................................................487
Tworzenie pakietu fazy projektowania ...................................................................................488
Konfigurowanie pakietu ...................................................................................................490
Przykad z waciwociami .....................................................................................................491
Definiowanie pl obiektu .................................................................................................492
Definiowanie waciwoci ................................................................................................493
Definiowanie metod..........................................................................................................493
Pokrywanie istniejcych metod ........................................................................................495
Implementacja metod pokrywanych.................................................................................496
Tworzenie zdarze............................................................................................................497
Kocowe poprawki komponentu: zwracanie uwagi na szczegy ...................................499
Zagadnienie dodatkowe: zwikszanie widocznoci waciwoci ...........................................506
Przykad zwikszania widocznoci waciwoci ..............................................................508

Rozdzia 16. Wykorzystanie interfejsw ...................................................................511


Przegld interfejsw................................................................................................................512
Argumenty za interfejsami......................................................................................................514
Deklarowanie interfejsu ..........................................................................................................516
Implementowanie interfejsw.................................................................................................518
Interfejsy i rozdzielanie nazw metod ......................................................................................526
Implementowanie interfejsu przez delegowanie.....................................................................527
Uwagi na temat implementowania interfejsu przez delegowanie ....................................529
Przykad interfejsu dostarczyciel danych...........................................................................530

Cz IV Technologie internetowe

537

Rozdzia 17. Przegld technologii internetowych ......................................................539


Protokoy, technologie i pojcia..............................................................................................540
Dokumenty RFC .....................................................................................................................540
Adresy IP ................................................................................................................................540
Nazwy domen ...................................................................................................................541
TCP/IP i UDP ...................................................................................................................542
Gniazda i porty .................................................................................................................543
SGML ...............................................................................................................................543
HTML ...............................................................................................................................544
FTP ...................................................................................................................................545
HTTP ................................................................................................................................545
MIME ...............................................................................................................................546
World Wide Web..............................................................................................................546
Serwery WWW.................................................................................................................547
Przegldarki internetowe ..................................................................................................547
Apache ..............................................................................................................................547
CGI i biblioteki DSO ........................................................................................................548
Server Side Includes (SSI)................................................................................................549
Przegld rozszerze serwerw WWW....................................................................................550
Krtkie omwienie interakcji w sieci WWW .........................................................................551
Czci adresu URL ...........................................................................................................552
Typy wywoa ..................................................................................................................554

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

Rozdzia 18. Tworzenie rozszerze serwera Apache


przy uyciu technologii WebBroker .......................................................569
Tworzenie prostego rozszerzenia CGI....................................................................................570
Definiowanie akcji............................................................................................................571
Instalacja i uytkowanie rozszerzenia CGI.............................................................................575
Dodawanie zmiennej rodowiskowej LD_LIBRARY_PATH.........................................576
Zapisywanie aplikacji CGI do katalogu ScriptAlias ........................................................578
Uruchamianie aplikacji CGI za porednictwem przegldarki ..........................................579
Tworzenie i konfiguracja prostego rozszerzenia DSO ...........................................................581
Tworzenie projektu DSO..................................................................................................581
Producenci ........................................................................................................................583
Instalacja i uytkowanie biblioteki DSO ................................................................................587
Zapisywanie biblioteki DSO do katalogu serwera Apache ..............................................587
Dodawanie DSO do pliku httpd.conf................................................................................588
Zatrzymywanie i uruchamianie serwera Apache..............................................................589
Uruchamianie biblioteki DSO za porednictwem przegldarki .......................................589

Rozdzia 19. Zaawansowane zagadnienia dotyczce Web Broker ..............................593


Pozyskiwanie danych z formularzy ........................................................................................594
Tworzenie internetowej aplikacji bazodanowej......................................................................598
Rozszerzenia serwera WWW i wspbieno.................................................................598
Obiekty dostarczajce dane ..............................................................................................600
Formatowanie komrek komponentw TableProducer....................................................605
Cookies i obiekt WebRequest .................................................................................................606
Pobieranie i ustawianie cookies........................................................................................607
Wykorzystanie cookies i przekierowania .........................................................................609
Zawarto obiektu WebRequest..............................................................................................612
Usuwanie bdw z rozszerze serwera WWW .....................................................................615
Konwersja projektu CGI do projektu DSO ......................................................................615
Usuwanie bdw z projektu DSO ...................................................................................616

Rozdzia 20. Przegld Internet Direct.......................................................................621


Internet Direct .........................................................................................................................621
Komponenty Internet Direct ...................................................................................................624
Komponenty klientw Indy ..............................................................................................625
Komponenty serwerw Indy.............................................................................................628
Pozostae komponenty Indy..............................................................................................631
Pobieranie uaktualnionych komponentw Internet Direct ...............................................633
Wykorzystanie komponentw Internet Direct ........................................................................634
Dziaanie klientw Internet Direct....................................................................................634
Wykorzystanie TIdAntiFreeze..........................................................................................636
Dziaanie serwerw Internet Direct ..................................................................................636
Wykorzystanie menedera wtkw ..................................................................................638
Licencja Internet Direct ..........................................................................................................638
Zmodyfikowana licencja BSD dla Indy ...........................................................................639
Licencja Indy MPL (Mozilla Public License) ..................................................................639
Spenianie wymaga licencji Indy w aplikacjach Kyliksa ...............................................640
Pomoc techniczna ...................................................................................................................640

12

Kylix. Tworzenie aplikacji

Rozdzia 21. Wykorzystanie Internet Direct ..............................................................643


Co byo pierwsze: klient czy serwer? .....................................................................................643
Wykorzystanie Telnetu do testowania serwera tekstowego .............................................644
Przykad prostego serwera ......................................................................................................645
TIdTCPServer i wtki.......................................................................................................648
Wywoania blokujce i wspbieno.............................................................................649
OnExecute i wyjtki .........................................................................................................650
Przykad serwera bazy danych................................................................................................651
Tworzenie serwera bazy danych.......................................................................................651
Tworzenie klienta bazy danych ........................................................................................654
Obsuga wyjtkw w aplikacjach klienckich..........................................................................656
Rozpoznawanie zamknicia poczenia przez klienta ......................................................657
Testowanie serwera za pomoc wielowtkowego klienta ................................................657
Wysyanie poczty elektronicznej za pomoc TIdSMTP.........................................................661
Tworzenie wiadomoci.....................................................................................................662
Tworzenie klienta SMTP..................................................................................................663
Tworzenie klienta w wtku...............................................................................................663
Tworzenie egzemplarza wtku klienta .............................................................................665
Uaktualnianie interfejsu uytkownika przez wtek..........................................................666
Serwer i klient kodw pocztowych.........................................................................................668
Definiowanie protokou kodw pocztowych....................................................................669
Serwer kodw pocztowych...............................................................................................670
Klient kodw pocztowych ................................................................................................672
Tworzenie serwera konsoli .....................................................................................................675
Tworzenie przykadowego serwera konsoli .....................................................................675
Testowanie tekstowego serwera konsoli ..........................................................................677

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.
 
   

 

    
 
   !"#
$ %%
 


& 

&
'% %%
!&
 ( &
!&
 ( )

& )$ &

&) $ &
 "   * 
 "   !"#   *  
 "$ %% $ %
*$ %

Rozdzia 8. Klasa TField

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

Poniewa drugie odwoanie jest prostsze, preferuje je wikszo programistw.


Liczba cakowita stosowana jako odwoanie do okrelonego pola we waciwoci Fields
odnosi si do pooenia pola w zestawie danych. W przypadku stosowania domylnych
obiektw pl tworzonych przez zestaw danych, pooenie to jest jednakowe z pooeniem
pola w powizanym zestawie wynikowym. Jeli stosuje si obiekty pl staych, wtedy jest
to odwoanie do pooenia pola w edytorze pl.
Metoda  zestawu danych pobiera acuch i zwraca odwoanie do pola zestawu
danych, ktrego nazwa jest zgodna z acuchem (w nazwie nie jest rozrniana wielko
liter). Jeli adna nazwa pola nie zgadza si z acuchem, wtedy wywoywany jest wyjtek.
Przyjmujc, e stosowane s domylne obiekty pl i pierwsze pole zestawu danych
ClientDataSet1 ma nazw CUST_NO, ponisze dwa odwoania odnosz si do dokadnie
tego samego obiektu pola.
  12/30
  12-" , 456 4

240

Cz II Aplikacje bazodanowe

Odwoanie do pola stosowane jest w celu uzyskania dostpu do waciwoci i wywoania


metod okrelonej klasy pola. Poniewa wszystkie obiekty pl s pochodnymi klasy
, dziedzicz one jej interfejs. Poniej zawarto czciowy wydruk klasy ,
przedstawiajcy tylko jej sekcje  oraz  (odpowiednio elementy fazy
wykonania oraz projektowania).
 
   , 
77' 
   8 
8  9" ' 8 
&


&
   + * ,  
&
  " 

&+  &
: 

&+$ &
$ &$ .


& & 

&
&  
!&
 (  -&!!:   , -   &-  
!&
 (:  ,  ,  
!&
 ; : -   

 !&
 - -  & 
!&
 $   &  -  & 

&.! '&

&  -&!!:   , -   &

&" $ &"& 

&$   -&!!: 
 "+--
 (+-*+-
 "+-  -   (+-  *+-  
 "+&
"&
" (+&
"*+&
"
 "+ , , (+ ,*+ ,
 "+<, ,<, , (+<, ,
*+<, ,
 "+  & (+ *+ 
 "+  (+*+
 "+ (+=*+
 "+$  $   (+$  *+$  
 "+& +&*+&
 " 
& -   ( 
& 
* 
& ! & 
 " > !"-   ( > !"
 "&$ &$   (&$ &
 "       *    
 "  8 (  8
 "  ""   "
 " " , ( " ,
 " ") ( ")
 "#> ' #> '*#> '
 "#> ': #> '
 "  ( 
 "& , (& ,
 ")-   ()
 "&-   (&
 " '&-   ( '&* '&
 " '& '& ( '&
 "*$ &$   (*$ &**$ &
 " !!  !!
 " $ &$   ( $ &
 ":  
 : 
*: 

Rozdzia 8. Klasa TField

241

 "8 (8*8


 ") (#)*#)
 "$    $  *$  
 "$ &$   (+$  *+$  
&
 "+,+, +,
*+,! & !?&!"
 "+& ( $ &+& .!  +& ( $ &
*+& ( $ &! &  
 "& ,   & ,  
*& ,  
 "  # >    # > 
*  # > 
 "! &#)  ! &#) 
*! &#) 
 " "  ( " * " 
  "  
 " "@ ( "@
* "@
  "@ 
 "%% %
*%! &!'  
 " ,  ,* ,
 ";   -   (;   ! & 
 ") ()*)  
 ",    ,   
*,   
 " '&      '&  
* '&  
 " '&%"  '&%"
* '&%"
 " '&.&  '&.&
* '&.&
 "%" %"*%"
 " '&
-    '&

* '&
! & 
 "   * 
 ":  :   :  
*:  ! &/!@A!5 0
 ".  "-   .  "
*.  "! & 
 ".=&-   .=&*.=&! & 
 "$-   $*$! &&
 "   !"#   *  
 " ()()#  ()* ()
 " ))#  )* )
 " $   !"#  $  
* $  


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

Poniszy przykad pokazuje, jak uzyska dostp do obiektw pl zestawu danych.


1. Utwrz nowy projekt.
2. Do gwnego formularza dodaj komponent Memo z zakadki Standard palety

komponentw. Naley rwnie doda komponent szablonu GetSales z zakadki


Templates, ktry zosta utworzony w rozdziale 7.
3. Dodaj modu 
 do sekcji  gwnego formularza. Modu ten pozwala

na dostp do informacji na temat dziaajcej aplikacji (runtime-type information


RTTI). RTTI jest informacj typu tekstowego dotyczc deklaracji typw
i jest wykorzystany w procedurze obsugi zdarzenia dodanej w nastpnym kroku
przy konwersji typu wyliczeniowego na acuchowy.
4. Dodaj do gwnego formularza procedur obsugi zdarzenia OnCreate.

Wprowad do niej poniszy kod:



& ,12 ,   

 


>, 122 
!  3 <  122 &B1

>, 122+ 44C
<  12/02 ,C
4A&,4C
  <  12/02 C
4A"4C
(#&, , "! "A
 <  12/02  "C
4A ")4C<  12/02 ")



5. Uruchom projekt. Wywietlony formularz powinien wyglda podobnie jak

na rysunku 8.1.
Rysunek 8.1.
Zastosowanie
waciwoci
Fields zestawu
danych do dostpu
do poszczeglnych
obiektw pl

Kod rdowy tego projektu znajduje si w katalogu fields.

Rozdzia 8. Klasa TField

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

Zwykle nie dodaje si pl staych do jednokierunkowego zestawu danych, poniewa


nie posiada on mechanizmu do zapisywania zmian w danych do bazy danych. Jedyn
sytuacj, w ktrej dodanie pl staych do jednokierunkowego zestawu danych ma
sens, jest zastosowanie ich do odczytu danych pola przy nawigacji po zestawie
danych. Przykadem tego jest generowanie raportu.

Po otwarciu edytora naley za pomoc wcinicia klawiszy Ctrl+A lub kliknicia


prawym klawiszem myszy okna edytora i wybrania Add Fields doda jedno lub kilka
pl staych. Kylix wywietli okno dialogowe Add Fields. W oknie tym trzeba zaznaczy
jedno lub kilka pl zestawu danych, dla ktrego maj zosta utworzone pola stae, a nastpnie klikn przycisk OK (patrz rysunek 8.3).
Rysunek 8.3.
Okno Add Fields

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.

Rozdzia 8. Klasa TField

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

okna Object Repository. Kliknij OK.

Cz II Aplikacje bazodanowe

246

3. Dodaj do moduu danych szablon komponentu (utworzony w rozdziale 7.)

GetSales z zakadki Templates palety komponentw.


4. Dodaj modu danych do gwnego formularza, wracajc do niego i wybierajc

z menu File/Use Unit, a nastpnie Unit2 w oknie dialogowym Use Unit.


5. Dodaj do gwnego formularza dwa panele. Ustaw dla waciwoci Caption

obydwu paneli pusty acuch. Nastpnie ustaw warto waciwoci Align


jednego panelu na alTop, a drugiego na alClient.
6. Dodaj komponenty DBNavigator oraz DBGrid z zakadki Data Controls

palety komponentw do panelu, ktrego waciwo Align ma warto alClient.


Nastpnie ustaw warto waciwoci Align komponentu DBNavigator
na alTop, a komponentu DBGrid na alClient. Ustaw warto waciwoci
DataSource obydwu kontrolek bazodanowych na DataModule2.DataSource1.
Formularz powinien wyglda podobnie jak na rysunku 8.5.
Rysunek 8.5.
Prosty projekt
interfejsu
uytkownika
demonstrujcy
zastosowanie
i konfiguracj pola

7. Teraz w celu wywietlenia edytora pl kliknij dwukrotnie komponent

SQLClientDataSet w module danych. Aby utworzy pola stae dla wszystkich


pl komponentu SQLClientDataSet, naley nacisn klawisze Ctrl+F.
8. Zapisz projekt.
Kod rdowy tego projektu znajduje si w katalogu persistentfields.

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.

Rozdzia 8. Klasa TField

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.

Ustawianie waciwoci DisplayFormat


Waciwo DisplayFormat stosowana jest przez pola zawierajce dane typu liczbowego
i decyduje o tym, jak bd wywietlane w kontrolkach bazodanowych. Waciwo ta
moe by uyta do okrelenia, ile jest wywietlanych miejsc po przecinku, jak rwnie
czy doczy separator czci tysicznych.
Waciwo DisplayFormat moe posiada jedn, dwie lub trzy definicje formatu. W przypadku dwch lub wicej definicji stosowany jest rednik. Po okreleniu tylko jednego formatu dotyczy on wszystkich wartoci numerycznych pola. W przypadku dwch definicji
formatu pierwsza z nich dotyczy wartoci dodatnich oraz zera, natomiast druga tylko
wartoci ujemnych. Wreszcie po okreleniu trzech formatw pierwszy z nich dotyczy
wartoci dodatnich, drugi wartoci ujemnych, a trzeci stosowany jest dla wartoci zerowych. W przypadku dodania trzech znakw rednika, ale bez definiowania jednego lub
kilku formatw, zostanie dla nich zastosowana domylna warto waciwoci DisplayFormat.
Definicja formatu wywietlania tworzona jest przy uyciu specyfikatorw i staych
acuchowych. Stosowane specyfikatory s opisane w tabeli 8.1. Tabela 8.2 zawiera
przykady ich zastosowania.
Tabela 8.1. Specyfikatory formatu wywietlania wartoci pl numerycznych
Specyfikator

Opis

Znak D reprezentuje dowoln cyfr. W przypadku zastosowania go do definiowania


iloci miejsc po przecinku wywietlane s tylko wartoci dziesitne rne od zera.
Aby wywietli sta ilo miejsc po przecinku, naley uy wartoci 3.

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

Specyfikator ten wywietla dane w notacji naukowej (wykadniczej). Specyfikator


#C lub C suy do wywietlania wartoci w notacji wykadniczej z uwzgldnieniem
znaku, natomiast #B lub B dodaje znak tylko dla liczb ujemnych.

4 99 E
&
 *4

Dowolne znaki pojawiajce si wewntrz pojedynczych lub podwjnych


znakw cudzysowu s staymi acuchowymi i jako takie bd wywietlane.

Cz II Aplikacje bazodanowe

248

Tabela 8.2. Przykad zastosowania specyfikatorw waciwoci DisplayFormat


Przykad

Dziaanie

AD233

Wywietla wszystkie cyfry, stosujc separatory czci tysicznej i dokadnie


dwa miejsca po przecinku. Dla wartoci pomidzy 1 a 1 nie wywietla
zera, aby wywietli zero dla liczb uamkowych naley zamieni # na 0.

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.

AD2DD4 4AD2DD44

W przypadku zera i wartoci dodatnich wywietla do dwch miejsc


po przecinku. Liczby ujemne naley umieci w nawiasach okrgych.

4F4DA233

Wywietla liczby poprzedzone znakiem 4F4 z dokadnoci do dwch miejsc


po przecinku. Zawiera rwnie separatory czci tysicznej.

D2334 4D2334448 4 Wywietla zarwno dodatnie, jak i ujemne liczby z dokadnoci do dwch

miejsc po przecinku. Liczby ujemne bd wywietlane w nawiasach okrgych.


Dla wartoci 3 wywietlany jest acuch 8 .

Ponisze kroki su do zdefiniowania prostego formatu wywietlania pola TOTAL_


VALUE dla projektu, ktry zosta utworzony na pocztku rozdziau.
1. W oknie Object Inspector wybierz pole TOTAL_VALUE. W tym celu naley uy

listy obiektw okna Object Inspector i wybra SQLClientDataSet1TOTAL_VALUE


lub wybra w edytorze pl pole stae TOTAL_VALUE.
2. Ustaw dla waciwoci DisplayFormat nastpujc warto:
AD233

3. Uruchom projekt, a nastpnie za pomoc poziomego paska przewijania przejd

do pola TOTAL_VALUE. Format wywietlania tego pola widoczny na rysunku


8.6 powinien zawiera separator czci tysicznej oraz dwa miejsca po przecinku.
Rysunek 8.6.
Waciwo
DisplayFormat
stosowana jest
do kontroli
wywietlania
zawartoci pola
numerycznego

Rozdzia 8. Klasa TField

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.

Tworzenie maski edycji


Maska edycji dziaa podobnie jak waciwoci DisplayFormat i EditFormat, tym samym
wpywajc na sposb wywietlania zawartoci pola. Istnieje jednak kilka istotnych rnic.
Po pierwsze, podczas gdy obydwie waciwoci maj zastosowanie w przypadku pl
numerycznych, waciwo EditMask dotyczy pl, ktre z reguy zawieraj acuchy
czyli pola tekstowe, pola daty, pola memo. Po drugie, obydwie waciwoci kontroluj
rwnie sposb, w jaki wywietlana jest zawarto pola, ale waciwo EditMask ma
wikszy wpyw na to, co wprowadza uytkownik. Maska edycji moe na przykad ograniczy uytkownikowi moliwo wpisywania tylko liczb lub liter albo dokonywa zamiany
wprowadzanych znakw na due litery. Inaczej mwic, maska edycji moe by stosowana
do sprawdzania poprawnoci danych wprowadzanych przez uytkownika.
Poniewa maska edycji realizuje znacznie wicej operacji ni zwyka maska wywietlania,
zatem specyfikatory stosowane w jej przypadku s bardziej zoone. Zostay one pokazane w tabeli 8.3.
W poprzedniej czci powiedzielimy, e specyfikator formatu wywietlania moe
zawiera jedn, dwie lub trzy czci. Specyfikatory maski edycji natomiast zawsze
posiadaj trzy czci, z ktrych kada jest oddzielona rednikiem. Pierwsza cz identyfikuje sam mask. Druga decyduje o tym, czy domylne znaki wstawiane przez mask
zapisywane s w powizanym polu. Bdzie ona zawiera 0 lub 1, gdzie 0 oznacza, e
domylne znaki nie zostan zapisane w powizanym polu, a 1, e zostan. Wartoci te
maj rwnie wpyw na waciwo Text pola. Waciwo EditText pola zawiera
zawsze stae acuchowe niezalenie od tego, jaka warto zostaa wstawiona w drugiej
czci specyfikatora.
Trzecia cz specyfikatora maski edycji pozwala okreli, jakie znaki drukowane zostan
wywietlone jako reprezentacja wymaganych lub opcjonalnych znakw, ktre nie zostay
jeszcze wprowadzone. Wemy dla przykadu ponisz mask edycji:
GH1 333333B333316

Pozwala ona na wpisanie typowego numeru telefonu stosowanego w USA, gdzie za


cyfr znajduje si spacja i nawias okrgy. Nastpnie uytkownik musi poda trzycyfrowy numer kierunkowy, po ktrym automatycznie wstawiany jest nawias okrgy.
Dalej naley wpisa siedem cyfr numeru telefonu, gdzie znak '!' jest wstawiany automatycznie przez mask edycji po trzeciej cyfrze. Cyfra w drugiej czci oznacza,
e domylne znaki zostan zapisane w powizanym polu, natomiast znak '"' okrela,
jaki drukowany znak zostanie wywietlony w celu reprezentacji znakw jeszcze niewpisanych w polu posiadajcym mask edycji.

Cz II Aplikacje bazodanowe

250
Tabela 8.3. Specyfikatory stosowane do tworzenia maski edycji
Specyfikator

Opis

W tym miejscu naley wstawi liter.

W tym miejscu mona wstawi liter, ale nie jest to wymagane.

W tym miejscu naley wstawi dowolny znak drukowany.

W tym miejscu mona wstawi drukowany znak, ale nie jest to wymagane.

W tym miejscu naley wstawi liczb.

W tym miejscu mona wstawi liczb, ale nie jest to wymagane.

W tym miejscu mona wstawi liczb lub znaki 'C', 'B', ale nie jest to wymagane.

W tym miejscu naley wstawi liter lub liczb.

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.

Jest to separator czasu w formacie godzina:minuta:sekunda. O tym, jaki znak zostanie


wywietlony, decyduje jego ustawienie w systemie operacyjnym.

Jest to separator daty w formacie rok/miesic/dzie. O tym, jaki znak zostanie


wywietlony, decyduje jego ustawienie w systemie operacyjnym.

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.

Wszystkie znaki wstawione w miejsce tego znaku we waciwoci DisplayText


pola zostan wywietlone w postaci pustych miejsc umieszczonych na pocztku.
W przypadku opuszczenia tego znaku we waciwoci DisplayText pola zostan
wywietlone puste miejsca umieszczone na kocu. Podczas edycji pola puste miejsca
zastpowane s przez drukowane znaki zdefiniowane w trzeciej czci specyfikatora.

Jeli przyjrzymy si zawartoci pola PO_NUMBER tabeli SALES, zauwaymy, e


zawsze zaczyna si znakiem '#', po ktrym wystpuj kolejno: dwie liczby, liczba lub
litera i na kocu cztery wymagane litery. Poniszy specyfikator maski edycji okrela
taki format (znaki '$' s zerami):
GJ$3333333L

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

listy obiektw okna Object Inspector i wybra SQLClientDataSet1PO_NUMBER


lub wybra w edytorze pl pole stae PO_NUMBER.
2. Ustaw dla waciwoci EditMask ponisz warto:
GJ$3333333L

Rozdzia 8. Klasa TField

251

3. Uruchom projekt. Aby wstawi nowy rekord, kliknij w komponencie

DBNavigator przycisk +. W polu PO_NUMBER wejd w tryb edycji dla


dodanego rekordu, wywietlonego przez kontrolk DBGrid. Na rysunku 8.7
widoczna jest zdefiniowana maska edycji.
Rysunek 8.7.
Po wejciu
w tryb edycji pola
PO_NUMBER
pojawia si
powizana z nim
maska edycji

4. Aby wyj z trybu edycji lub anulowa operacj wstawiania rekordu,

a nastpnie zamkn projekt, naley dwa razy nacisn klawisz Esc.

Kontrola dostpu do pola


Mimo e dla zestawu danych zostay utworzone pola stae, moemy spotka si z koniecznoci wikszej kontroli dostpu do tych pl. W tym celu zastosujemy dwie waciwoci pl: Visible oraz ReadOnly.
Po ustawieniu wartoci waciwoci Visible na False pole nie zostanie wywietlone w kontrolkach bazodanowych. Jeli nie stosujemy kolumn staych w komponencie DBGrid,
wtedy wszystkie pola zestawu danych wywietlane s w siatce. W takiej sytuacji mona
ustawi warto waciwoci Visible na False, co spowoduje, e pole nie zostanie wywietlone w komponencie DBGrid.
Moe rwnie zaistnie konieczno zablokowania uytkownikowi moliwoci zmiany
wartoci niektrych kolumn przy jednoczesnym ich wywietleniu. W tym celu mona
posuy si waciwoci ReadOnly pola. Gdy warto tej waciwoci jest ustawiona
na True, wtedy uytkownik moe przeglda wartoci pola, ale nie ma moliwoci ich
zmiany.
Jeli okrelone pole tabeli jest wymagane, ale jego waciwo ReadOnly ma warto
True, wtedy uytkownik bdzie w stanie wstawi nowy rekord, ale moe nie mc go
zatwierdzi, poniewa nie bdzie mg wstawi wartoci w tym polu.

Cz II Aplikacje bazodanowe

252

Walidacja pl przy uyciu ogranicze pola


Ograniczenia dostarczaj mechanizmw prostego definiowania w fazie projektowania
regu walidacji pola, ktre musz by spenione przez uytkownika. Walidacja ta zwizana jest z zasadami, ktre stosowane s przez aplikacj Kyliksa w stosunku do pola,
jeszcze zanim jego warto zostanie zapisana w powizanym buforze rekordu. Jeli
warto pola narusza zasad, wtedy wywoywany jest wyjtek i warto ta nie moe
zosta zapisana w buforze rekordu.
W Kyliksie w fazie projektowania mona okreli dwa typy ogranicze: na poziomie pola
oraz na poziomie zestawu danych. Ograniczenia na poziomie zestawu danych, omwione
w nastpnym rozdziale, dostarczaj mechanizmw definiowania walidacji na poziomie
rekordu (walidacja na poziomie rekordu realizowana jest podczas zatwierdzania caego
rekordu). W tej czci omwimy ograniczenia na poziomie pola.
Ograniczenia na poziomie pola okrelane s przy uyciu wyrae logicznych SQL,
ktre wykonywane s, zanim warto zostanie wstawiona do pola. Jeli wyraenie bdzie
miao warto False, wtedy zostanie wywoany wyjtek, ktry nie pozwoli na zatwierdzenie zmian w polu.
Zdarzenie OnValidate pola dostarcza innego mechanizmu definiowania walidacji na
poziomie pola. Obsuga zdarzenia OnValidate zostanie opisana w dalszej czci
rozdziau.

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.

Rozdzia 8. Klasa TField

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

listy obiektw okna Object Inspector i wybra SQLClientDataSet1DISCOUNT


lub wybra w edytorze pl pole stae DISCOUNT.
2. Ustaw dla waciwoci CustomConstraint ponisze wyraenie typu

booleowskiego:
J 3

3. Nastpnie dodaj do waciwoci ConstraintErrorMessage poniszy komunikat:


, M * N&&& *  O
&,2

4. Uruchom aplikacj. Wstaw nowy rekord, a nastpnie przejd do pola


DISCOUNT i wpisz !& . Aby przej do nastpnego pola, nacinij klawisz Tab.

Kylix wywietli komunikat z nastpujcym wyjtkiem (patrz rysunek 8.8):


Rysunek 8.8.
Wyjtek

5. Zamknij aplikacj.

Oprcz waciwoci CustomConstraint wikszo pl posiada waciwo Required.


Gdy ma ona warto True, wtedy uytkownik nie moe zatwierdzi aktualnego rekordu,
jeli w wymaganym polu nie zostaa wstawiona warto. Podobnie w przypadku pl
numerycznych mona waciwociom Max i Min przypisa wartoci w celu okrelenia
maksymalnej i minimalnej dopuszczalnej wartoci pola.
Wartoci okrelone dla waciwoci CustomConstraint, Min, Max oraz Required
pola dotycz ustawie po stronie klienta. Wizy integralnociowe w systemie
RDBMS rwnie mog definiowa, jakie wartoci poszczeglnych pl s dopuszczalne. W przypadku zaistnienia konfliktu ustawie waciwoci pola i wizw integralnoci zdefiniowanych po stronie serwera, uytkownik nie bdzie mg doda
lub zaktualizowa danych powizanego zestawu danych.

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.

Odczyt i zapis pl zestawu danych


Operacje odczytu i zapisu danych pl zestawu danych realizowane s przy uyciu waciwoci pola. Najwygodniejsza jest waciwo # typu # 
. Inne dostpne
waciwoci to: AsString, AsInteger, AsFloat oraz AsBoolean. Byy one pocztkowo
stosowane w Delphi, zanim nie zostaa wprowadzona obsuga typu # 
. W Kyliksie
zaleca si stosowa jak najczciej waciwo Value. Jeli jednak z jakiego powodu uycie tej waciwoci stwarza problemy, mona wtedy sign po jedn z waciwoci As....
Aby odczyta warto pola, zestaw danych, do ktrego ono naley, musi by aktywny oraz
musi zwraca zestaw danych (polecenia DDL, takie jak   , nie zwracaj
danych ani maj pl). Poniszy kod prezentuje odczyt wartoci pola, ktry przypisuje
zmiennej '  typu  
warto pola ORDER_STATUS.
 
  

   <  12" , 4 .#.6+542$ &

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

Rozdzia 8. Klasa TField

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

Poniszy przykad prezentuje, w jaki sposb po uruchomieniu odczytywa i zapisywa


pola. Zawiera on typow operacj polegajc na przeszukiwaniu zestawu danych i pracy
z jego wybranymi rekordami. W przykadzie zostan utworzone dwa przyciski, kady
z przypisan procedur obsugi zdarzenia OnClick. Jeli pierwszy z nich zostanie kliknity,
wtedy wartoci pola ORDER_STATUS zostan zamienione na due litery, natomiast
jeli klikniemy drugi przycisk, wtedy wartoci zostan zamienione na mae litery.
1. W projekcie, ktry by ju uywany w tym rozdziale, dodaj dwa przyciski

w grnym panelu.
2. Ustaw warto waciwoci Caption przycisku Button1 na Zamie na due

litery warto pola ORDER_STATUS, a przycisku Button2 na Zamie na mae


litery warto pola ORDER_STATUS. Formularz powinien teraz wyglda
podobnie jak na rysunku 8.9.
Rysunek 8.9.
Dwa przyciski
dodane do
projektu uywanego
w przykadach
zawartych
w tym rozdziale

3. Dodaj procedur obsugi zdarzenia OnClick do przycisku Button1. Wprowad

do niej poniszy kod:



& ,12-& 1
'  


*  > &Q2<  1

   
"

256

Cz II Aplikacje bazodanowe

* # 

"
#77 '"*
  &#
-" , 4 .#.6+542$ &
5  -" , 4 .#.6+542$ &
: 
)

77.' &M"* "2 &2
77"
)
77*  !
! "
#   
77"
77*<  1


4. Nastpnie dodaj procedur obsugi zdarzenia OnClick do przycisku Button2

i wprowad do niej poniszy kod. W celu przyspieszenia operacji mona


skopiowa zawarto poprzedniej procedury i zmieni wywoywanie metody
  na ) * :

& ,12-& Q
'  


*  > &Q2<  1

   
"

* # 

"
#77 '"*
  &#
-" , 4 .#.6+542$ &
 *  -" , 4 .#.6+542$ &
: 
)

77.' &M"* "2 &2
77"
)
77*  !
! "
#   
77"
77*<  1


5. Zapisz zmiany dokonane w projekcie i nastpnie uruchom go.

Aby w uruchomionej aplikacji zamieni tekst w polu ORDER_STATUS na due litery,


naley klikn przycisk o nazwie Zamie na due litery warto pola ORDER_STATUS,
tak jak to pokazano na rysunku 8.10. Aby natomiast przywrci zawarto tego pola
do stanu pocztkowego, naley klikn przycisk Zamie na mae litery warto pola
ORDER_STATUS.

Rozdzia 8. Klasa TField

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

Wywoanie w tym przykadzie metody +


  w przypadku obydwu procedur obsugi zdarze tymczasowo wyczy komunikacj midzy zestawem danych
i jego rdem danych. Pozwala to na szybkie przeszukanie zestawu danych bez
koniecznoci aktualizowania zawartoci kadej kontrolki bazodanowej, ktra wskazuje na rdo danych powizane z tym zestawem. W przypadku stosowania metody +
  naley doczy sowa kluczowe  !
 oraz wywoa
metod (
+
 . W ten sposb mamy pewno, e komunikacja midzy
zestawem danych i rdem danych zostanie przywrcona, nawet jeli po wywoaniu
metody +
  wystpi wyjtek.

Obsuga zdarzenia OnValidate


Na pocztku rozdziau omwiono tworzenie wasnych ogranicze, ktre realizuj walidacj na poziomie pola. W przypadku takich ogranicze mona stosowa tylko jedno
wyraenie logiczne SQL oraz jeden komunikat bdu. Zdarzenie OnValidate egzemplarza
pola jest drugim sposobem na zastosowanie walidacji na poziomie pola. Za jego pomoc
mona wykonywa wielokrotne testy dziaania walidacji oraz zdefiniowa wicej ni
jeden komunikat bdu, w zalenoci od tego, jaki problem zwizany z walidacj wystpi.
Procedura obsugi zdarzenia OnValidate pola wykonywana jest zanim nowa warto pola
zostanie wprowadzona do powizanego bufora rekordu. Nastpuje to w momencie,
gdy uytkownik przechodzi z kontrolki bazodanowej powizanej z tym polem do innej,
zamyka komrk komponentu DBGrid poczon z polem lub zatwierdza cay rekord.
Przy uyciu procedury obsugi zdarzenia mona wykona dowolne testy, wczajc w to:
odczyt wartoci innych pl tego samego rekordu, uycie innego zestawu danych do
odwoywania si do wartoci innego zestawu wynikowego, sprawdzanie wartoci kontrolek interfejsu uytkownika, ktre nie s bazodanowe. Jeli kod stwierdzi, e warto
pola jest z jakiego powodu niedopuszczalna, mona wywoa wyjtek z komunikatem
bdu wyjaniajcym dlaczego warto jest nieprawidowa.

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 (+ (%

jest klas nadrzdn lub superklas wszystkich zdefiniowanych wyjtkw,


ktre bdzie mona wywoa w kodzie. W rozdziale 5. wspomniano, e takie
podejcie uatwia zarzdzanie wyjtkami.
"
#& ,#)
  
  #)
 
# #)
  
  #& ,#)
 

3. W edytorze pl wybierz pole DATE_NEEDED.


4. Wywietl zakadk Events okna Object Inspector i utwrz procedur obsugi

zdarzenia OnValidate.
5. Wprowad do niej poniszy kod:

&  > &Q2<  1+#6###$  


!2+ ,K 
 # #)
 2  4  +#6###, M"N4C
4 R889R24


6. Zapisz projekt i uruchom go. Wstaw nowy rekord i podaj dat starsz ni data

aktualna, ktr wywietla zegar systemowy. W celu przejcia do nastpnego


rekordu nacinij klawisz prawej strzaki. Zostanie wtedy wywoany nastpujcy
wyjtek (patrz rysunek 8.11).
Rysunek 8.11.
Wyjtek

7. Zamknij okno dialogowe i sprbuj przej do innego rekordu. Spowoduje to prb

zatwierdzenia rekordu, co z kolei rozpocznie operacj walidacji pola i ostatecznie


wywoa wyjtek. Jeli nie podasz poprawnej daty, wtedy nie bdziesz mg opuci
pola lub zatwierdzi rekordu.

Dostp do pola wydajno i zarzdzanie


Jak napisalimy w poprzedniej czci, mona wyrni trzy sposoby dostpu do pl
staych za pomoc waciwoci Fields zestawu danych, metody  lub
odwoania do pola staego. Czy ma jakiekolwiek znaczenie to, ktrego sposobu uyjemy?

Rozdzia 8. Klasa TField

259

Odpowied brzmi tak. Waciwie jest to bardziej skomplikowane, ni mogoby si


wydawa. cile mwic, kady sposb ma swoje wady i zalety. W rezultacie aby wybra
najbardziej odpowiedni technik dostpu do pl staych, naley przeanalizowa wymagania aplikacji.
Wady i zalety powyszych technik omwimy w dalszej czci rozdziau. Na kocu
zaprezentujemy, jak mona poczy dwa z powyszych sposobw w celu osignicia
maksymalnej wydajnoci i atwoci obsugi kodu.

Zastosowanie waciwoci Fields


Waciwo Fields pozwala na bezporedni dostp do powizanego pola. W przeciwiestwie do metody  waciwo ta nie powoduje dodatkowego obcienia zwizanego z przeszukiwaniem powizanego pola. W efekcie wydajno kodu wykorzystywanego przez waciwo Fields jest lepsza.
Niestety kod ten jest trudny do zanalizowania, poniewa podczas dostpu do okrelonego
pola dokonywane jest odwoanie do niego za pomoc liczby. Ponadto zmiany w strukturze
powizanej tabeli lub kolejnoci pl w poleceniu  moe spowodowa odwoanie
do niewaciwego pola. Podsumowujc, kod wykorzystywany przez waciwo Fields
jest trudniejszy w konserwacji i debugowaniu.

Zastosowanie metody FieldByName


Metoda  dziaa wolniej ni waciwo Fields, poniewa w celu odnalezienia numeru porzdkowego pola podanego w tej waciwoci musi ona przeszuka
list pl zestawu danych. Wzrost obcienia w tym przypadku jest wprost proporcjonalny
do czstotliwoci wywoywania metody . Jednorazowe uruchomienie metody
nie stwarza problemu, ale przy iloci 100 000 razy ju tak.
Mimo e metoda  nie prezentuje si najlepiej pod wzgldem wydajnociowym, to jednak kod przez ni wykonywany jest atwy do analizy, poniewa nazwa pola,
do ktrego jest realizowany dostp, pojawia si przy jej wywoaniu. W efekcie czsto
atwiej jest zarzdza kodem, ktry wykonuje metoda , i debugowa go.
Ponadto w przypadku tej metody zmiana kolejnoci pl powizanego zestawu danych nie
ma znaczenia. Tak dugo jak nazwy pl si nie zmieni, zmiana ich kolejnoci w tabeli
lub w poleceniu , nie bdzie wymagaa dokonania adnych zmian w kodzie wykorzystujcym metod .
Z drugiej strony metoda ta jest bardzo wraliwa na zmiany nazw pl. Za kadym razem,
gdy zmienia si nazwa pola, do ktrego metoda  ma dostp, naley odpowiednio zmodyfikowa jej kod. Jednak bdy, ktre pojawiaj si w zwizku ze zmian
nazwy pola, s stosunkowo atwe do wykrycia. Nazwa pola, ktre nie moe by znalezione, pojawia si w komunikacie wyjtku.

Zastosowanie odwoa do pl staych


Odwoania do pl staych oferuj zalety zarwno waciwoci Fields, jak i metody
. Podobnie jak waciwo Fields, odwoania do pl staych s odwoaniami bezporednimi do pola, a zatem nie wymagaj przeszukiwania, jak ma to miejsce

Cz II Aplikacje bazodanowe

260

w przypadku metody . Ponadto poniewa nazwy pl staych oparte s na


nazwach powizanych pl, kod wykorzystujcy odwoania do pl staych jest zwykle
czytelniejszy i atwiejszy do zanalizowania.
Jednak w przeciwiestwie do waciwoci Fields i metody , ktre mog
by uywane zarwno przez domylne pola, jak i pola stae, w przypadku odwoa do pl
staych wymagane jest ich okrelenie. Jak wspomniano wczeniej, zmiana w strukturze
powizanej tabeli lub kolejnoci pl w poleceniu  czasem wie si z usuniciem
i ponownym okreleniem pl staych, wczajc w to ponown konfiguracj waciwoci
oraz procedur obsugi zdarze. W przypadku maej bazy danych nie jest to kopotliwe,
ale przy znacznej iloci tabel moe by nie do zaakceptowania.

Zastosowanie zmiennych pola


Mona wyrni jeszcze jedn technik dostpu do pl, ktra do tej pory nie zostaa
omwiona. Jest ona efektem poczenia dwch z trzech technik wymienionych wczeniej.
Zawiera dwa skadniki. Pierwszy z nich to deklaracja jednej zmiennej dla kadego pola,
do ktrego aplikacja bdzie daa dostpu. Drugi wie si z przypisaniem tej zmiennej
odwoania do pola zwrconego przez waciwo Fields lub metod .
Mimo, e taki sposb dostpu do pola wymaga na pocztku napisania znacznej iloci
kodu, to w zamian pniej uzyskamy dwie istotne korzyci. Pierwsza z nich to umieszczenie wszystkich wartoci przypisanych do zmiennych pl w jednym miejscu, takim
jak procedura obsugi zdarzenia OnCreate moduu danych. Jeli kolejne zmiany dokonywane s w powizanej strukturze jednej lub kilku tabel, wtedy wystarczy tylko zmodyfikowa przypisania zmiennych. Wszystkie pozostae odwoania do pl pozostan
niezmienione.
Druga korzy polega na tym, e do bezporedniego odwoywania si do kadego pola
mona uywa zrozumiaych nazw zmiennych. Poniewa zmienne bezporednio odwouj si do powizanych pl, wykonywany kod umoliwia rwnie szybki dostp, jak ma
to miejsce w przypadku waciwoci Fields lub odwoa do pl staych.
Przyjrzyjmy si komponentowi SQLClientDataSet, ktry znajduje si na module danych
projektu stosowanego we wczeniejszych przykadach tego rozdziau. Ten modu danych
moe zastosowa technik opisan powyej przez uycie dwch segmentw kodu.
Pierwszy z nich to deklaracja , dodawana do sekcji 

moduu danych:
 
  > &Q  > &Q
+#: 65>-#.
+#56 
+#+#6.#:, 
+# .#.6+5
+# .#.6+#<, ,
+#;:6+#<, ,
+#+#6###<, ,
+#:+
+#<S6 .#.#
+# +6$+5#-
+# 5 
+##>6S:#
+#+(# 

Rozdzia 8. Klasa TField

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  



W celu uzyskania odwoa do pl procedura obsugi zdarzenia OnCreate mgby rwnie


wykorzysta waciwo Fields. Jednak metoda  jest bardziej czytelna i atwiejsza w obsudze. Ponadto poniewa takie przypisanie i przeszukiwanie powizanego
pola wystpuje tylko raz dla kadego pola, zatem oglny wpyw metody 
na spadek wydajnoci jest niezauwaalny.
Odtd wszystkie odwoania do pl zestawu danych mog by wykonywane przy uyciu
zmiennych pola. Na przykad segment kodu dokonujcy konwersji na due litery z poprzedniej czci bdzie wyglda nastpujco:

& ,12-& 1
'  


*  > &Q2<  1

   
"

* # 

"
#77 '"*
  &&#
+# .#.6+52$ &
5  +# .#.6+52$ &

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.

Tworzenie nowych pl staych


Wszystkie pola, z ktrymi do tej pory mielimy do czynienia, byy powizane z polami
z pewnego zestawem danych pobieranego z bazy danych. Nowe pola stae s troch inne.
Chocia mog one by powizane z danymi wynikowego zestawu, wartoci, na ktre
pola te wskazuj nie s waciwie w nich przechowywane w ten sam sposb, w jaki ma
to miejsce w przypadku innych typw pl. Zamiast tego, dane zawarte w nowych polach
staych s wynikiem wykonania operacji. Operacja ta moe by wykonana przez same
nowe pola stae, tak jak ma to miejsce w przypadku pl wyszukiwania lub przy uyciu
procedury obsugi zdarzenia, ktra jest stosowana dla pl obliczeniowych. Nowe pola
stae s tylko do odczytu, poniewa ich dane nie s przechowywane w tabeli.
Zalenie od typu zestawu danych mona wyrni pi rodzajw nowych pl staych:
 danych,
 obliczeniowe,
 wyszukiwania,
 wewntrznych oblicze,
 agregacji.

Komponenty ClientDataSet oraz SQLClientDataSet obsuguj wszystkie wymienione


typy. Inne klasy pochodne klasy , ktre pojawi si w kolejnych wersjach Kyliksa
lub w produktach innych producentw, mog ich wszystkich nie obsugiwa.
Pole danych suy do definiowania pola staego, ktrego typ danych, a przez to rwnie
instancja klasy  rni si od pola staego tworzonego w normalnej sytuacji automatycznie. Na przykad wynikowy zestaw moe zawiera pole o typie danych )

,
ale jeli chcemy, aby pole stae byo typu  
, mona wtedy zastosowa pole danych.

Rozdzia 8. Klasa TField

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.

Tworzenie pola obliczeniowego


Dane wywietlane w polu obliczeniowym okrelane s przez kod dodany do procedury
obsugi zdarzenia OnCalcFields zestawu danych. Procedura ta jest wykonywana za
kadym razem, gdy zestaw danych musi odwiey swoje dane. Ma to miejsce, gdy zestaw
danych otwierany jest po raz pierwszy, czytane s rekordy lub zestaw danych przechodzi
w tryb edycji. Procedura obsugi zdarzenia OnCalcFields jest rwnie wykonywana za
kadym razem, gdy w kontrolce bazodanowej wywietlany jest rekord, ale tylko wtedy,
gdy waciwo AutoCalcFields ma warto domyln True.
Jeli procedura obsugi zdarzenia OnCalcFields jest wykonywana, wtedy zestaw danych
umieszczany jest w jednym z dwch specjalnych stanw: dsCalcFields lub dsInternalCalc. Jeli aktywny jest ktrykolwiek z nich, to mona przypisywa wartoci tylko polom

Cz II Aplikacje bazodanowe

264

obliczeniowym. Innymi sowy, w procedurze obsugi zdarzenia OnCalcFields nie


mona przypisywa wartoci do pl, ktre zwizane s z rzeczywistymi polami powizanego zestawu danych.
Parametr zestawu danych w procedurze obsugi zdarzenia OnCalcFields nie wskazuje
na biecy rekord. Zamiast tego wskazuje na rekord powizany z polem obliczeniowym.
Pozwala to zastosowa odwoanie do zestawu danych w celu odczytania danych z dowolnego innego pola rekordu i nastpnie wykona obliczenie. W celu wykonania obliczenia
mona rwnie wykorzysta inne dostpne informacje. Mona na przykad wykona
na innym zestawie danych polecenie wyszukiwania, przeszuka obiekt StringList lub
odczyta dane z kontrolki wizualnej. W tym przypadku decyzja naley do Ciebie.
Ponisze kroki opisuj, jak utworzy pole obliczeniowe i wprowadzi do niego dane
przy uyciu procedury obsugi zdarzenia OnCalcFields. W tym przykadzie zostanie
dodane nowe pole obliczeniowe do komponentu SQLClientDataSet wczeniej utworzonego projektu. Pole to obliczy nalen kwot sprzeday w oparciu o warto pola
TOTAL_VALUE pomniejszon o warto upustu (wyznaczonego przez pomnoenie
wartoci pl TOTAL_VALUE i DISCOUNT).
1. Wywietl modu danych projektu wykorzystywanego w poprzednich

przykadach tego rozdziau.


2. Aby wywietli edytor pl komponentu SQLClientDataSet1, kliknij go

dwukrotnie.
3. Kliknij prawym klawiszem myszy edytor pl i wybierz New Fields. Kylix

wywietli okno dialogowe New Field.


4. W polu Name wpisz AMOUNT_DUE i ustaw w polu Type warto Float.
5. Nastpnie wybierz warto Calculated dla opcji Field type. Okno dialogowe

New Field powinno teraz wyglda jak na rysunku 8.12.


Rysunek 8.12.
Okno dialogowe
New Field z dodanym
polem obliczeniowym

6. Aby zamkn okno dialogowe New Field, nacinij OK, a nastpnie dodaj

w edytorze pl nowe pole obliczeniowe. Domyln nazw tego pola jest


SQLClientDataSet1AMOUNT_DUE. Wolno j zmieni, ale w tym przykadzie
moe taka pozosta.

Rozdzia 8. Klasa TField

265

7. W oknie Object Inspector wybierz pole SQLClientDataSet1AMOUNT_DUE

i ustaw warto waciwoci Currency na True.


8. Teraz w oknie Object Inspector wybierz komponent SQLClientDataSet1

i dodaj do niego procedur obsugi zdarzenia OnCalcFields. Wprowad


do niej poniszy kod:

&  > &Q2<  1 
     

<  1+> 565#2$ &
<  1 +6$+5#2$ &B
 <  13+6$+5#2$ &L<  1 52$ &


9. Zapisz projekt i uruchom go. Za pomoc poziomego paska przewijania przewi

siatk, tak aby zobaczy pole AMOUNT_DUE. Pole to powinno wywietli


wyniki oblicze podobne do tych na rysunku 8.13.
Rysunek 8.13.
Pole AMOUNT_
DUE wywietla
wyniki oblicze
uzyskanych
z procedury
obsugi zdarzenia
OnCalcFields
komponentu
SQLClientDataSet

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

dbExpress palety komponentw. Ustaw warto waciwoci DBConnection


tego komponentu na SQLConnection1 i wpisz we waciwoci CommandText
wyraenie (-"'.))"( (-)'/(('0(0/))"(.
Na kocu ustaw warto waciwoci Active na True.
3. Aby otworzy edytor pl komponentu SQLClientDataSet1, kliknij go

dwukrotnie.
4. Kliknij prawym klawiszem myszy edytor pl i wybierz New Fields.

Kylix otworzy okno dialogowe New Field.


5. W polu Name Field wpisz EMPLOYEE_NAME, a nastpnie ustaw w polu
Type warto String oraz w polu Size Field podaj warto 12.
6. Nastpnie ustaw warto opcji Field Type na Lookup. Po wykonaniu tych

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

w prawo, tak aby pojawio si pole EMPLOYEE_NAME. Aby wej w tryb


edycji pola, kliknij je. Nastpnie, tak jak to wida na rysunku 8.14, w celu
wywietlenia menu rozwijanego zawierajcego nazwiska pracownikw
z tabeli EMPLOYEE kliknij strzak rozwijania. Wybierz jedno z nazwisk
i przewi siatk w drug stron, tak aby sprawdzi, czy w polu SALES_REP
zmieni si numer dla wybranego pracownika.
Rysunek 8.14.
Podczas edycji
pola wyszukiwania
w komponencie
DBGrid
automatycznie
tworzone jest
menu rozwijane
z pozycjami tabeli
wyszukiwania

Rozdzia 8. Klasa TField

267

W przykadzie tym wyszukiwanie opiera si na pojedynczym polu. cile mwic,


pole SALES_REP tabeli SALES odpowiada polu EMP_NO tabeli EMPLOYEE. Istnieje
moliwo utworzenia pola wyszukiwania, w ktrym wyszukiwanie opiera si nie
tylko na jednym polu, ale na dwch lub wicej. Aby utworzy pole wyszukiwania
oparte na czu zawierajcym dwa lub wicej pl, naley oddzieli rednikami nazwy
odpowiednich pl. Dotyczy to zarwno pola tekstowego Key Fields, jak i Lookup
Keys okna dialogowego New Field.

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.

Chocia pola agregacji s przydatne, ich zastosowanie wie si z wykonaniem kilku


krokw w okrelonej kolejnoci. W przeciwnym razie nie bd dziaa.
1. Aby pogrupowa jedno lub kilka pl, utwrz indeks, ktry te pola obejmuje. Indeks

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

do pojedynczego pola lub w wyraeniu, ktre zawiera kilka pl i staych.


Poniej pokazano przykady poprawnych wyrae agregacji:

& 56 
   +6$+5#B  +6$+5#L 5
&,  +$+5#L133
&,  +6$+5#L5>  5

Cz II Aplikacje bazodanowe

268

5. Ustaw poziom grupowania pola agregacji. Poziom grupowania okrela ilo

pl grupowan przez indeks. W przypadku indeksu z trzema polami, aby


pogrupowa pierwsze i drugie pole, naley ustawi warto grupowania na 2.
Natomiast aby utworzy sum wartoci pola TOTAL_VALUE wedug wartoci
pola CUST_NO, naley ustawi warto GroupingLevel na 1.
6. Ustaw warto waciwoci Active pola agregacji na True.
7. Ustaw warto waciwoci AggregatesActive zestawu danych, do ktrego

naley pole agregacji, na True.


8. Uaktywnij zestaw danych, ustawiajc warto jej waciwoci Active na True
lub wywoujc po uruchomieniu aplikacji metod '
.

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

SQLClientDataSet1 i nastpnie, aby wywietli edytor definicji indeksu


(patrz rysunek 8.15), kliknij przycisk wielokropka.
Rysunek 8.15.
Edytor waciwoci
IndexDefs

4. Kliknij przycisk Add New. Po zaznaczeniu waciwoci IndexDefs w oknie

Object Inspector ustaw warto waciwoci Name na BYCUST (patrz rysunek


8.16), natomiast waciwoci Fields na CUST_NO. Zamknij edytor FieldDefs.
Rysunek 8.16.
Edytor waciwoci
IndexDefs

5. Wybierz ponownie komponent SQLClientDataSet1 i ustaw warto

waciwoci IndexName na BYCUST.


6. Aby otworzy edytor pl, kliknij dwukrotnie komponent SQLClientDataSet1.

Aby otworzy okno dialogowe New Field, nacinij klawisze Ctrl+N.

Rozdzia 8. Klasa TField

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

pl staych wszystkie pola agregacji wywietlane s na oddzielnej licie w dolnej


czci edytora, tak jak to wida na rysunku 8.17.
Rysunek 8.17.
Edytor pl

9. Zaznacz w edytorze pl pole agregacji SUM_VALUE i w oknie Object Inspector

ustaw warto waciwoci IndexName na BYCUST. Nastpnie ustaw warto


waciwoci GroupingLevel pola na , a waciwoci Expression na
3')"#)(4. Na samym kocu ustaw warto waciwoci Currency
pola oraz waciwoci Active na True.
10. Wybierz ponownie komponent SQLClientDataSet1 i ustaw warto jego

waciwoci AggregatesActive oraz waciwoci Active na True.


11. Umie komponent Label z zakadki Standard palety komponentw oraz

komponent DBEdit z zakadki Data Controls palety komponentw po prawej


stronie dwch przyciskw znajdujcych si w grnym panelu. Ustaw warto
waciwoci Caption komponentu Label na Suma wartoci pola TOTAL_VALUE
wg klienta. Nastpnie ustaw warto waciwoci DataSource komponentu
DBEdit na DataModule2.DataSource1, a waciwoci DataField na SUM_VALUE.
12. Zapisz zmiany w projekcie i uruchom go.

Po uruchomieniu gwny formularz powinien wyglda podobnie jak na rysunku 8.18.


Podczas przejcia od jednego rekordu klienta do nastpnego zmienia si warto wywietlana w polu agregacji. Ponadto w przypadku edycji danych pola TOTAL_VALUE dla
okrelonego klienta po zatwierdzeniu wprowadzonej wartoci warto pola agregacji
rwnie si zmieni.
Poniewa pola agregacji nie dziaaj prawidowo w pocztkowej wersji Kyliksa,
rwnie ten przykad nie zadziaa. Mimo e w czasie nawigacji po rekordach klientw
zmienia si warto, nie ma to nic wsplnego z polem TOTAL_VALUE, a powinno.
Rwnie w zalenoci od wersji poprawki firmy Borland zwizanej z polami agregacji
kod i poszczeglne kroki przykadu mog wymaga pewnych modyfikacji. Aby uzyska
wicej informacji, zajrzyj do pomocy lub dokumentacji dostarczonej z wersjami Kyliksa
o numeracji 1.x.

Cz II Aplikacje bazodanowe

270
Rysunek 8.18.
Pole agregacji
zmienia si
automatycznie
w przypadku
przechodzenia
midzy rekordami
klientw i ich edycji

W nastpnym rozdziale omwimy zagadnienia dotyczce bezporedniej pracy z zestawami


danych.

You might also like