170 likes | 316 Views
wykład 4. PSZ Programowanie w Środowiskach Zintegrowanych > Integracja aplikacji z bazami danych cz. II. Na poprzednim wykładzie. Koncepcja mechanizmów integracji Architektura środowiska Zarys hierarchii komponentów Typowy schemat komunikacji aplikacji z bazą danych
E N D
wykład 4 PSZ Programowanie w Środowiskach Zintegrowanych > Integracja aplikacji z bazami danych cz. II
Na poprzednim wykładzie • Koncepcja mechanizmów integracji • Architektura środowiska • Zarys hierarchii komponentów • Typowy schemat komunikacji aplikacji z bazą danych • Komponenty abstrakcyjne i niezależne cz. I • TCustomConnection • TDataSet
Komponenty abstrakcyjne i niezależne cz. II • Komponent abstrakcyjny TField • Komponent niezależny TDataSource • Tworzenie struktury tabel powiązanych
TField • Odpowiedzialność – umożliwia łatwy dostęp do danych zapisanych w polu rekordu • TField – klasa nie wizualna (nie stanowi elementu GUI) • Jest klasą składową klasy TDataSet • Podstawowe usługi • odczytywanie i ustawianie wartości pola • formatowanie i konwersja danych • walidacja
Komponenty bardziej wyspecjalizowane obsługujące konkretne typy pól – pochodne klasy TField
Pobieranie, zapisywanie i konwersja danych • Pobranie danych i zapisywanie przykłady: • Numer = PrzekładowePole1->Value; • Numer = PrzykladowePole1->AsInteger; • Nazwa = PrzykladowePole2->AsString; • PrzykladowePole2->AsString = „Jakiś tekst”; • Właściwości AsSomething • AsBoolean • AsCurrency • AsDateTime • AsFloat • AsInteger • AsSQLTimeStamp • AsString • AsVariant
Formatowanie i walidacja • Właściwości • EditMask • __property TEditMask EditMask = {read=FEditMask, write=SetEditMask}; • DisplayWidth • __property int DisplayWidth = {read=GetDisplayWidth, write=SetDisplayWidth, stored=IsDisplayWidthStored, nodefault}; • ValidChars • typedef Set<char, 0, 255> TFieldChars; • __property TFieldChars ValidChars = {read=FValidChars, write=FValidChars}; • Zdarzenia • OnValidate • __property TFieldNotifyEvent OnValidate = {read=FOnValidate, write=FOnValidate}; • Jeśli wygenerujemy wyjątek – walidacja negatywna
Tworzenie pól w klasie TDataSet • Komponent TDataSet posiada własny edytor służący do zarządzania polami • Tworzenie pól nie jest obowiązkowe, gdyż w przypadku ich braku pola tworzone są automatycznie • Zalecana praktyka – jawne tworzenie pól
Podstawowe rodzaje pól • Pola danych (data fields) • Pola obliczane (calculated fields) • Pola słownikowe (lookup fields)
Pola wyliczane • Pole wyliczane – wartość pola nie jest odczytywana z bazy danych, ale obliczana w momencie odczytywania wiersza • Wartość pola ustala się w ramach obsługi zdarzenia OnCalcFields • __property TDataSetNotifyEvent OnCalcFields = {read=FOnCalcFields, write=FOnCalcFields}; • Zdarzenie pojawia się w trzech przypadkach • Zbiór zostaje otwarty • Zbiór zostaje wprowadzony w stan edycji (State = dsEdit) • Rekord jest pobierany z bazy danych
Pola słownikowe • Pola słownikowe – przyjmują wartość ustaloną na podstawie innego zbioru danych • Pole powiązane jest z innym zbiorem poprzez pola klucze (KeyFields) • Na podstawie wartości pola klucza, z innego zbioru pobierana jest wartość innego pola • Pola słownikowe rozpoznawane są przez elementy interfejsu obsługujące edycję bazy danych >posługiwanie się polami – przykład MicroCRM – regiony.
TDataSource • Odpowiedzialność – interfejs pomiędzy zbiorami danych a elementami interfejsu przeznaczonymi do ich edycji • Dane ze zbioru pobiera się za pośrednictwem źródła danych • Za pośrednictwem źródła dane są również zapisywane do zbioru Zbiór (TDataSet) Źródło (TDataSource)
TDataSource - właściwości • AutoEdit • __property bool AutoEdit = {read=FAutoEdit, write=FAutoEdit, default=1}; • Czy elementy interfejsu mogą samodzielnie wprowadzić zbiór danych w stan edycji lub wstawiania. • DataSet • __property TDataSet* DataSet = {read=FDataSet, write=SetDataSet}; • Zarządzany zbiór danych (zbiór, z którego źródło pobiera dane) • Enabled • __property bool Enabled = {read=FEnabled, write=SetEnabled, default=1}; • Czy źródło jest włączone • State • __property TDataSetState State = {read=FState, nodefault}; • Stan zarządzanego zbioru danych
Tworzenie struktur hierarchicznych • Z komponentów typu TTable lun TCustomDataSet można utworzyć strukturę hierarchiczną • Najczęściej struktura odzwierciedla powiązania typu master-detail • O powiązaniu w strukturę decydują dwie właściwości klasy TTable i TCustomDataSet • __property Db::TDataSource* MasterSource = {read=GetDataSource, write=SetDataSource}; • __property AnsiString MasterFields = {read=GetMasterFields, write=SetMasterFields}; >posługiwanie się strukturami hierarchicznymi – przykład: MicroCRM; Kontakty z klientem.
Elementy interfejsu zintegrowane ze zbiorami danych • Dostępne komponenty • Przykład
Komponenty edycyjne zintegrowane ze zbiorami danych • Przeznaczenie – szybka implementacja zadań dotyczących edycji bazy danych • Elementy edytujące pola • Elementy edytujące wiersze • Elementy specjalne >posługiwanie się strukturami hierarchicznymi – przykład: Zarządzanie zwrotami gwarancyjnymi
Podsumowanie • Komponenty abstrakcyjne i niezależne cz. II • Komponent abstrakcyjny TField • Komponent niezależny TDataSource • Tworzenie struktury tabel powiązanych • Komponenty edycyjne