PSZ wykład 4 > Integracja aplikacji z bazami danych cz. II 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