[ Pobierz całość w formacie PDF ]
.Właściwości SessionName używamy w celu uzyskania wskaźnika do sesji, którą właśnie się zajmujemy.Następnie wywołujemy metodę GetAliasNames(), przekazując wskaźnik this jako listę łańcuchów przeznaczonych do wypełnienia.Następnie metoda tworzy kolejne obiekty klasy TDBList, określając listę nazw tabel dla poszczególnych aliasów.Konstruktor nowego obiektu wywołuje metodę EnumDBList(), powodując w efekcie wywołanie GetTables().Jeżeli właściwość ParentList zawierała jakieś wartości, wykonanie całej metody powinno utworzyć listę sesji, dla każdego jej elementu listę odpowiadających mu aliasów, a dla każdego z aliasów - listę tabel.Metoda GetTables()Metoda GetTables() rozpoczyna działanie od ustalenia szczegółów dotyczących sesji oraz aliasów, przypisując im w razie potrzeby wartości domyślne.Nazwa sesji pobierana jest z właściwości ParentItemName, należącej do właściwości ListParent.Ta ostatnia (o ile istnieje) powinna zawierać listę aliasów, zaś jej właściwość ParentItemName przechowuje w takim przypadku nazwę sesji, dla której aliasy są wykorzystywane.Listę dostępnych tabel otrzymujemy na podstawie nazw sesji i aliasów.Parametry metody GetTableNames() są dobrze udokumentowane w plikach pomocy; warto się z nimi zapoznać na wypadek konieczności ich modyfikacji.Kolejnym krokiem jest utworzenie dla każdego łańcucha na liście dodatkowego obiektu TDBList, którego zadaniem będzie przechowywanie listy nazw pól.Poszczególne obiekty są przypisywane do właściwości Objects, stając się częścią listy.Metoda GetFields()Wywołanie metody GetFields() jest ostatnim elementem w łańcuchu wykonywanych czynności.Używając właściwości ParentItemName i ListParent, ustalamy nazwę tabeli, aliasu i sesji.Konstruktor każdego obiektu listy pól tworzy tymczasowy obiekt TTable, wykorzystywany do wyliczenia nazwy pól danej tablicy.Optymalizacją tego fragmentu kodu zajmiemy się pod koniec podrozdziału.Po utworzeniu obiektu TTable odczytujemy listę nazw pól i dla każdego elementu ustawiamy właściwość Object na NULL.Co prawda wartość ta używana jest domyślnie, jednak użycie jawnego przypisania poprawia czytelność kodu.Tworzenie łańcucha zdarzeńNa początku naszej dyskusji przedstawiliśmy sposób, w jaki metoda EnumDBList() inicjuje „łańcuchowe” wywołanie kolejno metod: GetSessions(), GetAliases(), GetTables() i GetFields().W efekcie uzyskujemy pełną listę sesji oraz wszystkich związanych z nią aliasów, tabel i pól - jak na jeden obiekt, całkiem pokaźny rezultat.Zamieszczony na dołączonej do książki płycie CD-ROM projekt TDBListDemo.bpr obrazuje, w jaki sposób można z naszego obiektu pobrać przechowywane w nim informacje Są one prezentowane za pomocą komponentu TMemo.Konstrukcja klasy TDBList wykorzystuje powiązane obiekty tej samej klasy, dlatego też w przykładowej aplikacji wykorzystujemy rekurencyjną metodę odczytywania danych.Poszczególne etapy operacji to utworzenie pojedynczego obiektu klasy TDBList, posortowanie go za pomocą przedefiniowanej metody sortowania i wreszcie wywołanie metody PopulateMemo() formularza, sprawdzającej typ elementów zawartych na przekazanej liście.Szczegóły zamieszczono na wydruku 6.17.Wydruk 6.17.Procedura wyliczania i wyświetlenia danychvoid __fastcall TMainForm::StartButtonClick(TObject *Sender){TDBList *TheDBList = new TDBList(0, ltSession, ″″);if(TheDBList){TheDBList->Sort(); // Sortuj wszystkie poziomyPopulateMemo(TheDBList);delete TheDBList;}}Przedstawiona na wydruku 6.18 metoda PopulateMemo() formatuje łańcuch znakowy i wypisuje go zgodnie z jego typem, a następnie znajduje związane z nim obiekty.Jeśli takowe istnieją, są rzutowane na wskaźnik TDBList* i przekazywane rekurencyjnie do metody PopulateMemo().Proces kończy się w chwili utworzenia listy nazw pól - właściwość Objects przyjmuje wtedy wartość NULL.Wydruk 6.18 [ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • trzylatki.xlx.pl