wykład 4 PSZ Programowanie w Środowiskach Zintegrowanych > Integracja aplikacji z bazami danych cz. II Programowanie w środowiskach zintegrowanych 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 Programowanie w środowiskach zintegrowanych Komponenty abstrakcyjne i niezależne cz. II • Komponent abstrakcyjny TField • Komponent niezależny TDataSource • Tworzenie struktury tabel powiązanych Programowanie w środowiskach zintegrowanych 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 TComponent <<DBAccess>> +DataSetField TDataSet 1 0..n Programowanie w środowiskach zintegrowanych <<DBAccess>> TField Komponenty bardziej wyspecjalizowane obsługujące konkretne typy pól – pochodne klasy TField Programowanie w środowiskach zintegrowanych 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 Programowanie w środowiskach zintegrowanych 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 Programowanie w środowiskach zintegrowanych 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 Programowanie w środowiskach zintegrowanych Podstawowe rodzaje pól • Pola danych (data fields) • Pola obliczane (calculated fields) • Pola słownikowe (lookup fields) Programowanie w środowiskach zintegrowanych 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 Programowanie w środowiskach zintegrowanych 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. Programowanie w środowiskach zintegrowanych 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) Programowanie w środowiskach zintegrowanych 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 Programowanie w środowiskach zintegrowanych Tworzenie struktur hierarchicznych • Z komponentów typu TTable lun TCustomDataSet można utworzyć strukturę hierarchiczną • Najczęściej struktura odzwierciedla powiązania typu masterdetail • 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. Programowanie w środowiskach zintegrowanych Elementy interfejsu zintegrowane ze zbiorami danych • Dostępne komponenty • Przykład Programowanie w środowiskach zintegrowanych 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 Programowanie w środowiskach zintegrowanych Podsumowanie • • Komponenty abstrakcyjne i niezależne cz. II – Komponent abstrakcyjny TField – Komponent niezależny TDataSource – Tworzenie struktury tabel powiązanych Komponenty edycyjne Programowanie w środowiskach zintegrowanych