Laboratorium 7: Konfiguracja i dynamiczne tworzenie tabeli w
Transkrypt
Laboratorium 7: Konfiguracja i dynamiczne tworzenie tabeli w
Laboratorium 7: Konfiguracja i dynamiczne tworzenie tabeli w kodzie programu dr inż. Marcin Witczak Instytut Sterowania i Systemów Informatycznych, Uniwersytet Zielonogórski 1 Tworzenie klasy konfiguracyjnej Zadaniem jest utworzenie klasy umożliwiajacej ˛ wykonywanie działań zwiazanych ˛ z manipulacja˛ katalogiem bazy danych. W celu wprowadzenia kodu klasy należy z menu File|New wybrać opcj˛e Unit, a nast˛epnie wprowadzić instrukcje: type TKonfig=class private Katalog: string; public function PodajKatalog:string; procedure UstawKatalog; procedure OdczytajKatalog; procedure ZapiszKatalog; end; var Cfg:TKonfig=nil; implementation uses FileCtrl,IniFiles,SysUtils; //-----------------------------------function TKonfig.PodajKatalog:string; begin result:=Katalog; end; //-----------------------------------procedure TKonfig.UstawKatalog; begin SelectDirectory(’Podaj katalog’,’’,Katalog); end; //-----------------------------------procedure TKonfig.OdczytajKatalog; var Ini:TIniFile; begin Ini:=TIniFile.Create(GetCurrentDir+’\cfg.ini’); try Katalog:=Ini.ReadString(’Katalogi’,’Katalog bazy’,’’); if Katalog = ’’ then begin UstawKatalog; ZapiszKatalog; end; finally Ini.Free; end; end; //------------------------------------ 1 procedure TKonfig.ZapiszKatalog; var Ini:TIniFile; begin Ini:=TIniFile.Create(GetCurrentDir+’\cfg.ini’); try Ini.WriteString(’Katalogi’,’Katalog bazy’,Katalog); finally Ini.Free; end; end; //-----------------------------------initialization if Cfg = nil then Cfg:=TKonfig.Create; finalization Cfg.Free; Cfg:=nil; end. 1. Utworzyć moduł danych i umieścić na nim komponenty TTable i TDataSource, a nast˛epnie ustawić właściwość DataSet komponentu TDataSorce. 2. Do fizycznego utworzenia tabeli służy metoda CreateTable() komponentu TTable, poprzedzona jednak szeregiem czynności wst˛epnych, tzn. Przypisanie właściwości DataBaseName odpowiedniego katalogu lub aliasu Nadanie zbiorowi danych unikalnej nazwy, przez przypisanie tej nazwy właściwości TableName. Określenie typu tabeli: ttDefault, ttParadox, ttDBase, ttASCII. ttDefault spowoduje określenie typu na podstawie rozszerzenia nazwy pliku, zawartej w TableName. Zdefiniowanie kolejnych pól struktury tabeli za pomoca˛ metody TTable.FieldDefs.Add(). Każde wywołanie spowoduje utworzenie jednego pola i zawiera cztery parametry określajace ˛ kolejno: • nazw˛e pola, • typ pola w postaci TFieldType, • rozmiar pola - istotny jedynie dla pól typu String i Memo, • wymaganie wypełnienia pola - wartość true oznacza, że pole nie może pozostać puste. Opcjonalnie - jeżeli tabela ma być wyposażona w indeksy, należy określić ich zestaw i struktur˛e, za pomoca˛ kolejnych wywołań TTable.IndexDefs.Add(). Każde z tych wywołań zawiera nast˛epujace ˛ parametry: • nazw˛e jednoznacznie identyfikujac ˛ a˛ indeks, • oddzielone średnikami nazwy pól indeksowych, w kolejności wyst˛epowania w indeksie, • opcje zwiazane ˛ z indeksem - zbiór zawierajacy ˛ elementy spośród nast˛epujacych: ˛ ixPrimary, ixUnique, ixDescending, ixExpression, ixCaseInsensitive. Wywołanie metody TTable.CreateTable(). 3. W celu programowej realizacji powyższych zadań należy przejść do modułu danych, a nast˛epnie do procedury zwiazanej ˛ z jego tworzeniem. Pod słowem implementation wprowadzić kod umożliwiajacy ˛ użycie modułu Konfig. 4. Wypełnić procedur˛e obsługi zdarzenia nast˛epujacym ˛ kodem: Cfg.OdczytajKatalog; T_Dane.DatabaseName:=Cfg.PodajKatalog; T_Dane.TableName:=’osoby.db’; T_Dane.TableType:=ttParadox; try T_Dane.Open; except with T_Dane.FieldDefs do 2 begin Add(’ID’,ftAutoInc,0,false); Add(’Imie’,ftString,15,false); Add(’Nazwisko’,ftString,15,false); end; with T_Dane.IndexDefs do begin Add(’’,’ID’,[ixPrimary,ixUnique]); end; T_Dane.CreateTable; T_Dane.Open; end; 3