Wydział: Zarządzania i Modelowania Komputerowego Kierunek: Inżynieria Danych Przedmiot: Programowanie baz danych w środowisku RAD-C++ Rok 2 Semestr 4 Ćwiczenie 7 Komponent IBQuery - uruchamianie zapytań aktualizujących 1. Przygotować w nowym katalogu aplikację do aktualizacji bazy SKOKI.GDB. Formatka główna aplikacji powinna być zatytułowana "Aktualizacja bazy SKOKI" i powinna zawierać jeden komponent MainMenu w opcjami głównymi: Druzyny, Zawodnicy, Skoki. Komponenty konfiguracji bazy rozmieść na formatce DataModule. Z bazą danych połącz komponenty IBTable. Trzy komponenty dla trzech tabel. Umieść też jeden komponent IBQuery połączony z bazą, ale nieaktywny. 2. Przygotuj pierwszą opcję Druzyny przeznaczoną do wyświetlania i aktualizacji tabeli Drużyny. Dołącz formatkę Form3 zawierającą DBGrid związany (poprzez DataSource) z komponentem IBTable1, a następnie ustaw Active=true. Dopisz metodę wyświetlająca formatkę Form3 i przetestuj działanie aplikacji. 3. Na formatce Form3 rozmieść trzy przyciski dla dopisywania, zmiany oraz wstawiania nowych zapisów. Przyciski Dopisz i Zmień powinny wyświetlać formatkę z formularzem dopisywania lub zmiany zapisu, a przycisk Usuń przeznaczony jest dla usuwania zapisu. Zmiany zapisów powinny być organizowane przy pomocy zapytań INSERT INTO. UPDATE lub DELETE. Formatka Form4 wyświetlana przyciskiem Dopisz powinna mieć postać: Na formatce rozmieszczone są etykiety komponenty Edit oraz dwa przyciski. Przycisk Zatwierdź powinien uruchamiać metodę: void fastcall TForm4::Button1Click(TObject *Sender) String s; TLocateOptions Opts;
Opts.Clear(); if (Edit1->Text=="") ShowMessage("Wpisz identyfikator klubu!"); if (Edit2->Text=="") ShowMessage("Wpisz nazwę klubu"); Edit2->SetFocus(); s= "INSERT INTO Druzyny VALUES ('"+Edit1->Text+"', '"+Edit2->Text +"', '"+ Edit3->Text+"');"; if (DataModule2->IBTable1->Locate("ID_DRU", Edit1->Text, Opts) ) ShowMessage("Identyfikator Druzyny już istnieje!"); else DataModule2->IBQuery1->SQL->Text= s; DataModule2->IBQuery1->ExecSQL(); ShowMessage("Bląd bazy. Popraw dane!"); DataModule2->IBTable1->Refresh(); DataModule2->IBTable1->Locate("ID_DRU", Edit1->Text, Opts); Metoda przycisku Anuluj: void fastcall TForm4::Button2Click(TObject *Sender) Przycisk Usuń powinien inicjować metodę: void fastcall TForm3::Button3Click(TObject *Sender) TLocateOptions Opts; Opts.Clear(); DataModule2->IBTable2->Open(); if (DataModule2->IBTable2->Locate("ID_DRUZYNY", DataModule2->IBTable1->FieldByName("ID_DRU")->AsString, Opts) ) ShowMessage("Identyfikator Druzyny wystepuje w tabeli Zawodnicy!"); else DataModule2->IBQuery1->SQL->Text= "DELETE FROM Druzyny WHERE ID_DRU='"+ DataModule2->IBTable1->FieldByName("ID_DRU")->AsString+"';"; DataModule2->IBQuery1->ExecSQL();
DataModule2->IBTable1->Refresh(); Dopisz metodę Inicjowaną przyciskiem Zmień. W przypadku Zastosowania do zmiany zapisu nowej formatki formularza należy dołączyć formatkę Form5 o budowie podobnej do Form4, wyświetlić ją na przycisk Zmień oraz dołączyć obsługę zatwierdzania zmian. Propozycja wyświetlania: void fastcall TForm3::Button2Click(TObject *Sender) Form5->Edit1->Text= DataModule2->IBTable1->FieldByName("ID_DRU")->AsString; Form5->Edit2->Text= DataModule2->IBTable1->FieldByName("Nazwa")->AsString; Form5->Edit3->Text= DataModule2->IBTable1->FieldByName("Miasto")->AsString; Form5->Edit1->Enabled=false; Form5->ShowModal(); Propozycja metody zatwierdzania: void fastcall TForm5::Button1Click(TObject *Sender) String zapytanie; TBookmark pozycja; pozycja=datamodule2->ibtable1->bookmark; zapytanie= "UPDATE Druzyny SET nazwa='"+edit2->text+ "', Miasto='" +Edit3->Text+"' "+"WHERE ID_DRU='"+Edit1->Text+"';";; DataModule2->IBQuery1->SQL->Text= zapytanie; DataModule2->IBQuery1->ExecSQL(); ShowMessage("Błąd zapisu! Popraw dane!"); Edit2->SetFocus(); DataModule2->IBTable1->Refresh(); DataModule2->IBTable1->Bookmark=pozycja; Edit1->Enabled=true; Przetestuj gotowy program. 4. Samodzielnie opracuj wariant programu który do zmiany zapisu wykorzystuje formatkę Form4. 5. Przygotuj drugą opcję Tabele/ Zawodnicy przeznaczoną do aktualizacji tabeli Zawodnicy. Postępuj podobnie jak poprzednio. Wykorzystaj nową formatkę i do prezentacji tabeli Zawodnicy komponent IBTable2. Do wprowadzania zmian w tabeli wykorzystaj komponent IBQuery1.
Formatka wyświetlająca formularz dopisywania rekordu do tabeli Zawodnicy powinna zawierać 5 komponentów Edit dla wprowadzania pól tabeli, komponent DateTimePicker dla wprowadzania daty urodzenia i komponent ComboBox dla wyboru identyfikatora drużyny spośród dostępnych, a zapisanych w tabeli Drużyny. Propozycja postaci formatki przedstawiona jest poniżej: Formatka powinna być wyświetlana na przycisk Dopisz rozmieszczony na formatce prezentującej tabelę Zawodnicy. Propozycja tej metody poniżej: void fastcall TForm6::Button1Click(TObject *Sender) Form7->DateTimePicker1->Date=IncYear(Date(),-18); DataModule2->IBTable1->First(); Form7->ComboBox1->Clear(); Form7->ComboBox1->Text= DataModule2->IBTable1->FieldByName("ID_DRU")->AsString; while (!DataModule2->IBTable1->Eof) Form7->ComboBox1->Items-> Add(DataModule2->IBTable1->FieldByName("ID_DRU")->AsString); DataModule2->IBTable1->Next(); Form7->ShowModal(); Metoda przed wyświetlaniem formularza tabeli Zawodnicy ustala wartość początkową w komponencie DateTimePicker na datę poprzedzającą dzień obecny o 18 lat (potrzebne dołączenie modułu DateUtils.hpp) oraz wypełnia ComboBoxa danymi początkowymi pobranymi z tabeli Druzyny.
Propozycja metody zatwierdzania formularza i dopisywania rekordu w tabeli Zawodnicy, inicjowanej przyciskiem Dopisz na formatce formularza: void fastcall TForm7::Button1Click(TObject *Sender) String s; TLocateOptions Opts; Opts.Clear(); if (Edit1->Text=="") ShowMessage("Wpisz identyfikator zawodnika!"); if (Edit2->Text=="") ShowMessage("Wpisz nazwisko zawodnika"); Edit2->SetFocus(); StrToInt(Edit4->Text); ShowMessage("Pole Waga powinno być liczbą!"); Edit4->SetFocus(); StrToInt(Edit5->Text); ShowMessage("Pole Wzrost powinno być liczbą!"); Edit5->SetFocus(); s= "INSERT INTO Zawodnicy VALUES ('"+Edit1->Text+"', '"+Edit2->Text +"', '"+ Edit3->Text+"', "+ Edit4->Text+", "+ Edit5->Text +", '"+DateTimePicker1->Date+"', '" + ComboBox1->Text+ "');"; if (DataModule2->IBTable2->Locate("ID_Zaw", Edit1->Text, Opts) ) ShowMessage("Identyfikator Zawodnika już istnieje!"); else DataModule2->IBQuery1->SQL->Text= zapytanie; DataModule2->IBQuery1->ExecSQL(); ShowMessage("Bląd bazy. Popraw dane!"); DataModule2->IBTable2->Refresh();
DataModule2->IBTable2->Locate("ID_ZAW", Edit1->Text, Opts); Samodzielnie opracuj i dopisz pozostałe metody. 6. Przygotuj samodzielnie kolejną opcję Tabele/ Skoki przeznaczoną do aktualizacji tabeli Skoki.