02 Rozdział 02a


Rozdział 2
Szybki start
Nietrudno zrozumieć niecierpliwość Czytelników, którzy nie mają ochoty przed
zbudowaniem pierwszej aplikacji brnąć przez kilka wstępnych rozdziałów.
Dlatego niniejszy rozdział zawiera wiadomości, które pozwolą jak najszybciej
rozpocząć pracę z Delphi. Niemal od razu zajmiemy się tworzeniem prostych
formularzy i podłączaniem do baz danych. Jest to zatem rozdział dla osób
z niecierpliwością oczekujących pierwszego kontaktu z Delphi.
Zagadnienia poruszane w tym rozdziale obejmują:

tworzenie formularza bazy danych przy pomocy kreatora (Database Form
Wizard);

najważniejsze właściwości komponentów TTable, TDataSource
i TDBEdit;

tworzenie formularzy baz danych metodami standardowymi, bez pomocy
kreatora;

aliasy BDE - pełnione funkcje i sposób definiowania;

tworzenie modułów danych i dodawanie ich do składnicy obiektów (Object
Repository);

tworzenie formularzy typu nadrzędny-podrzędny (ang. master-detail).
Terminologia
W dalszej części niniejszego rozdziału używamy wielu terminów, opisujących
elementy architektury baz danych w środowisku Delphi. Zamieszczona poniżej
tabela 2.1 zawiera zestawienie najważniejszych terminów, dotyczących baz danych
w środowisku Delphi. Zestawienie to pozwoli uniknąć nieporozumień i ułatwi
odbiór tekstu. Należy zwrócić uwagę, że niektóre z terminów, zebranych w tabeli,
dotyczą bezpośrednio środowiska Delphi, inne zaś obsługi baz danych.
36 Część I
Tabela 2.1. Najważniejsze terminy, dotyczące dostępu do baz danych
w środowisku Delphi.
Termin Wyjaśnienie
Tabela Zbiór wierszy (lub rekordów) w bazie danych.
Można sobie np. wyobrazić tabelę FAKTURA,
w której każdy wiersz odpowiadałby zawartości
jednej faktury.
Wiersz Rekord (jednostka) w tabeli. Na przykład każdy
wiersz tabeli KLIENT zawiera dane o jednym
kliencie.
Kolumna Pole (atrybut), występujące we wszystkich
wierszach tabeli. Na przykład tabela FAKTURA
może zawierać kolumnę (pole) NumerKlienta. Pole
NumerKlienta występuje wówczas we wszystkich
wierszach tej tabeli.
Borland Database Engine Zestaw bibliotek DLL i innych plików pomoc-
niczych, umożliwiających Delphi (i innym
programom firmy Borland) dostęp do baz danych.
Borland Database Engine (BDE) oferuje interfejs
programowy API dostępu do baz danych, operujący
na stosunkowo wysokim poziomie abstrakcji
i jednakowy dla wszystkich obsługiwanych platform
systemów baz danych. Pozwala to na znaczne
ograniczenie nakładu pracy, niezbędnego do
przygotowywania pełnowartościowych aplikacji,
obsługujących bazy danych.
IDAPI Independent Database Application Programming
Interface firmy Borland. Jest to interfejs, za którego
pośrednictwem aplikacje (w tym aplikacje Delphi)
komunikują się z BDE. Programista, korzystający
z Delphi, stosunkowo rzadko zmuszony będzie do
używania w programie bezpośrednich wywołań
IDAPI. Większość niezbędnych wywołań jest
bowiem realizowana przez komponenty Delphi,
odpowiedzialne za obsługę baz danych. Programista
wykorzystuje metody, właściwości i zdarzenia,
związane z komponentami, które z kolei realizują
odpowiednie wywołania IDAPI.
Szybki start 37
Termin Wyjaśnienie
Program obsługi BDE Biblioteka DLL (lub pakiet takich bibliotek)
umożliwiająca komunikację BDE z konkretną
platformą systemu zarządzania bazą danych. Pakiet
Delphi w wersji Client/Server zawiera programy
obsługi (drivers), umożliwiające korzystanie z baz
Sybase, Microsoft, Oracle, InterBase, Informix,
DB2, Paradox, dBASE i dowolnych zródeł danych,
dostępnych za pośrednictwem 32-bitowego
mechanizmu ODBC. Programy, napisane w Delphi,
nie komunikują się wprost z programami obsługi
BDE, korzystają natomiast z tzw. aliasów BDE,
funkcjonujących w oparciu o nie.
Alias BDE Zestaw parametrów konfiguracyjnych BDE,
definiujących sposób podłączenia się do konkretnej
bazy danych. Aliasy oparte są na programach
obsługi baz danych BDE. Tworzy się je przy
pomocy programu BDE Administrator albo
Database Explorer (zawartego w pakiecie Delphi).
Aliasy przypisane są zazwyczaj do konkretnych baz
danych. Na przykład jeden alias może być
skojarzony z bazą danych Northwind, dostarczaną
razem z pakietem Microsoft Access, drugi natomiast
z inną bazą MS Access - Orders. Oba aliasy oparte
będą na tym samym programie obsługi SQL Links
dla platformy Access, gdyż oba skojarzone są
z bazami danych Access. W przeciwieństwie do
programów obsługi BDE, które związane są
z poszczególnymi platformami zarządzania bazami
danych, aliasy BDE skojarzone są z konkretnymi,
pojedynczymi bazami danych na danej platformie.
Programy obsługi SQL Wydajne sterowniki, zapewniające dostęp do baz
Links (łącza SQL) danych, używane przez BDE do łączenia z systema-
mi zarządzania bazami danych typu klient-serwer.
Pakiet Delphi w wersji Client/Server zawiera
programy obsługi SQL Links dla platform: Sybase,
Microsoft, Oracle, InterBase, Informix i DB2.
Programy obsługi SQL Links eliminują konieczność
korzystania z alternatywnych metod dostępu do
powyższych platform, np. z mechanizmu ODBC.
Programiście pozostawiono jednak wybór dowolnej
38 Część I
Termin Wyjaśnienie
metody dostępu.
Programy obsługi ODBC Programy obsługi, zapewniające dostęp do baz
danych, zgodne ze specyfikacją Open Database
Connectivity firmy Microsoft. Delphi może łączyć
się z systemami obsługi baz danych back-end za
pośrednictwem 32-bitowych driverów ODBC. Do
tworzenia i zarządzania zródłami danych typu
ODBC (które porównać można do aliasów BDE)
służy mini-aplikacja ODBC Administrator z Panelu
Sterowania Windows.
Kontrolka dostępu do Komponent (niewidoczny w trakcie wykonywania
danych programu), zapewniający aplikacji dostęp do bazy
danych. Kontrolki dostępu do danych zgrupowane
są na stronie Data Access palety komponentów
Delphi. Do kontrolek tego typu należą komponenty
TDatabase, TTable i TDataSource.
TDataset
Klasa obiektów Delphi; zapewnia dostęp do tabel
(baz danych) i zbiorów danych, będących wynikami
zapytań. Komponenty TTable, TQuery
i TStored Proc pochodzą od klasy TDataset.
Z tego względu w dalszej części książki komponenty
powyższe nazywane są często  komponentami typu
TDataset .
TTable
Komponent Delphi, zapewniający dostęp do tabel
(baz danych). Skojarzenie komponentu TTable
z rzeczywistą tabelą odbywa się za pośrednictwem
własności TTableName (nazwa tabeli).
TQuery
Komponent Delphi, umożliwiający konstruowanie,
wykonywanie i przetwarzanie zapytań SQL.
TStoredProc
Komponent Delphi, umożliwiający uruchamianie
skompilowanych procedur SQL, przechowywanych
na serwerze bazy danych (znanych również jako
procedury osadzone, ang. stored procedures).
Kontrolka powiązana Komponent graficzny (widoczny w trakcie
z danymi wykonywania programu), który - korzystając
z mechanizmów oferowanych przez odpowiednie
kontrolki dostępu do danych - umożliwia
użytkownikowi przeglądanie i modyfikowanie
Szybki start 39
Termin Wyjaśnienie
zawartości bazy. Kontrolki powiązane z danymi
zgrupowane są na stronie Data Controls palety
komponentów Delphi. W większości przypadków
można uznać je za specjalne wersje standardowych
kontrolek, wyświetlające i/lub dopuszczające edycję
danych zgromadzonych w bazie. Do kontrolek
powiązanych z danymi należą komponenty
TDBGrid, TDBNavigator i TDBEdit.
TDataSource
Komponent Delphi, stanowiący łącze pomiędzy
zbiorami danych (komponentami typu TDataset),
a kontrolkami powiązanymi z danymi. Komponenty
powiązane z danymi zawierają odwołania do
komponentów TDataSource (zródeł danych), a te
z kolei - do kontrolek typu TDataset (zbiorów
danych).
TField
Klasa obiektów Delphi; zapewnia bazie danych
dostęp do pól w tabeli. Podczas dodawania do
formularza komponentów, reprezentujących pola
(przy pomocy edytora pól - modułu Fields Editor),
Delphi tworzy komponenty potomne w stosunku do
TField, takie jak TStringField czy
TIntegerField. Komponenty klasy TField,
dodane do formularza, w hierarchii własności należą
do tego właśnie formularza, a nie do skojarzonego
z nimi zbioru danych TDataset.
Przegląd architektury
Przyjrzyjmy się teraz ogólnej architekturze środowiska obsługi baz danych
w Delphi. Aplikacje napisane w Delphi komunikują się z lokalnymi i odległymi
bazami danych za pośrednictwem modułu Borland Database Engine. W przypadku
formatów lokalnych, na przykład tabel Paradoxa i dBASE, moduł BDE
wykorzystuje własne programy obsługi lokalnych baz danych. Z kolei
w przypadku formatów baz danych, przechowywanych na odległych serwerach,
takich jak Oracle czy Sybase, BDE nawiązuje łączność z serwerami baz danych
typu back-end, korzystając przy tym z programów obsługi SQL Links i ODBC.
Programy te odwołują się często do dedykowanych bibliotek, dostarczanych przez
producentów odpowiednich systemów zarządzania bazami danych. Opisane
zależności ilustruje rysunek 2.1.
40 Część I
Aplikacje Użytkownika
Rysunek 2.1
Struktura dostępu
do baz danych
w Delphi jest
Alias BDE
prosta,
a jednocześnie
zapewnia dużą
elastyczność.
Sterownik BDE
Dedykowany sterownik
Sterownik ODBC
bazy danych
W ramach aplikacji kontrolki powiązane z danymi odwołują się do komponentów
typu TDataSource. Zazwyczaj formularze aplikacji wykorzystują zaledwie
kilka kontrolek TDataSource, mimo że zawierają bardzo wiele różnych
kontrolek powiązanych z danymi. Te ostatnie zawierają odwołania do jednej lub
kilku kontrolek TDataSource, a te z kolei - do jednego lub kilku zbiorów
danych (TDataset). Sytuacja, w której formularz zawiera tylko jeden komponent
TDataset i jedno zródło danych TDataSource, nie należy do rzadkości. Na
rysunku 2.2 przedstawiono relacje pomiędzy wymienionymi elementami.
Szybki start 41
Rysunek 2.2
TDatabase
Mechanizm
dostępu do bazy
danych w aplikacji
napisanej
w Delphi.
TQuery TTable TStoredProc
TDatasource
TDBGrid TDBEdit TDBListBox
Elastyczność przedstawionej powyżej wielopoziomowej architektury upraszcza
tworzenie aplikacji wydajnych, a zarazem skalowalnych. Dzięki oddzieleniu
programów obsługi BDE - pełniących funkcję serwera back-end lub łączących się
z nim - od komponentów aplikacji, komunikujących się z użytkownikiem,
całkowita zmiana części back-end bazy danych nie wymaga (przynajmniej
w teorii) jednoczesnej rekompilacji programu. W modularnej architekturze
poszczególne elementy mogą być indywidualnie zastępowane innymi, bez
konieczności przeprojektowywania albo rekompilacji programu.
Po ogólnym omówieniu elementów architektury proponujemy zapoznanie się
z kilkoma praktycznymi uwagami i sugestiami, dotyczącymi wykorzystania
komponentów Delphi w rzeczywistych aplikacjach do obsługi baz danych.
uzyskać dostęp do baz danych w Delphi nie trzeba koniecznie korzystać
Aby
z komponentu TDatabase. Oferuje on kilka dodatkowych funkcji i kontrolek,
które w określonych sytuacjach bywają przydatne; należy jednak pamiętać, że
w aplikacjach do obsługi baz danych nie jest wymagane stosowanie tego
komponentu.
komponentu TSession korzysta się z reguły wyłącznie przy tworzeniu
Z
aplikacji wielowątkowych. Aplikacja taka inicjuje szereg równolegle
wykonywanych  wątków . Istnieje zatem możliwość jednoczesnego
42 Część I
wykonywania kilku operacji na bazie danych. Typowe aplikacje do obsługi baz
danych nie są wielowątkowe, a zatem nie ma zazwyczaj potrzeby
bezpośredniego odwoływania się do klasy TSession. Delphi automatycznie
tworzy taki komponent (przechowywany w zmiennej Session) przy
uruchamianiu aplikacji. A zatem, chcąc w aplikacji jednowątkowej dotrzeć do
metod i własności komponentu TSession, wystarczy odwołać się do
wspomnianej zmiennej.

Komponenty TQuery i TStoredProc mają zastosowanie wyłącznie
w aplikacjach korzystających z własnych procedur w języku SQL lub
odwołujących się do procedur osadzonych na serwerze. Do otwierania baz
danych w dowolnym formacie lokalnym lub w formacie odległego serwera
z powodzeniem wystarczy komponent TTable.
zapisywania i odczytywania danych z bazy wykorzystuje się zazwyczaj
Do
właśnie komponent TTable. Stanowi on kluczowy element mechanizmu
dostępu do baz danych w Delphi. Umożliwia odwoływanie się do tabel baz
danych i wymianę informacji między bazą a kontrolkami powiązanymi
z danymi.

Komponenty, zgromadzone na stronie Data Controls, mają charakter wizualny
i są powiązane z danymi - umożliwiają wyświetlanie danych i ich edycję przez
użytkownika. Są odpowiednikami typowych kontrolek, spotykanych często
w aplikacjach Windows; ich kluczową cechą jest dynamiczne powiązanie
z bazą danych. Przy pomocy omawianych komponentów autor aplikacji do
obsługi bazy danych tworzy interfejs komunikacji z użytkownikiem. Kontrolki
powiązane z danymi współdziałają z kontrolkami dostępu do danych, takimi jak
TTable.

Komponenty potomne w stosunku do TDataset (na przykład: TTable,
TQuery i TStoredProc) pobierają dane z bazy, ale nie mogą przekazać
ich bezpośrednio do kontrolek powiązanych z danymi (takich jak TDBEdit);
funkcje pośrednika między tymi dwoma grupami komponentów pełni  zródło
danych - TDataSource. Oznacza to, że komponenty powiązane z danymi,
takie jak TDBEdit, nigdy nie odwołują się bezpośrednio do komponentu typu
TDataset, który zapewnia im dostęp do danych. Odwołują się natomiast do
komponentu TDataSource, a ten z kolei - do TDataset.

A zatem do stworzenia prostego formularza, umożliwiającego prezentację
i edycję danych, potrzebne są trzy komponenty: TTable, TDataSource
i wybrane kontrolki powiązane z danymi (TDBEdit, TDBMemo i tym
podobne).
Szybki start 43
Prosty formularz
W niniejszej sekcji prześledzimy proces tworzenia działającego formularza
ekranowego, powiązanego z bazą danych. Pozwoli to na praktyczne zapoznanie się
z elementami architektury Delphi.
Delphi oferuje dwa sposoby tworzenia formularzy do obsługi baz danych.
Formularz taki można utworzyć ręcznie, przenosząc komponenty na czysty
formularz i wzajemnie je łącząc. Można również skorzystać z kreatora formularzy
baz danych (Database Form Wizard), który utworzy formularz automatycznie.
Rozpoczniemy od tego drugiego sposobu. Przed kontynuowaniem lektury należy
uruchomić Delphi i utworzyć nowy projekt.
Kreator Database Form Wizard
Kreator służy do automatycznego tworzenia formularza do obsługi bazy danych,
zgodnie z parametrami podawanymi przez autora aplikacji, którego rola ogranicza
się do odpowiadania na kolejno zadawane, proste pytania. Aby uruchomić
kreatora, należy wybrać z menu polecenie Database\Form Wizard.
Pierwsze okno dialogowe kreatora zawiera pytanie o rodzaj tworzonego
formularza - można wybrać formularz prosty lub typu  nadrzędny-podrzędny
(ang. Master\detail). Należy ponadto zdecydować, czy nowy formularz ma
powstać w oparciu o komponenty TTable czy TQuery. W omawianym
przykładzie wystarczy zaakceptować ustawienia domyślne i kliknąć przycisk Next.
Rysunek 2.3 ilustruje pierwszy etap pracy z kreatorem.
Rysunek 2.3.
Wybór typu
tworzonego
formularza i typu
zbioru danych.
44 Część I
Kreator prosi następnie o wybór tabeli, która ma być używana w formularzu.
Można teraz wybrać alias DBDEMOS z rozwijanej listy Drive or Alias name.
W ten sposób określony został serwer bazy danych albo położenie plików bazy
danych na dysku. Po wybraniu DBDEMOS na liście nazw tabel (Table Name)
pojawi się zawartość katalogu, zdefiniowanego w ramach aliasu BDE DBDEMOS.
Pozwala to na wybranie tabeli BIOLIFE, której nazwa widoczna jest w pobliżu
początku listy. Drugie okno dialogowe kreatora Database Form Wizard
przedstawiono na rysunku 2.4.
W kolejnym kroku kreator prezentuje listę pól tabeli BIOLIFE. Pola można
wybierać pojedynczo, przy użyciu przycisku > ,albo wybrać jednorazowo
wszystkie pola, korzystając z przycisku >>. Należy teraz użyć przycisku >>
i kliknąć przycisk Next, w celu przejścia do kolejnego etapu pracy z kreatorem.
Wybór pól ilustruje rysunek 2.5.
Rysunek 2.4.
Wybór tabeli, która
ma być używana
z tworzonym
formularzem.
Szybki start 45
Rysunek 2.5.
Wybór pól
w kreatorze
formularzy baz
danych.
Kolejne okno dialogowe kreatora służy do wyboru orientacji układu pól na
tworzonym formularzu. Dostępne są trzy opcje: układ poziomy (Horizontal),
pionowy (Vertical) i postać siatki (Grid) - zob. rysunek 2.6. Należy kliknąć
przycisk Next, co spowoduje przyjęcie domyślnego układu poziomego.
Rysunek 2.6.
Autor aplikacji
wybiera orientację
pól na tworzonym
formularzu.
Następne - i jednocześnie ostatnie - okno dialogowe, prezentowane przez kreatora,
zawiera przełącznik decydujący, czy tworzony formularz ma być głównym
46 Część I
formularzem aplikacji (Generate a main form). Główny formularz wyświetlany jest
jako pierwszy po uruchomieniu aplikacji. W naszym przykładzie zaakceptujemy
domyślne ustawienie i utworzymy główny formularz aplikacji. Oczywiście,
w miarę dodawania nowych formularzy do aplikacji jej autor musi jednoznacznie
zdecydować, który z nich ma być formularzem głównym.
Ostatnie okno dialogowe zawiera opcję tworzenia - oprócz formularza - także
nowego modułu danych (Form and DataModule). W naszym przykładzie należy
zaakceptować domyślne ustawienie i utworzyć wyłącznie formularz (Form only).
Ostatni etap pracy z kreatorem ilustruje rysunek 2.7.
Po udzieleniu odpowiedzi na wszystkie pytania, zadawane przez kreatora, należy
kliknąć przycisk Finish. Nowy formularz powinien teraz pojawić się w polu
graficznej edycji formularzy (Form Designer) Delphi. Formularz powinien być
wyposażony we własne komponenty TTable i TDataSource, a także zestaw
kontrolek powiązanych z danymi. Na rysunku 2.8 przedstawiono wzór
utworzonego formularza.
Rysunek 2.7.
Autor aplikacji
może zdecydować,
czy kreator tworzyć
będzie tylko
główny formularz,
czy też dołączy do
niego moduł
danych.
Szybki start 47
Rysunek 2.8.
Tak powinien
wyglądać
utworzony,
przykładowy
formularz.
Utworzony formularz można oczywiście przetestować w działaniu. Naciśnięcie F9
spowoduje uruchomienie aplikacji, tworzonej w ramach bieżącego projektu.
Ponieważ nowy formularz miał stać się głównym formularzem aplikacji, właśnie
on pojawi się bezpośrednio po uruchomieniu programu (zob. rysunek 2.9).
Rysunek 2.9
Utworzony
formularz pojawia
się na ekranie po
uruchomieniu
programu.
Użytkownik może teraz przeglądać tabelę BIOLIFE, korzystając z kontrolki
TDBNavigator, znajdującej się w górnej części formularza. Narzędzie to
48 Część I
umożliwia również dodawanie, modyfikację i usuwanie wierszy tabeli. Przycisk +
służy do dodawania rekordu; przycisk z minusem - do usuwania rekordu. Aby
rozpocząć modyfikację rekordu, wystarczy zacząć wpisywać nowe dane
w którymkolwiek z pól. Do trwałego zapisywania poczynionych zmian służy
przycisk Post (oznaczony znakiem  V - akceptacji). Jak nietrudno zauważyć,
utworzenie pełnowartościowego formularza edycji danych w bazie BIOLIFE
wymagało minimalnego nakładu pracy.
Po zakończeniu praktycznych eksperymentów z utworzonym formularzem należy
go zamknąć i powrócić do środowiska Delphi.
UWAGA:
Formularze, utworzone przy pomocy kreatora Database Form Wizard, można
dowolnie dostosowywać i modyfikować. Są one bowiem zwykłymi formularzami
Delphi. W praktyce często okazuje się, że najlepszą drogą projektowania
formularzy jest wstępne tworzenie ich przy użyciu kreatora i dalsza obróbka przy
pomocy standardowych narzędzi Delphi.
Analiza nowego formularza
Proponujemy teraz bliższą analizę struktury i funkcjonowania automatycznie
utworzonego formularza. W górnej jego części powinien znajdować się komponent
TTable. Należy kliknąć na nim i nacisnąć klawisz F11, co spowoduje przejście
do okienka Object Inspector. Warte odnotowania są dwa atrybuty. Atrybut
DatabaseName zawiera nazwę aliasu BDE DBDEMOS, wybranego w jednym
z pól dialogowych kreatora. Alias ten umożliwia modułowi BDE zlokalizowanie
tabeli, określonej przez atrybut TableName. W naszym przypadku jest to tabela
BIOLIFE, wybrana w kreatorze. Omawianą tutaj zawartość okienka Object
Inspector przedstawiono na rysunku 2.10.
Szybki start 49
Rysunek 2.10.
Analiza
komponentu
TTable.
Na uwagę zasługuje również komponent TDataSource. Powinien on znajdować
się na formularzu tuż obok komponentu TTable.
Również w tym przypadku należy podkreślić znaczenie dwóch atrybutów. Atrybut
DataSet zawiera odwołanie do komponentu TTable omawianego formularza -
Table1. Oznacza to, że komponent TDataSource, przekazując dane z i do
kontrolek powiązanych z danymi, będzie zapisywał i odczytywał te dane z tabeli,
wskazanej w komponencie TTable.
Drugi ważny atrybut - AutoEdit, ma nadaną wartość logiczną True (jest to jego
wartość domyślna). Nadanie atrybutowi AutoEdit wartości True powoduje, że
jakakolwiek modyfikacja danych w skojarzonej kontrolce powiązanej z danymi,
spowoduje przełączenie komponentu TDataSource w tryb edycji. Na rysunku
2.11 przedstawiono oba omawiane atrybuty w okienku Object Inspector.
50 Część I
Rysunek 2.11.
Analiza
komponentu
TDataSource.
Ostatnia grupa elementów, zasługująca na bliższą analizę, to kontrolki powiązane
z danymi, umieszczone na formularzu. Umożliwiają one użytkownikowi
wprowadzanie i edycję danych. Należy teraz kliknąć na kontrolce TDBEdit,
znajdującej się w górnej części formularza. Następnie należy wybrać równocześnie
kilka innych kontrolek typu TDBEdit. Gdy wybranych będzie kilka kontrolek,
należy nacisnąć klawisz F11, co spowoduje wywołanie okienka Object Inspector.
UWAGA:
Aby wybrać jednocześnie kilka komponentów należy - po wybraniu pierwszego -
klikać kolejno na następnych, trzymając przyciśnięty klawisz SHIFT. Istnieje
również inna metoda - należy przytrzymać klawisz CTRL i zaznaczyć myszą
prostokąt, w którym znajdują się żądane elementy. Po zwolnieniu klawisza myszy
wszystkie elementy, które znalazły się wewnątrz prostokąta, zostaną zaznaczone.
W ramach komponentu TDBEdit szczególne znaczenie mają dwa atrybuty.
Atrybut DataSource wskazuje na komponent TDataSourec formularza.
Oznacza to, że dane wprowadzane za pośrednictwem kontrolki graficznej
przesyłane są do odpowiedniej tabeli za pośrednictwem komponentu
DataSource1. Z kolei atrybut DataField określa, z którym polem tabeli
związana jest dana kontrolka.
Bliższa analiza komponentów TTable, TDataSource i TDBEdit ujawnia ich
ścisłe wzajemne powiązanie. Komponenty TTable stanowią podstawowy łącznik
pomiędzy formularzem a tabelami w bazie danych. Komponenty TDataSource
pełnią rolę pośrednika między komponentami TTable, a powiązanymi z nimi
Szybki start 51
kontrolkami. Wreszcie kontrolki powiązane z danymi, takie jak TDBEdit
dostarczają i pobierają dane z komponentów TDataSource. Można zatem
stwierdzić, że Delphi zapewnia dostęp do baz danych za pośrednictwem
elastycznej, wielopoziomowej architektury.
Pewne wątpliwości może budzić funkcja komponentów TDataSource. Czy są
one rzeczywiście niezbędne? Rozważmy następujący problem: gdyby kontrolki,
takie jak TDBEdit, mogły komunikować się bezpośrednio z komponentami typu
TDataSet, w jaki sposób autor aplikacji zmieniałby zbiór danych TDataSet,
związany ze wszystkimi kontrolkami danego formularza? Należałoby wybierać
kolejno wszystkie kontrolki i zmieniać wartość ich atrybutów DataSet.
W sytuacji, gdy wszystkie kontrolki odwołują się do jednego, wspólnego zródła
danych TDataSource, zmiana związanego z nimi komponentu TDataSet
sprowadza się do modyfikacji atrybutu jednego tylko komponentu -
TDataSource.
Oczywiście można zawsze wybrać jednocześnie wszystkie kontrolki na formularzu
(zob. ostatnia uwaga) i błyskawicznie zmienić ich atrybut DataSource. Nie da
się jednak znalezć równie prostego rozwiązania w sytuacji, gdy zmiana zródła
danych ma odbyć się już w trakcie wykonania programu. W takim przypadku
program musi pojedynczo zmieniać wartości atrybutu DataSource wszystkich
kontrolek. Nawet jeśli programista stworzy odpowiednią pętlę, i tak zmiany
wprowadzane będą do każdej kontrolki z osobna. Rozwiązania przyjęte w Delphi
są gruntownie przemyślane i na ogół optymalne.
Trudniejszy sposób tworzenia prostego formularza
Po utworzeniu prostego formularza najłatwiejszym z dostępnych sposobów,
prześledzimy proces ręcznego budowania takiego formularza bez pomocy kreatora.
Poniższe kroki rozpoczynają procedurę ręcznego tworzenia formularza do obsługi
bazy danych. Należy:
1. Ponownie załadować formularz, utworzony automatycznie przy rozpoczynaniu
projektu. Formularz ten powinien być pusty i nosić nazwę Form1.
2. Umieścić na formularzu dwa komponenty TPanel. Jeden z nich umieścić
w pobliżu górnej krawędzi formularza. Atrybutowi Align tego komponentu
należy nadać wartość alTop. Dzięki temu komponent ten będzie znajdował się
zawsze w górnej części formularza - niezależnie od jego wielkości.
3. Umieścić drugi komponent TPanel w dolnej części formularza i nadać
atrybutowi Align wartość alClient. W ten sposób umieszczony komponent
zajmie zawsze cały obszar formularza, nie zajęty przez pierwszy panel.
Niezależnie od aktualnego rozmiaru formularza na ekranie, drugi panel pokryje
zawsze cały obszar pod pierwszym, górnym panelem.
52 Część I
4. Następnie należy usunąć napis, wyświetlany standardowo przez każdy z paneli.
Wystarczy w tym celu usunąć zawartość atrybutu Caption obu komponentów
TPanel. Należy je wybrać i klawiszem F11 przywołać na ekran okienko
Object Inspector. Następnie należy usunąć zawartość pola, odpowiadającego
atrybutowi Caption.
Rysunek 2.12.
Usuwanie
zawartości
atrybutu Caption
w oknie Object
Inspector.
Kolejnym etapem tworzenia formularza będzie umieszczenie kontrolki
TScrollBox na dolnym panelu. Dzięki temu użytkownik będzie miał dostęp do
większej liczby kontrolek, które nie muszą jednocześnie mieścić się na formularzu.
Jeśli tabela zawiera wiele różnych pól, konieczne będzie umieszczenie na
formularzu odpowiedniej liczby kontrolek powiązanych z danymi. Dzięki
obiektowi TScrollBox obszar zawierający kontrolki będzie można w razie
potrzeby przewijać. Atrybut Align kontrolki TScrollBox umieszczonej na
panelu powinien przyjąć wartość alClient. TScrollBox zajmie wówczas
cały obszar dolnego panelu.
Na rysunku 2.13 przedstawiono przykładowy formularz, zaopatrzony już
w kontrolkę TScrollBox.
Po przygotowaniu graficznej struktury formularza możemy kolejno umieszczać na
nim komponenty. Rozpoczniemy od dwóch komponentów niegraficznych:
TTable i TDataSource. Są one dostępne na stronie Data Access palety
komponentów Delphi.
Położenie obu komponentów na formularzu nie jest istotne, gdyż i tak pozostają
one niewidoczne podczas wykonywania programu. Wskazane jest jednak
Szybki start 53
umieszczanie ich w górnej części formularza - będą wówczas łatwo dostępne,
niezależnie od ewentualnych zmian jego wymiarów.
Rysunek 2.13.
Nowy formularz
z umieszczonym na
nim komponentem
TScrollBox.
Atrybutowi DatabaseName komponentu Table1 należy przypisać nazwę
aliasu BDE DBDEMOS, a atrybutowi TableName - nazwę tabeli BIOLIFE.DB,
umieszczonej w katalogu określonym przez alias DBDEMOS.
Atrybut DataSet komponentu TDataSource powinien wskazywać na
komponent Table1. W ten sposób powstanie połączenie pomiędzy tabelą
TTable a kontrolkami, obsługiwanymi przez zródło danych TDataSource.
WSKAZÓWKA:
Podwójne kliknięcie w polu atrybutu DataSet komponentu TDataSource
spowoduje automatyczne przypisanie mu nazwy jedynej tabeli TTable. Na
formularzu znajduje się obecnie tylko jeden komponent potomny w stosunku do
TDataSet - jest to właśnie tabela Table1. Dlatego Delphi automatycznie
skojarzy właśnie tę tabelę ze wskazanym komponentem TDataSource.
Na rysunku 2.14 przedstawiono formularz z komponentami TTable
i TDataSource.


Wyszukiwarka

Podobne podstrony:
02 ROZDZIA 2 Krtka historia zegarmistrzostwa, czyli minimum jakie wiedzie naley
02 rozdział 02
Tru i Jake 02 Rozdział 4
02 Rozdzial 6 9
02 Rozdzial 2
Tru i Jake 02 Rozdział 1
Tru i Jake 02 Rozdział 2
02 rozdział historia
PA lab [02] rozdział 2
Tru i Jake 02 Rozdział 3
Crissy Smith [Were Chronicles 02] Pack Enforcer Rozdział od 1 do 3
Rozdzial 02
Stephani Hecht Archanioły 02 Zniewolone Anioły Rozdział 1
kopczewska (pliki z kodami) Rozdział 02 Podstawowe operacje
Stephani Hecht Archanioły 02 Zniewolone Anioły Rozdział 5
Stephani Hecht Archanioły 02 Zniewolone Anioły Rozdział 2

więcej podobnych podstron