plik


ÿþ54 Cz[ I Rysunek 2.14. Nowy formularz z komponentami TTable i TDataSource. Po przygotowaniu komponentów TTable i TDataSource mo|na przystpi do umieszczania na formularzu kontrolek powizanych z danymi. Kontrolki takie s elementami interfejsu u|ytkownika, powizanymi z tabelami baz danych. Wykazuj du|e podobieDstwo do typowych kontrolek, spotykanych we wszystkich aplikacjach Windows, z tym |e realizuj dodatkowo funkcje pobierania i zapisywania danych w bazie. Na przykBad kontrolka TEdit sBu|y do edycji wierszy tekstu. Delphi oferuje równie| analogiczny komponent, powizany z danymi, noszcy nazw TDBEdit. Zachowuje si on tak samo jak TEdit, tyle |e sBu|y do edycji kolumny baz danych. Prezentuje na ekranie dane przechowywane aktualnie w kolumnie i zapisuje w kolumnie wszelkie zmiany wprowadzone przez u|ytkownika. Jako pierwsz mo|na na formularzu umie[ci kontrolk TDBNavigator. Dostpna jest ona na stronie Data Controls palety komponentów Delphi. Komponent TDBNavigator nale|y umie[ci na górnym panelu formularza. Atrybut DataSource TDBNavigatora powinien wskazywa na zródBo danych TDataSource, umieszczone uprzednio na formularzu. Omawiane czynno[ci ilustruje rysunek 2.15. W dalszej kolejno[ci na formularzu ulokowa mo|na pozostaBe kontrolki danych. Zadanie to mo|na zrealizowa na dwa sposoby. Pierwszy - bardziej kBopotliwy - polega na umieszczaniu komponentów TDBEdit, TDBMemo, itd. na formularzu, ustalaniu warto[ci ich atrybutów DataSource i DataField, wreszcie - opisaniu kontrolek przy pomocy komponentów TLabel. Metoda ta jest bez wtpienia skuteczna, mo|na jednak obra znacznie prostsz drog. Szybki start 55 Rysunek 2.15. Formularz z umieszczonym komponentem TDBNavigator. Szybsza metoda sprowadza si do przecignicia komponentów TField z edytora pól Delphi (Fields Editor) na formularz. Po umieszczeniu komponentu TField na formularzu, Delphi automatycznie utworzy odpowiedni kontrolk powizan z danymi i opisujc j etykiet. Aby skorzysta z tej metody przygotowania formularza nale|y: 1. Podwójnie klikn na komponencie TTable, co spowoduje wywoBanie edytora pól (Fields Editor). 2. Klikn prawym klawiszem myszy w oknie edytora pól i wybra opcj Add fields (Dodaj pola). 3. Gdy na ekranie pojawi si lista pól, klikn OK, co spowoduje dodanie wszystkich pól. 4. Pola pozostan pod[wietlone w oknie Fields Editor. Nale|y je teraz przecign na formularz. Dla ka|dego pola utworzona zostanie nowa kontrolka powizana z danymi i etykieta TLabel. Na rysunku 2.16 pokazano przykBadowy formularz ze wszystkimi kontrolkami i etykietami. Nasz nowy formularz jest w zasadzie gotowy. Opisane powy|ej czynno[ci doprowadziBy do utworzenia formularza identycznego z przygotowanym wcze[niej przez kreatora Database Form Wizard. 56 Cz[ I Rysunek 2.16. Nowy formularz z kompletem kontrolek powizanych z danymi. Aby móc uruchomi nowy formularz trzeba jeszcze tylko zdecydowa, w jaki sposób i na którym etapie dziaBania programu ma zosta otwarta tablica TTable. Dostpne s dwie mo|liwo[ci. Pierwsza polega na nadaniu atrybutowi Active warto[ci True ju| podczas tworzenia formularza i programu. Tabela zostanie otwarta ju| w trakcie pracy nad formularzem w Delphi, a tak|e w czasie wykonywania programu. Mo|na równie| wpisa polecenie otwarcia tabeli TTable do podprogramu obsBugi zdarzenia OnCreate lub OnShow. W takim przypadku tabela bdzie otwierana w trakcie wykonywania programu. Kreator Database Form Wizard korzysta wBa[nie z drugiego z opisanych sposobów - wpisuje polecenie otwarcia TTable do podprogramu OnCreate, co powoduje, |e tabela jest otwierana niezwBocznie po utworzeniu formularza przez program. W omawianym przykBadzie pod|ymy t sam drog, co kreator Database Form Wizard i wpiszemy odpowiednie polecenie do podprogramu obsBugi zdarzenia OnCreate. Naci[nicie klawisza F11 przywoBa okienko Object Inspector. Nale|y teraz klikn mysz na li[cie rozwijanej i wybra zdefiniowany wBa[nie formularz ze spisu klas komponentów. Nastpnie nale|y przej[ na stron Events (Zdarzenia) okienka ObjectInspector i podwójnie klikn na zdarzeniu OnCreate. Spowoduje to otwarcie edytora tekstu zródBowego, w którym nale|y wpisa nastpujce polecenie: Table1.Open; W ten sposób tabela bdzie otwierana natychmiast po utworzeniu formularza przez program. Formularze aplikacji s na ogóB automatycznie tworzone zaraz po uruchomieniu programu. Zmiana odpowiedniej opcji w polu dialogowym Project Options umo|liwia rezygnacj z automatycznego tworzenia formularzy. Szybki start 57 Uruchamianie programu z nowym formularzem Formularz jest teraz gotowy do uruchomienia. Aby zagwarantowa, |e formularz pojawi si na ekranie jako pierwszy po uruchomieniu aplikacji, nale|y uczyni go formularzem gBównym aplikacji. Oto odpowiednia procedura postpowania: 1. Wybra pozycj Options z menu Project. 2. Na stronie Forms okna dialogowego Options klikn na li[cie rozwijanej Main form i wybra z niej formularz Form1. Wskazany formularz stanie si gBównym formularzem aplikacji. 3. Klikn OK w celu zachowania zmian. Mo|na teraz nacisn klawisz F9, co spowoduje uruchomienie aplikacji. Na ekranie powinien pojawi si nowy formularz. rysunek 2.17 przedstawia przykBadowy wygld ekranu po uruchomieniu aplikacji. Rysunek 2.17. Nowy formularz w trakcie wykonania programu. Po wypróbowaniu nowego formularza nale|y go zamkn i powróci do Delphi. Tworzenie aplikacji do obsBugi baz danych Znajomo[ podstaw tworzenia prostych formularzy, sBu|cych do obsBugi baz danych, pozwala przej[ do bardziej zBo|onego zagadnienia, jakim jest budowanie caBych aplikacji do obsBugi baz danych. Niniejsza sekcja porusza nastpujce problemy: 58 Cz[ I wykorzystanie komponentu TDatabase w aplikacjach; definiowanie aliasów BDE; przygotowywanie moduBów danych; tworzenie formularzy typu nadrzdny-podrzdny; wykorzystanie komponentu TQuery; projektowanie raportów. Komponent TDatabase Stosowanie komponentu TDatabase w aplikacjach do obsBugi baz danych nie jest wprawdzie konieczne, jednak znakomicie uBatwia scentralizowane zarzdzanie dostpem do bazy danych. Na przykBad, aby zmieni poziom izolacji transakcji w ramach aplikacji, wystarczy zmodyfikowa warto[ atrybutu TransIsolation komponentu TDatabase. Aby zastpi domy[ln sekwencj logowania, mo|na doBczy odpowiedni fragment kodu do procedury obsBugi zdarzenia OnLogin w komponencie TDatabase. Podobnie, aby okre[li parametry specyficzne dla programu obsBugi bazy danych, wystarczy doda odpowiednie wpisy do atrybutu Params. Aby przygotowa komponent TDatabase dla formularza Form1 nale|y: 1. Odnalez komponent TDatabase na stronie Data Access paska narzdzi Delphi i przenie[ ten komponent na formularz. PoBo|enie TDatabase na formularzu nie jest istotne - jest to komponent nie posiadajcy reprezentacji graficznej, podobnie jak TTable i TDataSource, i jako taki nie bdzie widoczny podczas wykonywania programu. 2. Przypisa atrybutowi AliasName komponentu TDatabase nazw aliasu DBDEMOS; alias ten u|ywany byB wcze[niej przez kontrolki umieszczone na formularzu. 3. Nada atrybutowi DatabaseName warto[ dbTest. Atrybut DatabaseName (nazwa bazy danych) okre[la nazw, za po[rednictwem której inne komponenty bd odwoBywaBy si do danego komponentu TDatabase. OdwoBanie takie realizowane jest poprzez wBasny atrybut DatabaseName ka|dego z takich komponentów. A zatem, aby u|ywa komponentu TDatabase z komponentem TTable, nale|y atrybutom DatabaseName obu tych komponentów nada t sam warto[. 4. Po przygotowaniu TDatabase nale|y tak zmodyfikowa komponent TTable, aby odwoBywaB si on do nowej bazy danych. W tym celu nale|y wywoBa okno Object Inspector i klikn na li[cie rozwijanej, widocznej obok Szybki start 59 nazwy atrybutu DatabaseName komponentu Table1. Na li[cie powinna by widoczna nazwa dbTest. Nale|y wybra t nazw przez kliknicie na niej mysz. W ten sposób formularz realizowaB bdzie wszystkie swoje funkcje, zwizane z dostpem do bazy danych, za po[rednictwem pojedynczego komponentu TDatabase. Na rysunku 2.18 przedstawiono formularz z nowym komponentem TDatabase. 5. Nale|y pamita o zapisaniu wprowadzonych zmian. Rysunek 2.18. Dostp do bazy danych mo|e by realizowany centralnie poprzez komponent TDatabase. Aliasy BDE Program Database Explorer, dostarczany w pakiecie Delphi, ma wiele mo|liwych zastosowaD. W niniejszej sekcji poka|emy, w jaki sposób mo|na przy jego pomocy zdefiniowa alias Borland Database Engine. Dostp do baz danych z Delphi odbywa si wBa[nie poprzez aliasy BDE. Termin  alias mo|e by nieco mylcy. Sugeruje on, |e nazwa obiektu-bazy danych - jest nieprawdziwa, |e jest to pseudonim. W rzeczywisto[ci alias BDE przyrówna mo|na do zródBa danych ODBC. Stanowi on zestaw parametrów, definiujcych sposób podBczenia do danej bazy danych lub systemu zarzdzania baz danych. Do tej pory w przykBadach korzystali[my z dostarczanego w pakiecie Delphi aliasu demonstracyjnego DBDEMOS. Korzystaj z niego równie| przykBadowe aplikacje 60 Cz[ I doBczone do Delphi. Rzeczywiste aplikacje do obsBugi baz danych wymagaBy bd zapewne specjalnie dla nich przygotowanych aliasów BDE. Aby zdefiniowa wBasny alias BDE nale|y: 1. Wybra polecenie Explore z menu Database Delphi. Spowoduje to uruchomienie programu Database Explorer. 2. Uaktywni fiszk Database, o ile nie byBa ju| uaktywniona, po czym klikn na pozycji Databases w drzewie, widocznym poni|ej zakBadki. 3. Klikn prawym klawiszem myszy na pozycji Database i wybra opcj New z menu kontekstowego. 4. Program prosi o wybranie sterownika bazy danych dla nowego aliasu BDE. Tworzony alias bdzie funkcjonowaB w oparciu o sterownik Paradox, nale|y zatem wybra opcj Standard i klikn OK. 5. Program pyta teraz o nazw nowego aliasu bazy danych. Nale|y wpisa PDOXDEMO i nacisn ENTER. 6. Klikn na pozycji Path w prawym panelu i wpisa nazw katalogu, w którym przechowywane s pliki przykBadowych baz danych Delphi (np. C:\Program Files\Borland\Delphi3\Examples\Data) i nacisn¹æ ENTER. UWAGA: Wpisanie w nowym aliasie [cie|ki do katalogu z przykBadowymi bazami danych jest w istocie równoznaczne ze stworzeniem kopii aliasu DBDEMOS. UBatwi to testowanie nowego aliasu, gdy| we wskazanym katalogu znajduj si ju| gotowe tabele. W rzeczywistych aplikacjach konieczne bdzie oczywi[cie wskazanie innego katalogu. 7. Klikn przycisk Apply (Zastosuj) na pasku narzdzi programu Database Explorer. Ikona na tym przycisku ma posta niebieskiej strzaBki, skierowanej w prawo. Spowoduje to zapisanie definicji nowego aliasu. Na rysunku 2.19 przedstawiono okno Database Explorera po zakoDczeniu definiowania nowego aliasu. Szybki start 61 Rysunek 2.19. Definicja nowego aliasu. Po stworzeniu nowego aliasu BDE nale|y przystosowa formularz do korzystania z niego. W tym celu nale|y: 1. Zamkn program Database Explorer i powróci do projektanta formularzy (Form Designer) Delphi. 2. Klikn na komponencie TDatabase, po czym nacisn F11 w celu przywoBania okna Object Inspector. 3. W polu atrybutu AliasName komponentu Database1 wpisa nazw nowego aliasu. Na rysunku 2.20 przedstawiono okno Object Inspector z odpowiednimi zmianami. 62 Cz[ I Rysunek 2.20. Teraz TDatabase odwoBuje si do nowego aliasu BDE. Nale|y teraz zapisa efekty dotychczasowych dziaBaD i uruchomi aplikacj. Otworzy ona - podobnie jak poprzednio - tabel Paradox o nazwie BIOLIFE. Po wypróbowaniu aplikacji nale|y j zamkn i powróci do Delphi. ModuBy danych ModuB danych (ang. data module) jest specjalnym typem formularza, przeznaczonym do przechowywania komponentów, takich jak kontrolki dostpu do baz danych. ModuB taki umo|liwia zgromadzenie wszystkich kontrolek danych, nie posiadajcych reprezentacji graficznej, w jednym miejscu, uBatwia dostp do nich i zarzdzanie. Wskazane jest tworzenie oddzielnego moduBu danych dla ka|dej bazy danych, u|ywanej przez aplikacj Delphi. Nie jest wprawdzie konieczne umieszczanie wszystkich tabel jednej bazy danych w jednym module, jednak|e daje to mo|liwo[ zapisania moduBu danych w skBadnicy obiektów Delphi (Object Repository) i ponowne wykorzystanie go w innych aplikacjach. Taki sposób postpowania pomaga w utrzymaniu jednolitych standardów we wszystkich tworzonych aplikacjach i umo|liwia centralne zarzdzanie dostpem do baz danych. Aby utworzy nowy moduB danych nale|y wybra polecenie File\New Data Module. Na ekranie pojawi si niewielki formularz, na którym bdzie mo|na umieszcza komponenty. Zwykle wskazane jest rozcignicie okienka moduBu danych - jego rozmiar, przyjmowany domy[lnie przez Delphi, mo|e okaza si niewystarczajcy. Szybki start 63 Po utworzeniu moduBu danych mo|na naD przenie[ komponenty dostpu do danych, znajdujce si obecnie na formularzu Form1. Tworzc caB aplikacj do obsBugi bazy danych, nale|aBoby umie[ci mo|liwie jak najwicej takich komponentów w jej module danych. Nale|y teraz wybra komponenty TTable, TDataSource i TDatabase na formularzu Form1 i nacisn CTRL+X, co spowoduje usunicie ich z formularza i przeniesienie do Schowka Windows. Nastpnie nale|y wybra nowy moduB danych i nacisn CTRL+V w celu przeniesienia komponentów ze Schowka do moduBu danych. Na rysunku 2.21 pokazano moduB danych zawierajcy przeniesione ju| komponenty dostpu do danych. Rysunek 2.21. Nowy moduB danych zawiera teraz komponenty dostpu do danych. WSKAZÓWKA: W zale|no[ci od pierwotnego umiejscowienia TTable, TDataSource i TDatabase na formularzu, komponenty te mog  schowa si za praw lub doln krawdzi okna moduBu danych. Je[li po wci[niciu CTRL+V na brzegach okna moduBu danych pojawi si paski przewijania, to z pewno[ci przynajmniej jeden z komponentów pozostaje niewidoczny. Mo|na teraz zmieni rozmiar okna moduBu danych, tak aby objBo ono wszystkie kontrolki; mo|na równie| skorzysta z pasków przewijania, dotrze do wszystkich komponentów i przecign je w pobli|e lewego-górnego rogu okna. Po zakoDczeniu operacji wycinania i wklejania, nale|y powróci do formularza, obsBugujcego baz BIOLIFE i skorygowa wszystkie odwoBania do komponentów 64 Cz[ I dostpu do danych. Przeniesienie tych komponentów do moduBu danych naruszyBo powizania midzy nimi a kontrolkami powizanymi z danymi, które pozostaBy na formularzu. Kontrolki powizane z danymi, takie jak TDBEdit, umieszczone na formularzu, odwoBywaBy si do zródBa danych TDataSource, które zostaBo wBa[nie przeniesione. Delphi automatycznie likwiduje takie odwoBanie. Przed podjciem dalszych czynno[ci nale|y zatem skorygowa naruszone odwoBania. Aby komponenty z formularza Form1 mogBy odwoBywa si do moduBu danych, konieczne jest wymienienie pliku tego moduBu w klauzuli Uses formularza Form1. Dziki temu formularz  zobaczy komponenty zawarte w module danych. Nale|y zatem zaBadowa formularz BIOLIFE i wybra opcj Use Unit z menu File. Nastpnie nale|y wybra plik tekstu zródBowego moduBu danych (powinien on nosi nazw Unit3). Od tej chwili obiekty zawarte w module danych s dostpne na formularzu Form1, tak samo jak w przypadku ich bezpo[redniego umieszczenia na tym formularzu. Nastpnie nale|y wybra wszystkie komponenty powizane z danymi, znajdujce si na formularzu (w tym równie| komponent TDBNavigator) i nacisn F11 w celu przywoBania okna Object Inspector. W oknie tym klikn na nagBówku rozwijanej listy, widocznym przy atrybucie DataSource, i wybra komponent TDataSource, zawarty w module danych. Nale|y zwróci uwag, |e nazwa komponentu TDataSource na li[cie poprzedzona jest kwalifikatorem, okre[lajcym nazw moduBu danych. Rysunek 2.22 przedstawia zmodyfikowany formularz, odwoBujcy si do nowego moduBu danych. Rysunek 2.22. Formularz odwoBuje si do utworzonego moduBu danych. Szybki start 65 Otwieranie tabeli TTable realizowane byBo poleceniem wpisanym wprost w tekst zródBowy podprogramu. Dlatego równie| to odwoBanie do komponentu musi zosta skorygowane. Naci[nicie klawisza F11 przywoBa okienko Object Inspector. Nale|y teraz klikn mysz na li[cie rozwijanej i wybra formularz ze spisu komponentów. Nastpnie nale|y przej[ na stron Events (Zdarzenia) okienka ObjectInspector i podwójnie klikn na zdarzeniu OnCreate. Spowoduje to otwarcie edytora tekstu zródBowego, w którym powinno by widoczne nastpujce polecenie: Table1.Open; Formularz nie zawiera ju| komponentu Table1, a zatem polecenie to jest niepoprawne. Formalnie poprawnym poleceniem byBoby: DataModule3.Table1.Open; Takie rozwizanie stworzyBoby jednak niepotrzebn, a nawet niepo|dan zale|no[ midzy moduBami kodu. Aplikacja musiaBaby tworzy moduB danych przed utworzeniem formularza BIOLIFE, w przeciwnym przypadku wywoBanie metody Open tabeli Table1 spowodowaBoby naruszenie reguB dostpu. Lepsza metoda polega na caBkowitej rezygnacji z polecenia otwierania tabeli w tek[cie zródBowym. Aatwiej bdzie otworzy tabel ju| na etapie projektowania formularza. Pozwoli to na przegldanie rzeczywistych danych na formularzu podczas jego tworzenia. Nie bdzie te| potrzebne otwieranie tabeli w trakcie wykonywania aplikacji. A zatem otwieranie tabeli na etapie tworzenia aplikacji wi|e si z mniejszym nakBadem pracy i zapewnia wiksz elastyczno[. Nale|y teraz usun polecenie Table1.Open z podprogramu obsBugi zdarzenia OnCreate i zapisa formularz. Nastpnie nale|y zaBadowa moduB danych i wybra na nim komponent TTable. Naci[nicie klawisza F11 przywoBa okienko Object Inspector, a podwójne kliknicie na atrybucie Active komponentu Table1 spowoduje otwarcie tabeli. Po wykonaniu powy|szych czynno[ci nale|y zapisa projekt. Aplikacja jest gotowa do uruchomienia. Po jej przetestowaniu i upewnieniu si, |e nadal funkcjonuje zgodnie z oczekiwaniami, nale|y powróci do Delphi. Utworzony samodzielnie moduB danych dodamy teraz do skBadnicy obiektów Delphi (Object Repository). Zapisywanie formularzy - zarówno zwykBych, jak i peBnicych rol moduBów danych - w skBadnicy obiektów jest na ogóB korzystne, gdy| tak zachowane formularze mog by wprost wykorzystane w innych projektach; mo|na te| na ich podstawie tworzy formularze potomne. Aby doda formularz do skBadnicy obiektów nale|y klikn prawym klawiszem myszy w obszarze okna moduBu danych (ale nie na |adnym z zawartych w nim komponentów) i wybra opcj Add to Repository z menu kontekstowego. Jako tytuB (Title) mo|na wpisa dmBIOLIFE, za[ w polu opisu (Description) - mo|liwie 66 Cz[ I jednoznaczny komentarz, np.  formularz moduBu danych dla bazy BIOLIFE . Z listy rozwijanej Page nale|y wybra pozycj Data Modules, w polu Author wpisa swoje nazwisko, a nastpnie klikn OK. Okno dialogowe Add To Repository, sBu|ce do dodawania obiektów do skBadnicy, przedstawiono na rysunku 2.23. UWAGA: ModuBowi danych w skBadnicy obiektów mo|na równie| przypisa ikon. W miar dodawania kolejnych moduBów do skBadnicy oka|e si zapewne, |e przypisanie ró|nych ikon znacznie uBatwia pózniejsz identyfikacj formularzy. Aby przypisa nowemu moduBowi danych specjaln ikon, nale|y posBu|y si przyciskiem Browse w oknie dialogowym Add To Repository. Rysunek 2.23. WypeBnione okno dialogowe Add To Repository (dodawanie do skBadnicy obiektów) Je[li moduB danych nie zostaB dotychczas zapisany na dysku, to program zaproponuje zapisanie moduBu przed jego dodaniem do skBadnicy obiektów. Na odpowiednie pytanie nale|y odpowiedzie twierdzco (Yes) i wprowadzi [cie|k dostpu do pliku. ModuB danych dmBIOLIFE zostaB dodany do skBadnicy obiektów. Mo|na go bdzie u|ywa we wszystkich aplikacjach, wymagajcych dostpu do tabeli BIOLIFE. Szybki start 67 Tworzenie formularza typu nadrzdny-podrzdny Formularz typu nadrzdny-podrzdny (ang. master-detail form) sBu|y zazwyczaj do przegldania co najmniej dwóch, logicznie ze sob powizanych tabel. Na ogóB zawarto[ ka|dej tabeli wy[wietlana jest w oddzielnej cz[ci formularza. Na przykBad, tabela ORDERS (zamówienia) mo|e by przegldana w górnej cz[ci formularza, a powizana z ni tabela LINEITEM (np. artykuBy) - w dolnej cz[ci. Po pod[wietleniu wiersza w tabeli ORDERS, w dolnej cz[ci formularza pojawi si skojarzone z nim wiersze tabeli LINEITEM. Z podobnymi formularzami spotka si mo|na w bardzo wielu aplikacjach do obsBugi sprzeda|y i magazynu. W niniejszej sekcji przedstawimy proces tworzenia formularza typu nadrzdny- podrzdny. Formularz ten prezentowaB bdzie zamówienia zBo|one przez poszczególnych klientów, na podstawie danych z przykBadowych tabel CUSTOMER (klient) i ORDERS (zamówienia), dostarczanych w pakiecie Delphi. Omawiany dalej przykBad formularza typu nadrzdny-podrzdny ilustruje ponadto wykorzystanie komponentu TQuery. Tworzone dotychczas przykBadowe formularze do obsBugi baz danych funkcjonowaBy w oparciu o komponent TTable. Nowy formularz typu nadrzdny-podrzdny dziaBaB bdzie w oparciu o komponent TQuery (zapytanie). Do tworzenia formularza u|yjemy kreatora Database Form Wizard. Nale|y go uruchomi (korzystajc z polecenia Database\Form Wizard), wybra opcj tworzenia formularza typu nadrzdny-podrzdny (Create master\detail form), a tak|e opcj korzystania z komponentów TQuery (Create a Form using TQuery objects). Nastpnie nale|y klikn przycisk Next. W drugim oknie dialogowym kreatora nale|y z listy rozwijanej Drive or Alias wybra nazw PDOXDEMO. Identyfikuje ona alias zdefiniowany w jednej z poprzednich sekcji. Nastpnie na li[cie nazw tabel (Table Names) nale|y podwójnie klikn na pozycji CUSTOMER.DB. W ten sposób tabela CUSTOMER (zapisana w formacie Paradox), przechowywana w katalogu przykBadowych danych Delphi, zostanie wybrana jako nadrzdna tabela nowego formularza. Podwójne kliknicie na nazwie tabeli CUSTOMER spowodowaBo automatyczne przej[cie do nastpnego etapu pracy z kreatorem. Mo|na teraz wybra pola tabeli CUSTOMER, które maj by prezentowane na formularzu. Nale|y u|y przycisku >> w celu wybrania wszystkich pól i klikn przycisk Next. Kolejne okno dialogowe kreatora sBu|y do wyboru ukBadu pól dla tabeli nadrzdnej. Dostpne s trzy opcje: ukBad poziomy (Horizontal), pionowy (Vertical) i posta siatki (Grid). Nale|y klikn przycisk Next, co spowoduje przyjcie domy[lnego ukBadu poziomego. 68 Cz[ I Po wybraniu tabeli nadrzdnej (master) mo|na przystpi do wyboru tabeli podrzdnej (detail). W tym przypadku program domy[lnie proponuje alias, wybrany uprzednio dla tabeli nadrzdnej. Wystarczy zatem wybra tabel z listy. W tym celu nale|y podwójnie klikn na pozycji ORDERS. Bdzie to tabela podrzdna tworzonego formularza. Po wybraniu tabeli podrzdnej formularza mo|na wybra jej pola, które maj by prezentowane na formularzu. Nale|y u|y przycisku >> w celu wybrania wszystkich pól, po czym klikn pole CustNo na li[cie Ordered Selected Fields. Pole to zostanie pod[wietlone - nale|y je teraz usun z listy, korzystajc z przycisku <. Pole CustNo tabeli nadrzdnej bdzie wy[wietlane w górnej cz[ci formularza. Nie ma zatem potrzeby prezentowania go równie| w dolnej cz[ci, przeznaczonej na tabel podrzdn. WSKAZÓWKA: Istnieje równie| mo|liwo[ zmiany kolejno[ci, w jakiej pola wy[wietlane bd na formularzu. Pola na li[cie mo|na przemieszcza przy pomocy myszy (metod  cignij i upu[ ). Przyciski ze strzaBkami w gór i w dóB, widoczne poni|ej listy Ordered Selected Fields, umo|liwiaj przesuwanie pojedynczego pola o jedn pozycj na li[cie. Rysunek 2.24 przedstawia prawidBowo wypeBnione okno dialogowe Detail Fields. Nale|y teraz u|y przycisku Next w celu przej[cia do kolejnego etapu pracy z kreatorem. Kreator prosi o wybranie ukBadu, w jakim prezentowana bdzie tabela podrzdna. Dostpne s te same opcje, co w przypadku tabeli nadrzdnej, z tym |e domy[lnie wybrana jest opcja Grid (siatka). Nale|y klikn przycisk Next, co spowoduje przyjcie tego domy[lnego ukBadu. Szybki start 69 Rysunek 2.24. Nale|y wybra wszystkie pola, z wyjtkiem CustNo. W kolejnym kroku kreator prosi o wybranie pary pól, które poBcz tabel nadrzdn z tabel podrzdn. Je[li bazy danych zaprojektowano w sposób przejrzysty, pola te powinny w obu tabelach nosi t sam nazw. W omawianym przykBadzie nale|y poBczy tabele przy u|yciu kolumn CustNo. Na obu listach nale|y wybra nazw kolumny CustNo i klikn przycisk Add. Rysunek 2.25 ilustruje prawidBowo zdefiniowane poBczenie. Po zakoDczeniu definiowania poBczenia nale|y klikn przycisk Next w celu kontynuacji. Rysunek 2.25. PoBczenie tabel przy u|yciu kolumny CustNo. 70 Cz[ I W ostatnim oknie dialogowym kreator pyta, czy nowy formularz ma sta si gBównym formularzem aplikacji i czy ma by dla niego tworzony moduB danych. Nale|y u|y przycisku Finish, co spowoduje wygenerowanie nowego formularza, który stanie si gBównym formularzem aplikacji. Na rysunku 2.26 przedstawiono gotowy formularz. Rysunek 2.26. Gotowy formularz typu nadrzdny- podrzdny. Przed uruchomieniem nowej aplikacji spróbujemy przeanalizowa struktur i sposób funkcjonowania formularza typu nadrzdny-podrzdny. W górnej cz[ci formularza widoczne s dwa komponenty TQuery (zapytanie). Nale|y wybra komponent TQuery znajdujcy si po lewej stronie i przywoBa okno Object Inspector naci[niciem klawisza F11. Nastpnie nale|y podwójnie klikn na nagBówku atrybutu SQL. Aby przejrze tre[ zapytania SQL w oknie edytora tekstu zródBowego, nale|y skorzysta z przycisku Code Editor (zob. rysunek 2.27). Zapytanie SQL pobiera wszystkie kolumny i wszystkie wiersze tabeli CUSTOMER.DB. Nazwy kolumn wymieniane s pojedynczo, jednak w istocie zapytanie pobiera wszystkie kolumny tabeli, gdy| w odpowiednim polu dialogowym kreatora Database Form Wizard wybrany zostaB komplet kolumn. Zapytanie SQL nie zawiera klauzuli WHERE, a zatem pobiera równie| wszystkie wiersze tabeli. Po zapoznaniu si z tre[ci zapytania SQL nale|y nacisn CTRL+F4, co spowoduje zamknicie okna edytora. Przyjrzyjmy si teraz zapytaniu SQL, wygenerowanemu dla tabeli podrzdnej. Nale|y wybra komponent TQuery, znajdujcy si po prawej stronie i podwójnie Szybki start 71 klikn na nagBówku atrybutu SQL w oknie Object Inspector. Na ekranie powinno pojawi si nastpujce zapytanie SQL: Select ORDERS. OrderNo , ORDERS. SaleDate , ORDERS. ShipDate , ORDERS. EmpNo , ORDERS. ShipToContact , ORDERS. ShipToAddr1 , ORDERS. ShipToAddr2 , ORDERS. ShipToCity , ORDERS. ShipToState , ORDERS. ShipToZip , ORDERS. ShipToCountry , ORDERS. ShipToPhone , ORDERS. ShipVIA , ORDERS. PO , ORDERS. Terms , ORDERS. PaymentMethod , ORDERS. ItemsTotal , ORDERS. TaxRate , ORDERS. Freight , ORDERS. AmountPaid From  ORDERS.DB As ORDERS Where  ORDERS . CustNo =: CustNo Szczególn uwag nale|y zwróci na klauzul Where powy|szego zapytania SQL. Spo[ród wierszy pobieranych z tabeli ORDERS, wybiera ona tylko te, których zawarto[ kolumny CustNo jest identyczna z warto[ci zmiennej :CustNo. Gdzie zatem zdefiniowana jest zmienna :CustNo? Aby odpowiedzie na to pytanie, nale|y wróci do okna Object Inspector i sprawdzi warto[ atrybutu DataSource komponentu Query2 (zapytania tabeli podrzdnej). Oka|e si, |e atrybut ten wskazuje na zródBo danych zapytania tabeli nadrzdnej. Oznacza to, |e ka|dej zmianie zawarto[ci pola CustNo w zapytaniu Query1 (na przykBad przy przesuniciu wskaznika bie|cego wiersza) towarzyszy ponowne wykonanie zapytania Query2 z now warto[ci. W ten sposób Delphi automatycznie synchronizuje oba zapytania. W zbiorze wynikowym tabeli podrzdnej widoczne s tylko te wiersze, które odpowiadaj bie|cemu wierszowi zapytania nadrzdnego. 72 Cz[ I Rysunek 2.27 Zapytanie SQL wygenerowane przez kreatora dla tabeli CUSTOMER. Aby wypróbowa dziaBanie powy|szego mechanizmu, nale|y teraz uruchomi aplikacj. Na rysunku 2.28 przedstawiono ekran po uruchomieniu programu. Rysunek 2.28 Formularz typu nadrzdny- podrzdny po uruchomieniu aplikacji. Po wypróbowaniu nowego formularza nale|y go zamkn i powróci do Delphi.

Wyszukiwarka

Podobne podstrony:
03 Rozdzial 10 13
03 Rozdział 03
03 Rozdzial 3
03 ROZDZIA 3 Krtka historia marki ATLANTIC, czyli jak to si wszystko zaczo
03 Rozdział 01 Granica i ciągłość funkcji wielu zmiennych
03 Rozdzial 1
03 Rozdzial 1
04 rozdział 03 wtcjpb3t4i6ahedwpeqbi526b4gndq3qkbqtbaq
05 Rozdział 03 Wzór Taylora i ekstrema funkcji
Nauka swiatowa i polska[1] Rozdzial 03

więcej podobnych podstron