Zgryźliwość kojarzy mi się z radością, która źle skończyła.
Rozdział 17.
Formularze baz danych
C:\Dokumenty\Roboczy\Delphi 4 dla kazdego\17.doc 683
Rozdzia³ 17. ¨ Formularze baz danych 703
Po względnie nieciekawym wstępie do architektury baz danych możesz przejść teraz do bardziej interesujących zagadnień związanych z budowaniem aplikacji bazodanowych. Pierwszym z tych zagadnień jest poznanie zasad tworzenia formularzy baz danych – czemu właśnie poświęcony jest niniejszy rozdział.
Zobaczysz, w jaki sposób tworzy się formularze baz danych przy użyciu Kreatora Formularzy Baz Danych. Dowiesz się również, jak zbudować formularz bazy danych od podstaw. Pod koniec rozdziału zapoznasz się z komponentami danych Delphi. Są to komponenty, które wyświetlają informacje z bazy danych, a także umożliwiają ich edycję – można znaleźć je na stronie Data Controls Palety Komponentów. Komponenty te są często nazywane mianem kontrolek wrażliwych na dane (ang. data-aware controls); w tym rozdziale będą one nazywane po prostu komponentami danych.
Kreator Formularzy Baz DanychKreator Formularzy Baz Danych pozwala łatwo i szybko tworzyć formularze baz danych. Przy użyciu tego kreatora można stworzyć formularz danych od początku do końca. Nie trzeba umieszczać w formularzu jakichkolwiek komponentów bazodanowych, wystarczy jedynie uruchomić kreator i pozwolić mu na samodzielnie działanie.
Żaden ze zautomatyzowanych procesów nie jest na tyle dobry, aby w pełni zadowolić wszystkich ludzi. Nie będę więc stwarzał tutaj iluzji, że formularze stworzone przy pomocy kreatora Delphi staną się pełnym urzeczywistnieniem Twoich potrzeb lub że Kreator Formularzy Baz Danych wykona za Ciebie całą pracę. Kreator jest w stanie wykonać początkową pracę związaną z przygotowaniem formularza bazy danych, potem trzeba samemu wkroczyć do pracy i przystosować formularz do własnych potrzeb.
Kreator Formularzy Baz Danych pozwala tworzyć zarówno formularze proste, jak i formularze typu „master/details”. Umożliwia on również określenie, czy zbiorem danych będzie TTable, czy też TQuery. Kreator pozwala wybrać tabelę bazy danych i pola tej tabeli, które chcemy wyświetlić na formularzu. Możliwy jest również wybór opcji ułożenia komponentów. Po dostarczeniu kreatorowi wszystkich niezbędnych informacji utworzony zostanie formularz.
Aby rozpocząć pracę Kreatora Formularzy Baz Danych, wybierz polecenie menu Database | Form Wizard; możesz również uruchomić w tym celu kreator ze strony Business w Repozytorium.
Najpierw pokażę jak utworzyć formularz prosty, później zajmiemy się formularzem typu master/details.
Tworzenie formularza prostego przy pomocy Kreatora Formularzy Baz DanychPo uruchomieniu Kreatora Formularzy Baz Danych wyświetlane jest okno przedstawione na rysunku 17.1.
Rysunek 17.1.
Pierwsza strona Kreatora Formularzy Baz Danych
Celem tej strony jest wybór typu bazy danych, jaką chcemy stworzyć oraz zbioru danych, z którego chcemy skorzystać. Sekcja Form Options pozwala wybrać między utworzeniem formularza prostego (z pojedynczym zbiorem danych), a utworzeniem formularza typu master/details (o tabelach typu master/details była już mowa w poprzednim rozdziale, więcej informacji na ten temat znajdziesz w dalszej części niniejszego rozdziału). Sekcja DataSet Options umożliwia określenie typu zbioru danych – TTable lub TQuery. Na potrzeby naszego ćwiczenia zupełnie wystarczające są ustawienia domyślne dotyczące formularza prostego ze zbiorem danych typu TTable. Kliknij na przycisku Next, aby przejść do kolejnej strony.
W niektórych przypadkach w pojedynczym formularzu wymagane będzie zaimplementowanie danych pochodzących z więcej niż jednej tabeli, ale bez użycia zależności master/details; kreator Formularzy Baz Danych pozwala jednak na wybór tylko jednej tabeli.
Istnieje następujące wyjście z tej sytuacji: uruchom Kreator Formularzy Baz Danych i wybierz pierwszą tabelę; po utworzeniu formularza zmień nazwy komponentów Table i DataSource (użyj nazw znaczących). Uruchom ponownie kreator i wybierz drugą tabelę; kiedy wyświetlony zostanie formularz, wybierz wszystkie znajdujące się w nim komponenty bazodanowe i skopiuj je do Schowka. Przejdź następnie do pierwszego formularza i wklej do niego komponenty znajdujące się w Schowku. Teraz wystarczy już tylko usunąć drugi formularz i całość będzie gotowa.
Na kolejnej stronie spotkasz się z prośbą o wybranie tabeli, z której czerpane będą dane. Lista rozwijalna o nazwie Drive or Alias umożliwia wybór nazwy bazy danych tak, jak to miało miejsce podczas ustawiania właściwości DatabaseName komponentu zbioru danych na etapie projektowania; można również wskazać katalog, w którym zlokalizowana jest tabela. Na potrzeby naszego przykładu wybierzemy alias DBDEMO. W polu listy o nazwie Table Name wyświetlone zostaną nazwy tabel należących do wybranej bazie danych; wybierz spośród nich ANIMALS.DBF. Kreator Formularzy Baz Danych wygląda teraz tak, jak przedstawia to rysunek 17.2. Kliknij na przycisku Next, aby przejść do następnej strony.
Rysunek 17.2.
Wybór tabeli za pomocą Kreatora Formularzy Baz Danych
Trzecia strona kreatora zawiera prośbę o wybranie pól tabeli, które powinny znaleźć się w formularzu. Pola wybranej przed chwilą tabeli wyświetlane są w polu listy o nazwie Available Fields, umieszczona obok lista Ordered Selected Fields zawiera natomiast pola, które zostały wybrane dla umieszczenia ich w tworzonym formularzu; żonglowanie elementami obydwu list umożliwiają umieszczone pomiędzy nimi przyciski.
Aby dodać pole, kliknij na jego nazwie w polu listy Available Fields i wybierz przycisk >; można zaznaczyć jednocześnie większą liczbę pól. Kliknięcie na przycisku >> spowoduje dodanie wszystkich pól.
Klikając podwójnie na nazwie pola można dodać je do listy Ordered Selected Fields, natomiast ponowne podwójne kliknięcie na nazwie pola spowoduje jego usunięcie z tej listy.
Po dodaniu pól do listy pól wybranych można zmienić ich kolejność za pomocą operacji „przeciągnij i upuść” lub przy użyciu przycisków strzałek w górę/w dół, znajdujących się pod listą. Trzecia strona kreatora przedstawiona została na rysunku 17.3. Dodaj wszystkie pola do listy pól wybranych i kliknij na przycisku Next.
Rysunek 17.3.
Trzecia strona Kreatora Formularzy
Baz Danych – dodawanie pól
Kolejna strona kreatora prosi o określenie sposobu ustawienia komponentów każdego pola w formularzu. Możliwy jest wybór z pośród trzech następujących schematów:
u Horizontally (ułożenie w poziomie)
u Vertically (ułożenie w pionie)
u In a grid (ułożenie w siatce)
Kliknij na każdym z trzech przycisków opcji i przyjrzyj się rysunkowi wyświetlanemu po lewej stronie kreatora – rysunek ten pokazuje schemat każdego z możliwych ułożeń. Omawiana strona kreatora przedstawiona została na rysunku 17.4. Wybierz przycisk Vertically i kliknij na przycisku Next.
Rysunek 17.4.
Wybór stylu ułożenia komponentów w Kreatorze Formularzy Baz Danych
Kolejna strona (rys. 17.5) pyta o miejsce, w którym umieszczone powinny być etykiety pól względem każdego z komponentów danych. Etykiety mogą zostać umieszczone nad komponentem lub po jego lewej stronie. Również i tutaj rysunek w lewej części okna ulega zmianom w zależności od tego, która z dwóch opcji jest aktualnie wybrana. W naszym przykładzie umieścimy etykiety nad komponentami.
Rysunek 17.5.
Strona kreatora umożliwiająca określenie ułożenia etykiet komponentów
Podczas tworzenia formularza Delphi wybiera typ komponentu, który najlepiej pasuje do typu danych reprezentowanego przez niego pola. Przykładowo, zwykłe pole tekstowe jest reprezentowane przez komponent DBEdit, pole Memo reprezentuje komponent DBMemo, a polu typu BLOB odpowiada komponent DBImage. Rzecz jasna nie musi to odzwierciedlać intencji użytkownika, do którego tym samym należy ostateczna decyzja w tym względzie.
Strona przedstawiona na rysunku 17.5 pojawia się jedynie w przypadku wybrania opcji pionowego ułożenia komponentów.
Końcowa strona Kreatora Formularzy Baz Danych prosi o dokonanie dwóch wyborów:
u Pierwszy z nich umożliwia uczynienie generowanego formularza głównym formularzem aplikacji, co następuje w wyniku zaznaczenia pola Generate a main form.
Miej na uwadze fakt, że nakazanie kreatorowi tworzenia głównego formularza aplikacji spowoduje odebranie tego statusu dotychczasowemu formularzowi głównemu – ten ostatni pozostaje jednak częścią projektu jako jeden z formularzy drugorzędnych; jeżeli nie jest on dłużej potrzebny, należy go usunąć z projektu za pomocą przycisku Remove from Project.
u Drugi wybór stanowi alternatywę pomiędzy wygenerowaniem pojedynczego formularza (opcja Form Only) albo formularza wraz z towarzyszącym mu modułem danych (opcja Form and DataModule). W tym drugim przypadku komponent reprezentujący zbiór danych (TTable lub TQuery) oraz komponent DataSource umieszczone zostaną w module danych, nie w formularzu (moduły danych będą opisane w rozdziale 18.).
W niniejszym przykładzie generowany będzie sam formularz (opcja Form Only), który będzie jednocześnie głównym formularzem aplikacji (opcja Generate a main form).
Końcową stronę Kreatora Formularzy Baz Danych przedstawia rysunek 17.6.
Rysunek 17.6.
Ostatnia strona Kreatora Formularzy Baz Danych
Fizyczne wygenerowanie formularza nastąpi w efekcie kliknięcia w przycisk Finish; gotowy formularz wygląda tak, jak przedstawia to rysunek 17.7.
Rysunek 17.7.
Formularz wygenerowany przez Kreator Formularzy Baz Danych
Przyjrzyj się rysunkowi 17.7, jak widać formularz zawiera komponent danych dla każdego z wybranych wcześniej pól oraz etykietę dla każdego komponentu. Etykiety są pisane wielkimi literami, ponieważ w taki sposób reprezentowane są nazwy pól w tej tabeli. U samej góry okna znajduje się komponent DBNavigator umożliwiający nawigowanie wśród rekordów tabeli.
Nowy formularz w działaniuNic nie stoi już na przeszkodzie, aby kliknąć na przycisku Run i przekonać się, jak działa aplikacja wykorzystującą wygenerowany formularz. Po uruchomieniu aplikacji wyświetlany jest pierwszy rekord w zbiorze danych; przemieszczanie się po rekordach umożliwiają przyciski komponentu DBNavigator. Pamiętaj, że pracujesz aktualnie z rzeczywistą bazą danych – w szczególności możesz więc edytować rekordy, zmieniając którąkolwiek z wartości dowolnego komponentu edycyjnego; do zapisania zmian służy przycisk Post...