ZAJĘCIA XI
Transkrypt
ZAJĘCIA XI
ZAJĘCIA XI
FORMULARZE
Zad. 1
Stworzyd moduł formularza, na kanwie umieścid informacje dotyczące książki (tytuł, cena, ilosc_stron) oraz pola
wyświetlane:
- ILE_ROZDZIALOW z informacją o ilości rozdziałów w danej książce
- ILE_WYD z informacją o ilości wydao danego tytułu
- ILE_ZAM z informacją o ilości zamówieo danego tytułu
Ponadto na kanwie znajdowad powinno się pole kombi z tytułami i numerami rozdziałów. Po wybraniu rozdziału
powinny pokazad się informacje o rozdziale:
- ILE_SLOW_KLUCZOWYCH z informacją o ilości słów kluczowych w danym rozdziale
- DLUGOSC z informacją jak długośd danego rozdziału ma się do średniej długości rozdziałów w danej książce
(długośd_rodziału/średnia_długośd_rozdziału)
Stworzyd moduł menu mający następujące elementy:
Podprogramy
Procedury
Ile razy dana książka była wydawana (dany tytuł)
Ile razy dana książka była zamawiana (dany tytuł)
Liczba rozdziałów
Separator
Listy wartości
Lista książek droższych od danej
Lista klientów, którzy już daną książkę zamawiali
Nawigacja
Następny rekord
Poprzedni rekord
Separator
Wprowadź zapytanie
Wykonaj zapytanie
Pomoc
Informacje - alert
Po uruchomieniu formularza: wykonanie zapytania; okno formularza powinno mied własny tytuł, zajmowad dostępną
przestrzeo.
Przy przechodzeniu do następnego rekordu pola wyświetlane powinny byd „czyszczone”.
Zadanie 1
Moduł formularza
1. Blok danych KSIAZKA bazujący na tabeli Ksiazka. Jeśli na kanwie nie wyświetlamy pola id_ksiazki, ale
uwzględniliśmy je przy tworzeniu bloku: MOŻNA Z TEGO POLA KORZYSTAĆ
2. Blok danych KONTROLNY z dwoma polami wyświetlanymi o nazwach ILE_ZAM, ILE_WYD, ILE_ROZDZIALOW,
typ pól: liczbowy, umieszczenie bloku na kanwie,
3. Listy wartości
→ lista wartości (DROZSZE) tytułów droższych od danej książki
→ lista wartości (KLIENCI) imion i nazwisk klientów, którzy daną książkę zamawiali
4. Procedura (ILE_ZAM): ile razy dany tytuł był zamawiany. Wstawienie do elementu :kontrolny.ile_zam
odpowiedniej wartości.
5. Procedura (ILE_ROZDZIALOW): ile rozdziałów jest w danej książce. Jeśli jest więcej niż jedna książka o podanym
tytule: komunikat, :kontrolny.ile_rozdzialow:=0. Wstawienie do elementu ILE_ROZDZIALOW
odpowiedniej wartości.
6. Wyzwalacz Pre-Record na poziomie bloku danych KSIAZKA (czyszczenie pól wyświetlanych).
:kontrolny.ile_zam:='';
:kontrolny.ile_wyd:='';
:kontrolny.ile_rozdzialow:='';
7. Blok KONTROLNY2 z polem kombi o nazwie KOMBI i dwoma polami wyświetlania ILE_SLOW i DLUGOSC.
Umieszczenie bloku na kanwie.
8. Ustawienie właściwości pola kombi: elementy na liście:
→ tytul, wartośd elementu=1
→ nr_rozdzialu, wartośd elementu=2
styl listy: pole kombi
9. Grupa rekordów o nazwie GR. Zapytanie:
select nr_rozdzialu||' '||tytul, to_char(nr_rozdzialu)
from rozdzial, ksiazka
where rozdzial.id_ksiazki=ksiazka.id_ksiazki and tytul=:ksiazka.tytul
10. Paleta właściwości GR, specyfikacje kolumn: tytul, nr_rozdzialu
11. Wyzwalacz When-New-Form-Instance:
Set_Window_Property(FORMS_MDI_WINDOW, WINDOW_STATE, MAXIMIZE);
Set_Window_Property('OKNO1',WINDOW_STATE,MAXIMIZE);
Set_Window_Property(FORMS_MDI_WINDOW, TITLE,'Tytul okna');
Set_Window_Property('OKNO1',TITLE,PROPERTY_FALSE);
set_item_property('KONTROLNY2.KOMBI',ENABLED,PROPERTY_FALSE);
execute_query;
12. Dodanie do bloku KONTROLNY przycisku z etykietą: Pokaż dane o rozdziałach. Wyzwalacz When-ButtonPressed dla tego przycisku:
declare
err number; ile number;
begin
select count(distinct id_ksiazki) into ile from ksiazka
where tytul=:ksiazka.tytul;
if (ile=1) then
if (get_item_property('KONTROLNY2.KOMBI',ENABLED)='FALSE') then
set_item_property('KONTROLNY2.KOMBI',ENABLED,PROPERTY_TRUE);
end if;
err:=populate_group('GR');
populate_list('KONTROLNY2.KOMBI','GR');
else
message('Więcej niż jedna książka ma podany tytuł');
if (get_item_property('KONTROLNY2.KOMBI',ENABLED)='TRUE') then
set_item_property('KONTROLNY2.KOMBI',ENABLED,PROPERTY_FALSE);
end if;
end if;
end;
13. Funkcja ILE_SLOW wyznaczająca ilośd słów w danym rozdziale.
14. Funkcja DLUGOSC wyznaczająca jak długośd danego rozdziału ma się do średniej długości rozdziałów w danej
książce.
15. Wyzwalacz When-List-Changed
declare
zm varchar(20);
begin
zm:=:kontrolny2.KOMBI;
:kontrolny2.dlugosc:=dlugosc(:ksiazka.id_ksiazki,zm);
:kontrolny2.ile_slow:=ile_slow(:ksiazka.id_ksiazki,zm);
end;
Moduł menu
1. Nowy moduł menu
2. Nowy element menu o odpowiedniej strukturze
3. Procedura (bezparametrowa) pobiera tytuł z kanwy i w pole wyświetlane wstawia wynik obliczeo
PROCEDURE ILE_WYD is
ile number; tyt ksiazka.tytul%type;
BEGIN
tyt:=NAME_IN('KSIAZKA.TYTUL');--pobranie z kanwy tytulu
select count(*) into ile from ksiazka where tytul=tyt;
COPY(ile, 'KONTROLNY.ILE_WYD');
END;
4. Wyzwalacz PROCEDURA1 w module formularza. Kod wyzwalacza: ILE_ZAM;
5. Wyzwalacz PROCEDURA2 w module formularza. Kod wyzwalacza: ILE_ROZDZIALOW;
6. Ustawienie poleceo pod elementy menu (otwieramy element menu i wyświetlamy paletę właściwości dla
odpowiedniego elementu):
→ separatory; typ elementu menu: separator, typ polecenia: puste,
→ element ile razy wydawana (podmenu procedury): ile_wyd;
→ element ile razy zamawiana (podmenu procedury): execute_trigger('PROCEDURA1');
→ element ilośd rozdziałów (podmenu funkcje): execute_trigger('PROCEDURA2');
→ elementy wyświetlające listy wartości
→ element następny rekord: next_record;
→ element poprzedni rekord: previous_record;
→ element wprowadź zapytanie: enter_query;
→ element wykonaj zapytanie: execute_query;
7. Stworzenie alertu w module formularza. Wyświetlenie alertu poprzez wybranie właściwego elementu menu.
8. Kompilacja modułu menu: Plik-> Administracja-> Kompiluj Plik
9. Podłączenie modułu menu pod moduł formularza: paleta właściwości dla modułu formularza, moduł menu:
ścieżka (bez rozszerzenia) do pliku modułu menu.
Moduł MENU:
→ pobranie z kanwy wartości:
zmienna:=name_in(nazwa_bloku.nazwa_elementu); --zmienna tekstowa w nawiasie
→ wstawienie wartości na kanwę
copy(wartość,nazwa_bloku.nazwa_elementu);
Jeśli stworzy się procedurę w module formularza:
→ tworzymy wyzwalacz w module formularza i w kodzie tego wyzwalacza wpisujemy wywołanie danej procedury
→ w kodzie elementu menu wpisujemy: execute_trigger('nazwa_naszego_wyzwalacza');