Márton Ágnes
ALKALMAZÁSFEJLESZTÉS 4GL ESZKÖZÖKKEL
mobiDIÁK könyvtár
1
2
Márton Ágnes
Alkalmazásfejlesztés 4GL eszközökkel
3
mobiDIÁK könyvtár
SOROZATSZERKESZTŐ Fazekas István
4
Márton Ágnes
Alkalmazásfejlesztés 4GL eszközökkel Oktatási segédanyag
mobiDIÁK könyvtár Debreceni Egyetem Informatikai Kar
5
Lektor: Dr Juhász István Debreceni Egyetem Informatikai Kar
Copyright © Márton Ágnes 2005 Copyright © elektronikus közlés mobiDIÁK könyvtár, 2005 mobiDIÁK könyvtár Debreceni Egyetem Informatikai Kar 4010 Debrecen Pf. 12 http://mobidiak.inf.unideb.hu A mű egyéni tanulmányozás céljára szabadon letölthető. Minden egyéb felhasználás csak a szerző előzetes írásbeli engedélyével történhet. A mű a mobiDIÁK önszervező mobil portál (IKTA, OMFB-00373/2003) és GNU Iterátor, a legújabb generációs portál szoftver (ITEM, 50/2003) projektek keretében készült. 6
Tartalomjegyzék 1.
BEVEZETÉS ........................................................................................................................................................... 8
2.
A MINTARENDSZER ISMERTETÉSE.............................................................................................................. 9 2.1. A GYAKORLATOK SORÁN HASZNÁLT TÁBLÁK .......................................................................................................... 9 2.2. ADATTÁBLÁK ÉS KAPCSOLATUK .............................................................................................................................. 9
3.
FELADATOK FORMAMODUL ÉS MENÜMODUL LÉTREHOZÁSÁRA ................................................. 10 3.1. FORM: VEVO TÁBLA KARBANTARTÁSA ................................................................................................................ 10 3.1.1. gyakorlat: A VEVO táblát karbantartó form létrehozása, mentése............................................................... 10 3.1.2. gyakorlat: A VEVO form futtatása ................................................................................................................ 12 3.1.3. gyakorlat: Varázslók újraindítása................................................................................................................. 14 3.1.4. gyakorlat: Az Elrendezés-szerkesztő használata ........................................................................................... 16 3.1.5. gyakorlat: Objektumok Tulajdonság-palettájának megtekintése .................................................................. 17 3.1.6. gyakorlat: Formamodul szintű objektumok létrehozása................................................................................ 19 3.1.7. gyakorlat: Nem adatbázis elem és vezérlő blokk létrehozása ....................................................................... 22 3.2. FORM: RENDELES ÉS TETEL TÁBLÁK KARBANTARTÁSA ................................................................................... 23 3.2.1. gyakorlat: Szülő-gyerek formamodul létrehozása......................................................................................... 23 3.2.2. gyakorlat: Tulajdonság-paletta, értéklista, vezérlő blokk, nem-adatbázis elem ........................................... 25 3.2.3. gyakorlat: Az adatbeviteli és az adatmegjelenítő elemek .............................................................................. 26 3.2.4. gyakorlat: Jelölőnégyzet létrehozása trigger segítségével ............................................................................ 30 3.2.5. gyakorlat: Riasztás létrehozása..................................................................................................................... 31 3.2.6. gyakorlat: Trigger példa ............................................................................................................................... 32 3.2.7. gyakorlat: Menümodul létrehozása, majd formamodulhoz kapcsolása ........................................................ 33 3.2.8. gyakorlat: Beugró menü létrehozása............................................................................................................. 35 3.3. FORM: VEVO-RENDELES-TETEL-CIKK FORMAMODUL LÉTREHOZÁSA ........................................................... 36 3.3.1. gyakorlat: Négy blokkból álló formamodul létrehozása ............................................................................... 36 3.4. FORM: VEVO-CIKKCSOPORT-CIKK-RENDELES-TETEL FORMAMODUL LÉTREHOZÁSA .............................. 37 3.4.1. gyakorlat: Öt blokkból álló formamodul létrehozása.................................................................................... 37 3.5. FORM: VÁSZNAK HASZNÁLATA .............................................................................................................................. 40 3.5.1. gyakorlat: Két háttérvásznat tartalmazó formamodul létrehozása ............................................................... 40
4.
FELADATOK RIPORT LÉTREHOZÁSÁRA .................................................................................................. 42 4.1. RIPORT: CIKK TÁBLA ADATAINAK TÁBLÁZATOS MEGJELENÍTÉSE ......................................................................... 42 4.2. RIPORT: VEVO TÁBLA ADATAINAK MEGJELENÍTÉSE BALRA CSOPORTOSÍTOTT FORMÁBAN ................................... 44 4.3. RIPORT: RENDELES ÉS TETEL TÁBLÁK ADATAINAK MEGJELENÍTÉSE ................................................................ 46 4.4. RIPORT: MÁTRIX RIPORT KÉSZÍTÉSE ....................................................................................................................... 48 4.5. RIPORT: MÁTRIX CSOPORTTAL RIPORT KÉSZÍTÉSE ................................................................................................. 48 4.6. RIPORT: FORMALEVÉL KÉSZÍTÉSE .......................................................................................................................... 49 4.7. RIPORT: MÁTRIX RIPORT KÉSZÍTÉSE A CELLÁBAN KÉT ÉRTÉK MEGJELENÍTÉSÉVEL ................................................ 49 4.8. RIPORT: BEÁGYAZOTT MÁTRIX RIPORT KÉSZÍTÉSE ................................................................................................. 50 4.9. RIPORT: FELÜLRE CSOPORTOSÍTOTT RIPORT KÉSZÍTÉSE ......................................................................................... 50
5.
AZ ALKALMAZÁS ÖSSZEÁLLÍTÁSA ........................................................................................................... 51 5.1. FORM: FŐMENÜ FORMAMODUL LÉTREHOZÁSA ...................................................................................................... 51
6.
GYAKORLÓ FELADATOK............................................................................................................................... 52 6.1. GYAKORLAT: FORMAMODUL ÉS MENÜMODUL LÉTREHOZÁSA ................................................................................ 52 6.2. GYAKORLAT: RIPORT LÉTREHOZÁSA ..................................................................................................................... 53
7.
AZ ADATTÁBLÁKAT LÉTREHOZÓ SCRIPTEK......................................................................................... 54
7
1. Bevezetés Ez az oktatási segédanyag a Debreceni Egyetem Informatikai Karán az Alkalmazásfejlesztés 4GL eszközökkel című laboratóriumi gyakorlat tananyagának elsajátításához használható. A tárgy a C (Adatbázis) sávba tartozik, előfeltétele az Informatika 1. szigorlat, Informatika tanár, Programozó matematikus, illetve Programtervező matematikus szakos hallgatók vehetik fel, a számonkérés módja gyakorlati jegy. A gyakorlaton jelenleg az Oracle 4GL eszközei közül a Form Builder, illetve Report Builder alkalmazásával ismerkedhetnek meg a hallgatók. A hallgatók feladata forma és menümodulok, valamint riportok létrehozása, melyek egy alkalmazás alkotórészei. Az oktatási segédanyagban levő feladatok megoldásához bizonyos alapfogalmak ismerete is szükséges, ezeket ez az anyag nem tartalmazza. A felhasznált táblákat létrehozó és tesztadatokkal feltöltő SQL scriptek tartalma megtalálható a segédanyag végén, illetve a scriptek letölthetők a http://irh.inf.unideb.hu/user/marton/mobidiak4GL címről. A segédanyagban az alábbi jelölésrendszert követtem: Feladatok szövege • Félkövér kiemeléssel szerepel Feladatok megoldásában • Félkövér kiemeléssel szerepel: Ablak, kapcsoló, választógomb, listaelem, ikon neve Funkcióbillentyű felirata •
Aláhúzással szerepel: A varázsló lapjain szereplő szövegelem neve (ahová a hallgatónak be kell írni valamit)
•
Courier New betűtípussal szerepel: Amit a hallgatónak be kell gépelni
•
Dőlt betűvel szerepel: Megjegyzés
•
Nyomógomb jelölése: Tovább
•
Menü/almenü jelölése: Fájl⇒Mentés
8
2. A mintarendszer ismertetése 2.1. A gyakorlatok során használt táblák • • • •
•
Vevők: adataikat a VEVO táblában tartjuk nyilván, egy rekord egy vevőnek felel meg, a vevőazonosító az elsődleges kulcs, a vevőnév megadása is kötelező. Cikkcsoportok: a CIKKCSOPORT táblában tartjuk őket nyilván, egy rekord egy cikkcsoportnak felel meg, a cikkcsoportazonosító az elsődleges kulcs, a cikkcsoportnév megadása is kötelező. Cikkek: adataikat a CIKK táblában tartjuk nyilván, egy rekord egy cikknek felel meg, a cikkazonosító az elsődleges kulcs, a cikknév megadása kötelező. Minden cikk valamely cikkcsoporthoz tartozik. Rendelések: az egy vevő által egy időpontban történt rendelés (vásárlás) adatait a RENDELES tábla tartalmazza, a rendelésazonosító az elsődleges kulcs. A vevőazonosítót kötelező megadni, egy vevő a táblában természetesen többször is szerepelhet, viszont csak olyan vevő vásárolhat, aki szerepel a VEVO táblában. Tételek: egy vevő által, egy alkalommal vásárolt cikkek adatait a TETEL tábla tartalmazza, a rendelésazonosító+tételazonosító az elsődleges kulcs. A rendelésazonosító külső kulcs a RENDELES tábla rendelésazonosítójához. Egy rendelés tételei között ugyanaz a cikk többször is szerepelhet (több tétel sorban is előfordulhat), de csak olyan cikket lehet rendelni, ami előfordul a CIKK táblában. A cikkazonosítót kötelező megadni. A cikkek ára és áfa értéke szerepel a cikk táblában is, de vásárláskor ezen értékek tetszőlegesen felülírhatók.
2.2. Adattáblák és kapcsolatuk
9
3. Feladatok formamodul és menümodul létrehozására 3.1. form: VEVO tábla karbantartása 3.1.1. gyakorlat: A VEVO táblát karbantartó form létrehozása, mentése A gyakorlat célja: Az Oracle Form Builder eszközében található Adatblokk és Elrendezés varázslók használatának megismerése. A form mentési lehetőségeinek bemutatása. A gyakorlat elsajátításához az alábbi alapfogalmak ismerete szükséges: formamodul, blokk, rekord, egyszeres és többszörös rekordú blokk, elem, vászon, ablak, keret.
Feladat: A Form Builder eszköz használatával, varázslók segítségével hozzunk létre formamodult a VEVO tábla összes adatának lekérdezésére, karbantartására a fenti elrendezés szerint, az alább felsoroltak figyelembevételével. (A blokk alaptáblájának kiválasztásához csatlakozni kell az ORACLE adatbázishoz, melyhez felhasználói név és jelszó szükséges.) Az elkészült formamodult mentsük el külső fájlba VEVO.FMB néven, majd futtassuk. • Blokk alaptáblája: VEVO • Adatintegritás kikényszerítése: bekapcsolva • Megjelenítés stílusa: forma • Keret címe: Vevők felvitele • Megjelenített rekordok: 1 Megoldás: 9 A Form Builder eszköz indítása után hívjuk meg az Adatblokk-varázslót. Üdvözöljük az Adatblokk-varázslóban! Tovább Típus lap: Tábla vagy nézet választógomb Tovább Táblázat lap: Tallózás...
10
Kapcsolódás ablak:
Táblák ablak:
VEVO tábla kiválasztása OK
Adatintegritás kikényszerítése kapcsoló: kapcsoljuk be Rendelkezésre álló oszlopok ablak: a VEVO tábla oszlopait tartalmazza Adatbáziselemek ablak: mozgassuk át mindegyik oszlopot ide a Rendelkezésre álló oszlopok ablakból >> Tovább Hozzuk létre az adatblokkot, hívjuk be az Elrendezés-varázslót választógomb Befejezés 9 Elrendezés-varázsló: Üdvözöljük az Elrendezés-varázslóban! Tovább Vászon: Új vászon Típus: Háttér Tovább Adatblokk lap: Rendelkezésre álló elemek ablak: Az Adatblokk-varázsló Adatbáziselemek ablakában kiválasztott oszlopneveket tartalmazza Megjelenített elemek ablak: mozgassuk át mindet ide a Rendelkezésre álló elemek ablakból >> Tovább Elemek lap: Címke, Szélesség és Magasság értéke adható meg Tovább Stílus lap: Forma választógomb kiválasztása Tovább Sorok lap: Keret címe: Vevők felvitele Megjelenített rekordok: 1 Távolság a rekordok között: 0 Tovább Befejezés 9 A form mentése, futtatása: Fájl⇒Mentés vagy Mentés ikon: VEVO.FMB Program⇒Forma futtatása⇒Ügyfél/kiszolgáló vagy Eszközpaletta: Forma futtatása ügyfél/kiszolgáló módban ikon
11
3.1.2. gyakorlat: A VEVO form futtatása A gyakorlat célja: Az Oracle Form Builder futtató környezetének megismerése, melyben az alábbi tevékenységek hajthatók végre: találatszámlálás (count) teljes és szűrt (vagy feltételes) lekérdezések megadása adatbázis műveletek (új rekord felvitele, rekord módosítása, rekord törlése /eltávolítása/) adatok mentése (commit) vagy visszagörgetése (rollback) kilépés a futtató környezetből. Szükséges fogalmak: formamodul normál, illetve feltételes lekérdezési módban történő futtatása.
9 Lekérdezések Kérdezzük le a VEVO tábla rekordjainak számát (az üzenetsorban látható az eredmény): Lekérdezés⇒Találatszámlálás Kérdezzük le a VEVO tábla összes sorát: Lekérdezés⇒Végrehajtás vagy Lekérdezés indítása ikon vagy F8 Navigálás a rekordok között: Rekord⇒Előző/Következő vagy Előző / Következő ikon vagy ↓↑ Feltételes lekérdezés általánosan a következők szerint adható meg: Lekérdezés⇒Beírás vagy Kérdés beírása ikon vagy F7 Feltétel(ek) megadása Lekérdezés⇒Végrehajtás vagy Lekérdezés indítása ikon vagy F8 Kérdezzük le a VEVO tábla adott feltételeknek eleget tevő sorait: Jelenítsük meg azokat a vevőket, akinek a • városa DEBRECEN: DEBRECEN varos elembe: • neve K betűvel kezdődik: K% vevonev elembe: • van telefonja és email címe: telefon elembe: #is not null email elembe: #is not null 12
•
van telefonja vagy email címe (változónév használatával): :t telefon elembe: email elembe: :e Query/Where ablakba: :t is not null or :e is not null
•
van telefonja vagy városa EGER (elem nevének megadásával): Tetszőleges elembe: : Query/Where ablakba: telefon is not null or varos=’EGER’
9 Adatbázis műveletek, adatok mentése Vigyük fel egy új vevő adatait tetszőleges értékekkel, majd mentsük el a rekordot az adatbázisba (commit) Rekord⇒Beszúrás vagy Rekord beszúrása ikon vagy F6 Töltsük ki az elemeket megfelelő értékekkel Tevékenység⇒Mentés vagy Mentés ikon vagy F10 Módosítsuk az újonnan felvitt vevő valamelyik adatát Írjuk felül valamely elem tartalmát tetszőlegesen Töröljük az újonnan felvitt vevőt, majd mentsük el a változást az adatbázisba Rekord⇒Eltávolítás vagy Rekord eltávolítása ikon vagy Shift F6 Tevékenység⇒Mentés vagy Mentés ikon vagy F10 Megjegyzés: a Törlés (Clear) itt nullázást jelent (üres rekord létrehozása) 9 Térjünk vissza a Form Builder fejlesztői környezethez
13
3.1.3. gyakorlat: Varázslók újraindítása A gyakorlat célja: A formamodulon megjelenő adatoknak, illetve azok elrendezésének módosítása az Adatblokk és Elrendezés-varázslók újraindítása segítségével.
Feladat: Módosítsuk a VEVO adatblokkot az Adatblokk-varázsló, az elrendezést az Elrendezés-varázsló segítségével a fenti elrendezésnek megfelelően, az alábbiak figyelembevételével. Mentsük az elkészült formamodult VEVO2.FMB néven. • TELEFON, EMAIL elemek ne jelenjenek meg a képernyőn • Megjelenítés stílusa: táblázatos • Megjelenített rekordok: 6 • Rekordok közti távolság: 4 • Görgetősáv jelenjen meg Megoldás: 9 Az Adatblokk-varázsló újraindítása szükséges a VEVO blokk módosításához: Jelöljük ki a VEVO blokkot (pl. az Objektum-navigátorban) Adatblokk-varázsló hívása: Eszközök⇒Adatblokk-varázsló vagy jobb-egérgomb (A varázsló lapjai újraindítás esetén fülesvásznon jelennek meg.) Táblázat lap: Mozgassuk vissza a TELEFON, EMAIL elemeket a Rendelkezésre álló oszlopok ablakba 9 Mentsük el VEVO2.FMB néven, majd futtassuk a formamodult Megjegyzés: A form futtatásakor a fenti mezők üresen megjelennek, mivel az elrendezésről még nem töröltük őket, de lekérdezésre, adatbázis-műveletekre nem használhatók. 9 Az Elrendezés-varázsló újraindítása szükséges a VEVO blokk elrendezésének módosításához: Jelöljük ki a KERETet az Objektum-navigátorban (Vásznak/Grafikák/ FRAME) vagy az Elrendezés-szerkesztőben Elrendezés-varázsló hívása: Eszközök⇒Elrendezés-varázsló vagy jobb-egérgomb (A varázsló lapjai újraindítás esetén fülesvásznon jelennek meg.) Adatblokk lap: Mozgassuk a TELEFON, EMAIL elemeket a Rendelkezésre álló elemek ablakba
14
Elemek lap:
Stílus lap: Sorok lap:
Írjuk át az elemek címkéit tetszőlegesen Csökkentsük az elemek szélességét (mértékegység a pont): (pl. VEVOAZON-25,VEVONEV-85, IRSZ-25, VAROS-85, UTCA-85, MEGJEGYZES-150) Táblázatos választógomb kiválasztása Megjelenített rekordok: 6 4 Távolság a rekordok között: Görgető megjelenítése kapcsoló bekapcsolása
9 Futtassuk a formamodult
15
3.1.4. gyakorlat: Az Elrendezés-szerkesztő használata A gyakorlat célja: A formamodul elrendezésének módosítása, az Elrendezés-szerkesztő eszköz használatának, valamint különböző formázási lehetőségeknek a megismerése. Feladat: Hívjuk meg az Elrendezés-szerkesztőt, majd végezzük el a felsorolt (vagy ahhoz hasonló) feladatokat a formázási lehetőségek megismerése céljából. Megjegyzés: az elrendezésen kijelölt objektum(ok) az Objektum-navigátorban is kijelölésre kerül(nek), így könnyen ellenőrizhető a kijelölés helyessége 9 Indítsuk el az Elrendezés-szerkesztőt: Eszközök⇒Elrendezés-szerkesztő vagy F2
Rendezzük át az elemeket és a címkéket (a vásznon belül) tetszőlegesen Méretezzük át a keretet úgy, hogy a vásznon belül maradjon: (a vászon szélét egy függőleges fekete vonal jelzi) Jelöljük ki a keretet, majd egér-húzással Rajzoljunk pl. egy ellipszist a kereten belül, írjuk bele a nevünket: Ellipszis ikon és Szöveg ikon segítségével Formázzuk meg a ’nevünket’: 14 pontos, dőlt betűstílus Betűméret, Dőlt ikonok Színezzük az ellipszist és a VEVONEV elemet azonos színekkel Kitöltési szín, Vonal szín, Szöveg szín ikonokkal Módosítsuk a keret címének betűtípusát: 14 pont, Courier New, Félkövér 9 Menüből elérhetünk egyéb formázási lehetőségeket is: Igazítsuk az értéket a mezőn belül: VAROS középre, IRSZ jobbra Formázás⇒Igazítás⇒Balra/Középre/Jobbra Változtassuk meg az elemek kerettípusát tetszőlegesen: Formázás⇒Kerettípus⇒Bemélyülő/Kiugró/Nincs stb. 16
3.1.5. gyakorlat: Objektumok Tulajdonság-palettájának megtekintése A gyakorlat célja: A gyakorlat során az objektumok közül a blokk, keret és az elemek néhány tulajdonságát fogjuk megismerni. A Tulajdonság-paletta a megfelelő objektum kijelölése után az Eszközök⇒Tulajdonság-paletta menüből, helyi menüből vagy az F4 billentyűvel érhető el. Az objektumok tulajdonságai a futás közbeni viselkedésüket határozzák meg. Szükséges fogalom: tulajdonság-paletta. 9 A VEVO blokk tulajdonságai:
Minden rekord utolsó mezőjének elérése után a kurzor a következő rekord első mezőjére ugorjon: Navigálási stílus: Rekord megváltoztatása Teljes lekérdezés végrehajtása esetén is csak azok a rekordok jelenjenek meg, amelyek VAROS elemének értéke DEBRECEN: WHERE utasításrész: varos=’DEBRECEN’ Lekérdezés végrehajtása esetén a rekordok VEVONEV szerinti csökkenő sorrendben jelenjenek meg: ORDER BY utasításrész: vevonev desc Ne engedjük meg a blokkban a rekord törlését: Törlés engedélyezve: Nem 9 Ellenőrizzük a beállított tulajdonságok működésének helyességét a form futtatásával. 9 A keret (FRAME2) tulajdonságai: Jelenjen meg egyszerre 5 rekord és 12 pont legyen köztük a távolság: Megjelenített rekordok száma: 5 Rekordok közti távolság: 12 Módosítsuk a keret típusát tetszőlegesen: Kerettípus: 17
Süllyesztett
Írjuk át a keret címét, illesszük középre, módosítsuk a betűtípusát: Keretcím: Vevők karbantartása Keretcím illesztése: kozep A keretcím betűtípusának neve: Courier New Csökkentsük a megjelenő elemek közti vízszintes távolságot: Vízszintes objektum offszet: 2 9 Ellenőrizzük a beállított tulajdonságok működésének helyességét a form futtatásával. 9 Elemek tulajdonságai: IRSZ elem értékeként pontosan 4 karaktert kelljen megadni, ha végig kitöltöttük, ugorjon a kurzor a következő elemre: Automatikus átugrás: Igen Rögzített hossz: Igen VAROS elem kezdőértéke legyen DEBRECEN: Kezdőérték: DEBRECEN UTCA elemhez adjunk segítő szöveget, mely automatikusan jelenjen meg: Tipp: Ez egy tipp Jelenítse meg automatikusan a tippeket: Igen Eszköztipp: Ez meg eszköztipp VEVONEV, VAROS, UTCA elemekbe írt értéket konvertáljuk nagybetűsre (többszörös kijelölés a CTRL billentyűvel lehetséges): Kis-nagybetű megkötés: Felső VEVONEV elem módosítását ne engedélyezzük: Módosítás engedélyezve: Nem Ellenőrizzük a beállított tulajdonságok működésének helyességét a form futtatásával.
18
3.1.6. gyakorlat: Formamodul szintű objektumok létrehozása A gyakorlat célja: A gyakorlat során a formamodul szintű objektumok közül az értéklista, a vizuális attribútum és a szövegszerkesztő használatával fogunk megismerkedni. A formamodul szintű objektumok közös jellemzője, hogy elég egyszer létrehozni azokat, majd utána egy vagy több megfelelő objektumhoz hozzá lehet rendelni őket. Szükséges fogalmak: formamodul szintű objektum, értéklista, vizuális attribútum, szövegszerkesztő. Feladat: Hozzunk létre a LOV varázsló segítségével értéklistát, melynek használatával a VAROS elem értékét lehet megadni a korábban felvitt értékek közül történő választással. Megoldás: 9 Az Objektum-navigátorban Érték-listák kijelölése, majd a Létrehozás ikon kiválasztása vagy Eszközök/LOV varázsló Az LOV varázsló használatával kapcsoló bekapcsolása
Rekordcsoport lap: Lekérdezésen alapuló új rekordcsoport opció Lekérdezés lap: SQL lekérdezési utasítás: select distinct varos from vevo Oszlopok lap: Rekordcsoport oszlopa ablakból mozgassuk a VAROS elemet a LOV oszlopai ablakba Oszlopok megjelenítése lap: Visszaadott érték: VEVO.VAROS (Visszaadott elem kikeresése gomb) (A listából kiválasztott érték melyik blokk elemébe kerüljön visszaírásra)
19
LOV megjelenítése lap: Elemek lap:
Cím: Városok listája Visszaadott elemek ablakból a VEVO.VAROS elemet vigyük a Hozzárendelt elemek ablakba (A form futtatása során melyik elemből tudja majd elérni a felhasználó az értéklistát)
Megjegyzés: az értéklistával azonos nevű rekordcsoport is létrejött az értéklista létrehozásával egyidejűleg. 9 Mentsük, futtassuk a formamodult, próbáljuk ki az értéklistát: Szerkesztés⇒Lista megjelenítése vagy F9 9 Az Értéklista tulajdonságainak beállításával kapcsolatos feladatok: Az értéklista neve legyen VAROSLIS Ha a megjelenített értéklista egyetlen értéket (sort) tartalmaz (pl. szűrés esetén), ez az érték íródjon vissza automatikusan, (kiválasztás nélkül) az elembe: Automatikus kijelölés: Igen Állítsuk be, hogy az értéklista automatikusan jelenjen meg, amikor a megfelelő elembe kerül a kurzor: Automatikus megjelenítés: Igen Értékválasztás után a kurzor ugorjon a következő elemre: Automatikus átugrás: Igen 9 Mentsük, futtassuk a formamodult, próbáljuk ki újra az értéklistát Feladat: Hozzuk létre az AKTREK nevű vizuális attribútumot annak jelzésére, hogy a VEVO blokkban az aktuális rekord kiemelkedjen a többi közül. Ez két lépésben történik: a vizuális attribútumot létrehozzuk, majd a megfelelő blokk ’Az aktuális rekord vizuális attribútumcsoportja’ tulajdonságának értékeként beállítjuk.
20
Megoldás: 9 Az Objektum-navigátorban Vizuális attribútumok kijelölése, majd a Létrehozás ikon kiválasztása Tulajdonság-paletta: Név: AKTREK Előtér színe, Háttérszín, Kitöltési minta: válasszuk ki listából VEVO blokk Tulajdonság-paletta: Az aktuális rekord vizuális attribútumcsoportja:
AKTREK
9 Mentsük, futtassuk a formamodult Feladat: Hozzuk létre a HATTER nevű vizuális attribútumot és rendeljük a kerethez annak ’Vizuális attribútumcsoport’ tulajdonságon keresztül. Futtassuk, teszteljük a formamodult. Feladat: Rendeljük hozzá a MEGJ elemhez a rendszer szövegszerkesztőt. Megoldás: 9 MEGJ elem Tulajdonság-paletta: Szerkesztő: SYSTEM_EDITOR 9 Futtassuk a formamodult, próbáljuk ki a szövegszerkesztőt: MEGJ elemben állva Szerkesztés⇒Szerkesztés menüpont
21
3.1.7. gyakorlat: Nem adatbázis elem és vezérlő blokk létrehozása A gyakorlat célja: A vezérlő blokk és a nem-adatbázis elem fogalmának, alkalmazásának megismerése. Feladat: Hozzunk létre a VEVO blokkban két szövegelem típusú, nem-adatbázis elemet megfelelő címkével ellátva. A NEV elemben a saját nevünket jelenítsük meg, az elemet ne lehessen navigálni se egérrel, se billentyűzettel. A JELSZO elemet úgy hozzuk létre, hogy az elembe begépelt szöveg ’titkosítva’ jelenjen meg, az elemet csak egérrel lehessen navigálni. Megoldás: 9 Elrendezés-szerkesztő: a Szövegelem ikon segítségével jelöljük ki a két elem helyét, majd állítsuk be a tulajdonságaikat: Név: Kezdő érték: Adatbáziselem: Engedélyezett: Billentyűzettel navigálható: Megjelenített elemek száma:
NEV Márton Ágnes Nem Nem Nem 1
Név: Adat elrejtése: Adatbáziselem: Billentyűzettel navigálható: Megjelenített elemek száma:
JELSZO Igen Nem Nem 1
Feladat: Hozzuk létre a VEZER nevű vezérlő blokkot (manuálisan), majd az előbb létrehozott két elemet helyezzük át a VEZER blokkba. Megoldás: 9 Objektum-navigátor: Adatblokkok kijelölése, majd Létrehozás ikon
9 Blokk tulajdonságainak beállítása: Név: Adatbázis adatblokk: Egyetlen rekord:
VEZER Nem Igen
9 Mentsük, futtassuk a formot
22
3.2. form: RENDELES és TETEL táblák karbantartása 3.2.1. gyakorlat: Szülő-gyerek formamodul létrehozása A gyakorlat célja: Olyan formamodul létrehozása, melynek adatblokkjai egymással szülő-gyerek kapcsolatban állnak. Szükséges fogalmak: blokkok szülő-gyerek kapcsolata.
Feladat: A Form Builder eszköz használatával, varázslók segítségével hozzunk létre formamodult a RENDELES és TETEL táblák adatainak karbantartására a fenti elrendezés szerint, az alább felsoroltak figyelembevételével. Az elkészült formamodult mentsük el REND.FMB néven, majd futtassuk. RENDELES blokk (ez lesz a szülő blokk) • Blokk alaptáblája: RENDELES • Adatintegritás kikényszerítése: bekapcsolva • RENDELES tábla minden oszlopát tartalmazza • Megjelenítés stílusa: táblázatos • Keret címe: Rendelések • Megjelenített rekordok: 1 TETEL blokk (ez lesz a gyerek blokk) • Blokk alaptáblája: TETEL • Adatintegritás kikényszerítése: bekapcsolva • TETEL tábla minden oszlopát tartalmazza • Megjelenítés stílusa: táblázatos • Keret címe: Rendelések tételei • Megjelenített rekordok: 5 • Görgetősáv jelenjen meg • Kapcsolat a blokkok között: TETEL.RENDAZON=RENDELES.RENDAZON Megoldás: 9 Először hozzuk létre a RENDELES táblán alapuló adatblokkot a már ismert módon, a két varázsló segítségével, a kapcsolatban ez lesz a szülő blokk.
23
9 Ezután hozzuk létre a TETEL táblán alapuló adatblokkot is a már ismert módon, ez lesz a gyerek blokk. Ennek létrehozása során az Adatblokk-varázslóban egy új lap jelenik meg: Szülő-gyerek lap: Adatblokkok automatikus összekapcsolása kapcsoló bekapcsolása Megjegyzés: Az automatikus összekapcsolás akkor használható, ha a blokkok alaptáblái között Elsődleges kulcs-Külső kulcs kapcsolat van. Reláció létrehozása gomb kiválasztása RENDELES blokk kiválasztása a listából (ez lesz a szülő blokk) Szülő adatblokkok: RENDELES Gyermekelem: RENDAZON Szülőelem: RENDAZON
Megjegyzés: Az Objektum-navigátorban a szülő (RENDELES) blokk előzze meg a gyerek(TETEL) blokkot!
24
3.2.2. gyakorlat: Tulajdonság-paletta, értéklista, vezérlő blokk, nem-adatbázis elem A gyakorlat célja: Az eddigi ismeretek gyakorlása, önállóan. Feladatok: 9 A RENDELES blokk és elemeinek tulajdonság-beállításai A rekord utolsó elemének elérése után a kurzor a következő blokk első elemére ugorjon Lekérdezéskor a blokk rekordjai rendelési dátum szerinti sorrendben jelenjenek meg RENDDAT és SZALLDAT elemek értéke jobbra igazítva jelenjen meg. A kezdőérték a rendszerdátum ($$DATE$$) legyen. Az elemekhez adjunk tetszőleges formátum maszkot FIZMOD elem értékét konvertáljuk nagybetűsre, pontosan 1 karaktert lehessen megadni. A kezdőérték K legyen VEVOAZON elem kitöltéséhez készítsük el a VEVOLIS értéklistát: A lista a vevő nevét, azonosítóját és városát tartalmazza vevőnév szerinti sorrendben A kiválasztott vevőazonosítót írjuk vissza a RENDELES blokk VEVOAZON elemébe Ha az értéklista tartalma egyetlen sorra korlátozódik, a kiválasztott érték íródjon vissza a megfelelő elembe Értékválasztás után a kurzor a következő elemre ugorjon 9 TETEL blokk és elemeinek tulajdonság-beállításai A rekord utolsó elemének elérése után a kurzor a következő rekord első mezőjére ugorjon MENNY elemre adjunk formátum maszkot (999,999) AR, MENNY, AFA értéke az elemben jobbra igazítva jelenjen meg CIKKAZON elem kitöltéséhez készítsük el a CIKKLIS értéklistát: Cikk nevét, azonosítóját, árát és áfáját tartalmazza cikknév szerinti sorrendben Cikkazonosítót, árat és áfát írjuk vissza a TETEL blokk megfelelő elemeibe Csak a CIKKAZON elemből lehessen elérni az értéklistát Értékválasztás után a kurzor a következő elemre ugorjon 9 Hozzuk létre a VEZERLO nevű vezérlő blokkot, abban pedig egy DATUM nevű, szövegelem elemtípusú, dátumidő adattípusú nem adatbázis elemet címkével. A DATUM a rendszerdátumot és időt tartalmazza ($$DATETIME$$), ne lehessen navigálni se egérrel, se billentyűzettel. Adjunk hozzá tetszőleges formátummaszkot a súgó segítségével. Megoldás: önállóan
25
3.2.3. gyakorlat: Az adatbeviteli és az adatmegjelenítő elemek A gyakorlat célja: Az alapértelmezett szövegelemtől eltérő, különböző típusú elemek fogalmának és létrehozásának a megismerése. Adatbeviteli elemek: listaelem, választócsoport, jelölőnégyzet. Adatmegjelenítő elemek: megjelenéselem, számított mező, nyomógomb.
Feladat: Módosítsuk a FIZMOD elemet listaelem típusúvá, melynek stílusa Szlista. Ha az adatbázisban a megadottaktól eltérő érték szerepel, abban az esetben a K (Készpénz) érték jelenjen meg az elem értékeként. Megoldás: 9 Elrendezés-szerkesztő: Növeljük meg a FIZMOD elem szélességét 9 Módosítsuk a FIZMOD tulajdonságait: Elemtípus: Listaelem A lista elemei: További... Listaelemek-Listaelem értéke párok beállítása: Átutalás – A Készpénz – K Incassó – I
26
A lista stílusa: Az egyéb érték hozzárendelés:
Szlista K
Feladat: Módosítsuk a lista stílusát beugró listára, majd teszteljünk. Megoldás: önállóan Feladat: Hozzuk létre a TETEL blokkban a NETTO és BRUTTO megjelenéselemeket, melyek nem adatbázis elemek, majd ezekben jelenítsük meg rekordonként a mennyiség, egységár és áfa segítségével kiszámított megfelelő nettó és bruttó értékeket. Adjunk megfelelő címkét is ezeknek az elemeknek. Megoldás: 9 FRAME3 és FRAME4 közös Tulajdonság-palettája (F4) Elrendezés módosítása: Manuálisan 9 Elrendezés-szerkesztő: (a TETEL blokk legyen aktív) Képernyőelem ikon segítségével hozzuk létre a NETTO (nem adatbázis) elemet a MENNY és AFA elem között, megfelelő átrendezés után, a gyakorlat elején látható képernyőkép szerint. Hozzuk létre hasonlóképpen a BRUTTO elemet az AFA-tól jobbra. 9 NETTO és BRUTTO elemek közös Tulajdonság-palettája (F4) Igazítás: Jobb Adattípus: Szám Számolási mód: Képlet Adatbáziselem: Nem 9 NETTO Tulajdonság-palettája Képlet:
:ar*:menny
9 BRUTTO Tulajdonság-palettája Képlet:
:netto+round(:netto*:afa/100,0)
9 Teszteljünk Feladat: Hozzuk létre a gyakorlat elején látható képernyőképnek megfelelően a TETEL blokkban az ONETTO és OBRUTTO megjelenéselemeket, melyek szintén nem adatbázis elemek, majd ezekben jelenítsük meg rendelésenként a NETTO és BRUTTO összesen értékeket. Adjunk címkét is az elemeknek. Megoldás: 9 Elrendezés-szerkesztő: (a tétel blokk legyen aktív) Képernyőelem ikon segítségével hozzuk létre az ONETTO elemet a NETTO, az OBRUTTO elemet a BRUTTO alatt
27
9 ONETTO és OBRUTTO közös Tulajdonság-palettája (F4) Adattípus: Szám Igazítás: Jobb Számolási mód: Összegzés Összegző funkció: Összeg Összegzett blokk: TETEL Megjelenített elemek száma: 1 Adatbáziselem: Nem 9 ONETTO Tulajdonság-palettája Összegzett elem:
NETTO
9 OBRUTTO Tulajdonság-palettája Összegzett elem:
BRUTTO
9 TETEL blokk Tulajdonság-paletta: Az összes rekord lekérdezése:
Igen
9 Teszteljünk Feladat: Hozzuk létre a TETELSZAM megjelenéselemet, amely (az ONETTO és OBRUTTO elemekkel egy sorban) megjeleníti az aktuális rendelés tételeinek darabszámát. Megoldás: önállóan Feladat: Módosítsuk a FIZMOD elem típusát választócsoportra, amely három választógombot tartalmaz: Készpénz, Átutalás, Incassó címkékkel. A gombok az Alt-K, Alt-A illetve Alt-I billentyűkombinációkkal is legyenek elérhetőek. Alapértelmezett gombként (Kezdőérték) a K (Készpénz) gombot állítsuk be.
Megoldás: 9 Tulajdonság-paletta: Elemtípus:
Választócsoport
9 Objektum-navigátorban: FIZMOD/Választógombok kijelölése, majd Létrehozás ikon Név: GOMB1 Címke: Készpénz Hozzáférési kulcs: K Választógomb érték: K 9 Hasonlóan hozzuk létre a másik két választógombot is a megfelelő tulajdonság beállításokkal. GOMB2 Átutalás A A GOMB3 Incassó I I 9 Elrendezés szerkesztő: A választógombokat helyezzük el az elrendezésen (az ablak bal felső sorában vannak) 28
Feladat: Hozzunk létre a VEZERLO blokkban három nyomógombot.
Első rendelés Navigálás az első RENDELES rekordra Utolsó rendelés Navigálás az utolsó RENDELES rekordra Kilépés Kilépés a futtató környezetből A gombokat csak egérrel lehessen navigálni, billentyűzettel ne. A gombok rendre az Alt E, Alt U és Alt K billentyűkombinációkkal is legyenek elérhetőek. A nyomógombokhoz a végrehajtandó tevékenységet WHEN-BUTTON-PRESSED trigger segítségével rendelhetjük hozzá. Megoldás: 9 Elrendezés-szerkesztő: VEZERLO blokk legyen az aktív Gomb ikon, majd egérrel jelöljük ki a gombok helyét 9 Tulajdonság-paletta: Írjuk át egyenként a gombok nevét (G1, G2, G3), címkéjét, legyenek egérrel navigálhatók, adjuk meg a Hozzáférési kulcsot 9 G1 gomb kijelölése, jobb egérgomb, Intelligens triggerek: WHEN-BUTTON-PRESSED Trigger szöveg: go_block(’rendeles’); first_record ; 9 G2 gomb trigger szövege: go_block(’rendeles’); last_record; 9 G3 gomb trigger szövege: exit_form;
29
3.2.4. gyakorlat: Jelölőnégyzet létrehozása trigger segítségével A gyakorlat célja: Jelölőnégyzet típusú elem létrehozása. Feladat: Hozzunk létre jelölőnégyzetet a VEZERLO blokkban. A RENDELES blokk rekordjait a jelölőnégyzet bekapcsolt állapota esetén Rendelési dátum, kikapcsolt állapota esetén Vevőazonosító szerint rendezve jelenítsük meg. A rendezés beállítása a RENDEZ elemhez hozzárendelt WHEN-CHECKBOX-CHANGED trigger segítségével valósítható meg.
Megoldás: 9 Elrendezés-szerkesztő: Hozzuk létre a jelölőnégyzetet RENDEZ néven (nem adatbázis elem legyen) 9 Tulajdonságok beállítása: Címke: Érték a bejelölés esetén: Érték, ha nincs bejelölve: Az egyéb érték jelölőnégyzethez rendelése: Kezdőérték:
Rendezés R V nem megengedett R
9 RENDEZ elem – WHEN-CHECKBOX-CHANGED trigger elem szinten Trigger szöveg: GO_FIELD('rendeles.rendazon'); IF :vezerlo.rendez='R' THEN SET_BLOCK_PROPERTY('rendeles',ORDER_BY,'renddat'); ELSE SET_BLOCK_PROPERTY('rendeles',ORDER_BY,'vevoazon'); END IF; EXECUTE_QUERY; 9 Futtassuk, teszteljük a formamodult.
30
3.2.5. gyakorlat: Riasztás létrehozása A gyakorlat célja: A riasztás, mint formamodul szintű objektum használatának megismerése. Feladat: Hozzunk létre riasztást, amely megerősítést kér rekordtörlés esetén a TETEL blokkban: Valóban akarjuk-e a kijelölt rekordot törölni?
Megoldás: 9 Hozzuk létre form szintű objektumként a TORLES_MEGEROSITESE nevű riasztást 9 Állítsuk be a riasztás tulajdonságait Üzenet: Riasztási stílus: 1.gomb címkéje: 2.gomb címkéje: Alapértelmezett riasztásgomb:
Valóban akar rekordot törölni? Állj Igen Nem 1.gomb
9 TETEL blokk – KEY-DELREC trigger blokk szinten Trigger szöveg: DECLARE valasz NUMBER; BEGIN valasz:=SHOW_ALERT('torles_megerositese'); IF valasz=ALERT_BUTTON1 THEN DELETE_RECORD; END IF; END; 9 Futtassuk, teszteljük a formamodult. Feladat: Állítsuk be azt is, hogy a RENDELES blokkban történő rekordtörlés esetén is kelljen megerősítést adni (ugyanennek a riasztásnak a használatával), viszont továbbra se lehessen olyan rendelést törölni, amihez tartozik tétel rekord. Megoldás: 9 RENDELES blokk – KEY-DELREC trigger A már létező trigger programkódját egészítsük ki az előző pontban megadott programrészlettel.
31
3.2.6. gyakorlat: Trigger példa A gyakorlat célja: Annak bemutatása, hogyan lehet egy formamodult továbbfejleszteni a programozási eszközökkel, triggerek használatán keresztül. Feladat: A RENDELES blokkban a VEVOAZON mellett jelenítsük meg a megfelelő vevő nevét is a VEVO táblából, a fenti képernyőnek megfelelően, a VEVOAZON elemhez rendelt POST-CHANGE trigger segítségével.
Megoldás: 9 Elrendezés-szerkesztő: Hozzuk létre a RENDELES blokkban a VEVOAZON mellett a VNEV megjelenéselemet (nem adatbázis elem legyen) 9 VEVOLIS értéklista módosítása: A VNEV elembe is írja vissza a kiválasztott sorban levő vevő nevét. 9 VEVOAZON elem kijelölése - POST-CHANGE trigger elem szinten Trigger szöveg: SELECT vevonev INTO :rendeles.vnev FROM vevo WHERE vevoazon=:rendeles.vevoazon; 9 Futtassuk a formamodult: adjunk meg olyan vevőazonosítót, ami nem létezik a VEVO táblában, ekkor hibaüzenetet kapunk le nem kezelt kivétel miatt. 9 Írjunk az előző trigger szöveg végére kivételkezelő részt: EXCEPTION WHEN NO_DATA_FOUND THEN MESSAGE(‘Hibás, kérjen értéklistát F9-cel’); RAISE FORM_TRIGGER_FAILURE; 9 Futtassuk, teszteljük a formamodult Feladat: A TETEL blokkban a CIKKAZON mellett jelenítsük meg a megfelelő cikk nevét is a CIKK táblából, az előző feladathoz hasonlóan. Megoldás: önállóan 32
3.2.7. gyakorlat: Menümodul létrehozása, majd formamodulhoz kapcsolása A gyakorlat célja: Olyan menümodul létrehozása, amely lefordítás után tetszőleges formamodulhoz hozzárendelhető a form egy tulajdonságán keresztül. A továbbiakban az alapértelmezett helyett ez a menümodul lesz a form futtatás közben megjelenő menüje. A menümodul a formamodultól független, külön fájlban lesz tárolva mentés után. Új fogalmak: menümodul, annak részei, menüszerkesztő. Feladat: A Form Builder eszköz használatával hozzuk létre a MENU nevű, alábbi szerkezetű menümodult. A Rendezés menü választó típusú legyen. Mentsük el MENU.MMB néven, majd rendeljük hozzá a már korábban létrehozott REND formamodulhoz.
Megoldás: 9 Menümodul létrehozása Objektum-navigátor: Menük kijelölése, Létrehozás ikon, átnevezés 9 Menüszerkesztő eszköz meghívása Főmenü létrehozása: (Fájl, Rendezés, Lekérdezés menüpontok) <Új_elem> átnevezése Fájl-ra, Létrehozás jobbra ikon stb. Fájl menü elemeinek megadása Fájl kijelölése, Létrehozás lefelé ikon, menüelemek megadása Rendezés, Lekérdezés menü elemeinek megadása hasonlóan történik 9 A menüelemek tulajdonságainak beállítása az alábbi táblázat szerint lehetséges: Fájl menü: Menüelem típusa Parancstípus Menüelem kódja Bűvös elem Rendezés menü Menüelem típusa Parancstípus Menüelem választócsoportja Menüelem kódja
Mentés Sima PL/SQL commit_form;
----Határoló Üres
Kilépés bűvös Üres Kilépés
Rend.azonosító
Vevő azonosító
Rend.dátum
választó
választó
Választó
PL/SQL order_by
PL/SQL order_by
PL/SQL Order_by
set_block_property (’rendeles’, ORDER_BY, ’rendazon’);
set_block_property (’rendeles’, ORDER_BY, ’vevoazon’);
set_block_property (’rendeles’, ORDER_BY, ’renddat’);
33
Lekérdezés menü: Menüelem típusa Parancstípus Menüelem kódja
Feltételes sima PL/SQL enter_query;
Teljes Sima PL/SQL execute_query;
9 Menümodul fordítása (.MMX fájl előállítása): Fájl⇒Adminisztráció⇒Fájl fordítása 9 A lefordított menüt rendeljük formamodulhoz, futtassuk, teszteljük. Formamodul Tulajdonság-palettáján: Menümodul: c:\…\MENU.MMX 9 Módosítsuk a menümodult az alábbi szerkezetűre:
34
3.2.8. gyakorlat: Beugró menü létrehozása A gyakorlat célja: A beugró menü formamodul szintű objektum megismerése. A beugró menü a formamodul egy objektuma, elemhez rendelhető és a menümodulhoz hasonlóan a Menüszerkesztő eszközzel készíthető el. Feladat: A REND formamodul form szintű objektumaként hozzuk létre a BEUG nevű, az ábrán látható szerkezetű beugró menüt és rendeljük hozzá a RENDELES blokk VEVOAZON eleméhez, valamint a TETEL blokk CIKKAZON eleméhez:
Megoldás: 9 REND.FMB megnyitása 9 Objektum-navigátor: Beugró menük kijelölése, Létrehozás ikon, átnevezés 9 Menüszerkesztő: Menü elemek létrehozása, tulajdonságainak beállítása a táblázat segítségével: Menüelem típusa: Bűvös elem Parancstípus Menüelem kódja
Kivágás bűvös Kivágás üres
Másolás bűvös Másolás üres
Beillesztés bűvös Beillesztés üres
Értéklista sima Nincs PL/SQL list_values;
9 A BEUG menüt rendeljük hozzá a feladatban meghatározott elemekhez Tulajdonság-paletta segítségével.
35
3.3. form: VEVO-RENDELES-TETEL-CIKK formamodul létrehozása 3.3.1. gyakorlat: Négy blokkból álló formamodul létrehozása A gyakorlat célja: Az Oracle Form Builder eszközének segítségével négy blokkból álló formamodul létrehozása, a blokkok közötti szülő-gyerek kapcsolat beállítása.
Feladat: Hozzunk létre négy blokkból álló formamodult a fenti elrendezés szerint, az alábbiak figyelembevételével. A blokkok közötti szülő-gyerek kapcsolatokat ’kézzel’ kell beállítani. Blokk sorszáma 1 2 3 4
Alaptábla
Szülő blokk
Kapcsolat
VEVO RENDELES VEVO RENDELES.VEVOAZON = VEVO.VEVOAZON TETEL RENDELES TETEL.RENDAZON = RENDELES.RENDAZON CIKK TETEL CIKK.CIKKAZON = TETEL.CIKKAZON
Megoldás: önállóan
36
3.4. form: VEVO-CIKKCSOPORT-CIKK-RENDELES-TETEL formamodul létrehozása 3.4.1. gyakorlat: Öt blokkból álló formamodul létrehozása A gyakorlat célja: Az Oracle Form Builder eszközének segítségével öt blokkból álló formamodul létrehozása, a blokkok között szülő-gyerek kapcsolat beállítása. A blokkok elemei három kartonból álló fülesvásznon jelennek meg. Szükséges fogalmak: vászontípusok.
Feladat: Hozzunk létre 5 blokkból álló formamodult, a blokkok 3 kartonból álló fülesvásznon jelenjenek meg, a fenti elrendezés szerint, az alábbiak figyelembevételével: Blokk sorszáma 1 2 3 4 5
Blokk neve
Rekord szám VEVO 1 CIKKCSOPORT 1 CIKK 10 RENDELES 1 TETEL 10
Stílus Forma Táblázatos Táblázatos Táblázatos Táblázatos
Karton sorszáma 1 2 2 3 3
Karton neve VEVO CIKK CIKK REND REND
Karton címkéje Vevők Cikkek Cikkek Rendelések Rendelések
Szülő-gyerek kapcsolatok: a 2-3. blokk között: CIKKCSOPORT.CIKKCSOPAZON = CIKK.CIKKCSOPAZON a 4-5. blokk között: TETEL.RENDAZON = RENDELES.RENDAZON Megoldás: 9 A blokkokat egyenként, a már megismert Adatblokk és Elrendezés varázslók segítségével hozzuk létre. A vászontípus (fülesvászon) és a kartonok beállítása az Elrendezés-varázsló megfelelő lapján lehetséges. A megoldásban csak az eddig meg nem ismert beállítások szerepelnek. 1. blokk: VEVO Adatblokk varázsló: Elrendezés varázsló:
Tábla: Vászon:
VEVO Új vászon 37
Tulajdonság paletta (PAGE3): 2. blokk: CIKKCSOPORT Adatblokk varázsló: Elrendezés varázsló:
Tulajdonság paletta (PAGE5): 3. blokk: CIKK Adatblokk varázsló:
Elrendezés varázsló:
4. blokk: RENDELES Adatblokk varázsló: Elrendezés varázsló:
Tulajdonság paletta (PAGE8): 5. blokk: TETEL Adatblokk varázsló:
Elrendezés varázsló:
Típus: Karton: Stílus: Megjelenített rekordok:
Fül Új karton Forma 1
Név: Címke:
VEVO Vevők
Tábla: Vászon: Típus: Karton: Stílus: Megjelenített rekordok:
CIKKCSOPORT CANVAS2 Fül Új karton Táblázatos 1
Név: Címke:
CIKK Cikkek
Tábla: CIKK Szülő-gyerek kapcsolat beállítása: CIKKCSOPORT.CIKKCSOPAZON = CIKK.CIKKCSOPAZON Vászon: CANVAS2 Típus: Fül Karton: CIKK Stílus: Táblázatos Megjelenített rekordok: 10 Tábla: Vászon: Típus: Karton: Stílus: Megjelenített rekordok:
RENDELES CANVAS2 Fül Új karton Táblázatos 1
Név: Címke:
REND Rendelések
Tábla: TETEL Szülő-gyerek kapcsolat beállítása: TETEL.RENDAZON = RENDELES.RENDAZON Vászon: Típus: Karton: Stílus: Megjelenített rekordok: 38
CANVAS2 Fül REND Táblázatos 10
Feladat: Hozzunk létre triggert, amely megvalósítja, hogy ha egy fülre kattintunk, a kurzor az adott kartonon levő első blokk első elemébe kerül és az összes rekord lekérdezése is végrehajtódik. Megoldás: 9 Form szintű – WHEN-TAB-PAGE-CHANGED trigger Trigger szöveg: IF :SYSTEM.TAB_NEW_PAGE = 'VEVO' THEN GO_FIELD('vevo.vevoazon'); ELSIF :SYSTEM.TAB_NEW_PAGE = 'CIKK' THEN GO_FIELD('cikkcsoport.cikkcsopazon'); ELSE GO_FIELD('rendeles.rendazon'); END IF; EXECUTE_QUERY;
39
3.5. form: Vásznak használata 3.5.1. gyakorlat: Két háttérvásznat tartalmazó formamodul létrehozása A gyakorlat célja: Az Oracle Form Builder eszközének segítségével olyan formamodul létrehozása, amely több háttérvásznat tartalmaz. A gyakorlat során az is bemutatásra kerül, hogyan lehet formamodulból másik formamodult, illetve riportot meghívni. Feladat: Hozzunk létre egy olyan formot, amely két háttérvásznat tartalmaz. Az első vásznon (GOMBOK) nyomógombokat helyezzünk el (VEZERLO blokkban). A második vásznon (CIKKEK) a cikkek karbantartására szolgáló CIKK táblán alapuló blokk legyen, tetszőleges elrendezés szerint. Mentsük a formot VASZNAK.FMB néven. A nyomógombok kiválasztásával a megadott tevékenységeket kell elvégezni: • 1. gomb: a cikkek karbantartását elvégző, a második háttérvásznon elhelyezkedő CIKK blokk megjelenítése • 2. gomb: egy már korábban elkészített, tetszőleges form meghívása • 3. gomb: tetszőleges riport meghívása Az első vászon
A második vászon
Megoldás: 9 Objektum navigátor VEZERLO blokk létrehozása 9 Elrendezés-szerkesztő 1. gomb létrehozása WHEN-BUTTON-PRESSED trigger GO_BLOCK(’cikk_blokknév’); 2. gomb létrehozása CALL_FORM(’form_neve_elérési_úttal’); 3. gomb OHOST('rwrun60 lefordított_riport_neve_elérési_úttal'); A riportot a Report Builder eszköz Fájl⇒Adminisztráció⇒Riport fordítása menüben le kell fordítani 9 Adatblokk-varázsló CIKK táblán alapuló blokk létrehozása
40
9 Elrendezés-varázsló Vászon: Típus:
Új vászon Háttér
Az Elrendezés-varázsló újraindításakor ez a lap nem jelenik meg, így ez a beállítás nem módosítható. Az elrendezés többi beállítása tetszőlegesen megadható. 9 A második vásznon létrehozhatunk egy VISSZA feliratú gombot, amely a VEZERLO blokk eleme és WHEN-BUTTON-PRESSED triggere a GO_BLOCK(’VEZERLO’); eljárást hívja meg. 9 Teszteljük a form és a riport hívását is.
41
4. Feladatok riport létrehozására 4.1. riport: CIKK tábla adatainak táblázatos megjelenítése A gyakorlat célja: Az Oracle Report Builder eszközében található varázsló használatának megismerése. Táblázatos stílusú riport létrehozása, a Valós idejű megjelenítő lehetőségeinek megismerése, egyszerűbb formázási feladatok. Mentési lehetőségek bemutatása. Feladat: Hozzuk létre a CIKK tábla összes oszlopát cikknév szerinti sorrendben tartalmazó táblázatos stílusú riportot az alábbi elrendezés szerint. A riport végén írassuk ki a cikkek átlagos árát is, majd mentsük a riportot REP1.RDF néven. Cikkek listája Cikkazon CIKKAZON1 CIKKAZON2 ... Átlagár:
Cikknev CIKKNEV1 CIKKNEV2 ...
M_egys M_EGYS1 M_EGYS2 ...
Ar AR1 AR2 ... ...
Afa AFA1 AFA2 ...
Keszlet KESZLET1 KESZLET2 ...
Megoldás: 9 Indítsuk el a Riport-varázslót. Stílus lap: Cím: Cikkek listaja Táblázatos opció Tovább Típus lap: SQL utasítás opció Tovább Adat lap: Lekérdezési utasítás: SELECT * FROM CIKK ORDER BY CIKKNEV Tovább Mezők lap: Rendelkezésre álló mezők közül a Megjelenített mezők kiválasztása Tovább Összegzések lap: AR mező és Átlag > függvény kiválasztása Tovább Címkék lap: Tovább Sablon lap: Előre elkészített sablon opció: Corporate1 Befejezés 9 Mentsük el a riportot 9 Valós idejű megjelenítőben: Eredménylista megtekintése Feladatok a valós idejű megjelenítőben: Módosítsuk a mezők, címkék szélességét és helyét tetszőlegesen Igazítsuk jobbra a numerikus mezőket (és a címkéiket) Formázzuk az AFA-t a Százalék, a KESZLET-et a Vesszők ikonnal Írjuk át a dátum formátumát a tulajdonság-palettán, töröljük az angol nyelvű szöveget
42
Színezzük ki azokat a mezőket, amelyekben az ár értéke 200 Ft alatti: AR oszlop (nem a címke!) kijelölése, jobb egérgomb: Feltételes formázás Feltételes formázás ablak: Új… Feltétel: AR kisebb, mint 200 Színek, betűtípus kiválasztása Írjunk lapszámot az Oldalszám beszúrása ikonnal Helyezzük az átlagárat az AR oszlop alá, adjuk meg két tizedes pontossággal
43
4.2. riport: VEVO tábla adatainak megjelenítése balra csoportosított formában A gyakorlat célja: Szülő-gyerek típusú, Balra csoportosított stílusú riport létrehozása varázsló használatával. A riport módosítása a varázsló újraindításával. Feladat: Jelenítsük meg Balra csoportosított stílusban a VEVO tábla adatait (EMAIL, TELEFON és MEGJ kivételével) VAROS szerint csoportosítva az alábbi elrendezés szerint. Mentsük a riportot REP2.RDF néven. Vevők listája Varos VAROS1
VAROS2
Vevoazon Vevonev VEVOAZON1 VEVONEV1 VEVOAZON2 VEVONEV2 VEVOAZON3 VEVONEV3 … … VEVOAZON4 VEVONEV4 VEVOAZON5 VEVONEV5 VEVOAZON6 VEVONEV6 … …
Irsz IRSZ1 IRSZ2 IRSZ3 … IRSZ4 IRSZ5 IRSZ6 …
Utca UTCA1 UTCA2 UTCA3 … UTCA4 UTCA5 UTCA6 …
… Megoldás: 9 Indítsuk el a Riport-varázslót. Stílus lap: Balra csoportosított Adat lap: SELECT * FROM VEVO Csoportok lap: Csoportmezők ablakba: VAROS Mezők lap: EMAIL, TELEFON és MEGJ kivételével mind Sablon lap: Corporate1 Feladat: Hozzunk létre a VAROS szinten belül egy 2. szintű csoportot az IRSZ mező szerint, az alábbi elrendezésnek megfelelően. Minden csoportszinten írassuk ki a rekordok darabszámát. Vevők listája Varos VAROS1
Irsz IRSZ1
IRSZ2
VAROS2
Számol: … IRSZ3
Vevoazon VEVOAZON1 VEVOAZON2 VEVOAZON3 Számol: … VEVOAZON4 VEVOAZON5 VEVOAZON6 Számol: …
Vevonev VEVONEV1 VEVONEV2 VEVONEV3
Utca UTCA1 UTCA2 UTCA3
VEVONEV4 VEVONEV5 VEVONEV6
UTCA4 UTCA5 UTCA6
VEVOAZON7 VEVOAZON8 Számol: …
VEVONEV7 VEVONEV8
UTCA7 UTCA8
Számol: … Számol: … 44
Megoldás: A varázsló újraindítása után a megfelelő lapokon kell módosítást végezni. Feladat: Módosítsuk a riport stílusát Felülre csoportosított-ra. Megoldás: A varázsló újraindítása után a megfelelő lapokon kell módosítást végezni.
45
4.3. riport: RENDELES és TETEL táblák adatainak megjelenítése A gyakorlat célja: Szülő-gyerek típusú, Felülre csoportosított stílusú riport létrehozása varázsló használatával. A riport módosítása a varázsló újraindításával. Érték szerinti paraméter létrehozása. Feladat: Jelenítsük meg Felülre csoportosított stílusban a RENDELES és TETEL táblák összes adatát a vevők és cikkek nevével kiegészítve, vevő szerint csoportosítva az alábbi elrendezés szerint. Mentsük a riportot REP3.RDF néven. Vevoazon: VEVOAZON1 Rendazon Renddat RENDAZON1 RENDDAT1 RENDAZON2 RENDDAT2 … … Vevoazon: VEVOAZON2 Rendazon Renddat RENDAZON3 RENDDAT3 RENDAZON4 RENDDAT4 … …
Vevonev: VEVONEV1 Fizmod Szalldat Cikkazon Cikknev FIZMOD1 SZALLDAT1 CIKKAZON1CIKKNEV1 FIZMOD2 SZALLDAT2 CIKKAZON2CIKKNEV2 … … … … Vevonev: VEVONEV2 Fizmod Szalldat Cikkazon Cikknev FIZMOD3 SZALLDAT3 CIKKAZON3CIKKNEV3 FIZMOD4 SZALLDAT4 CIKKAZON4CIKKNEV4 … … … …
Ar Menny AR1 MENNY1 AR2 MENNY2 … …
Afa AFA1 AFA2 …
Ar Menny AR3 MENNY3 AR4 MENNY4 … …
Afa AFA3 AFA4 …
Megoldás: 9 Indítsuk el a Riport-varázslót. Stílus lap: Cím: Rendelesek vevonkent Felülre csoportosított Adat lap: Lekérdezés megadása (a Lekérdezés készítővel generált lekérdezés op. rendszer fájlba menthető) Csoportok lap: Csoportmezők ablakba: VEVOAZON, VEVONEV Sablon lap: Corporate1 Feladat: Képezzünk a vevőn belül újabb csoportot a rendelések szerint (RENDAZON, RENDDAT, FIZMOD, SZALLDAT) az alábbi elrendezésnek megfelelően. Ezután a megfelelő képlet segítségével számítsuk ki minden cikk nettó és bruttó értékét. Írassunk ki minden csoportszinten a nettó és bruttó összesen értékeket megfelelő címkével ellátva. Formázzuk a numerikus mezőket Vevoazon: VEVOAZON1 Vevonev: VEVONEV1 Rendazon: RENDAZON1 Renddat: RENDDAT1 Cikkazon Cikknev Ar Menny CIKKAZON1 CIKKNEV1 AR1 MENNY1 CIKKAZON2 CIKKNEV2 AR2 MENNY2 CIKKAZON3 CIKKNEV3 AR3 MENNY3 Rendelés összesen: Rendazon: RENDAZON2 Renddat: RENDDAT2 CIKKAZON4 CIKKNEV4 AR4 MENNY4 CIKKAZON5 CIKKNEV5 AR5 MENNY5 Rendelés összesen: Vevő összesen: …
Fizmod: FIZMOD1 Nettó Afa NETTO1 AFA1 NETTO2 AFA2 NETTO3 AFA3 … Fizmod: FIZMOD2 NETTO4 AFA4 NETTO5 AFA5 …
Vevoazon: VEVOAZON2 Vevonev: VEVONEV2 … Végösszesen:
…
46
Szalldat: SZALLDAT1 Brutto BRUTTO1 BRUTTO2 BRUTTO3 … Szalldat: SZALLDAT2 BRUTTO4 BRUTTO5 … …
…
Megoldás: 9 Indítsuk újra a varázslót: Csoportok lap: 2. szint: RENDAZON, RENDDAT, FIZMOD, SZALLDAT Adat lap: SELECT listához új kifejezések hozzáadása: NETTO és BRUTTÓ kiszámítási képlete Mezők lap: NETTO és BRUTTO megjelenítése Megjelenített mezők sorrendjének módosítása Összegzések lap: NETTO mező és Összeg> függvény kiválasztása BRUTTO mező és Összeg> függvény kiválasztása Feladat: Hozzunk létre 3 paramétert (érték szerinti hivatkozással a VEVOAZON oszlopra), melynek segítségével a felhasználó eldönti, mely vevők (maximum 3) adatait listázza. Készítsünk dinamikus értéklistát a paraméterhez, mely a VEVOAZON, VEVONEV, VAROS oszlopokat tartalmazza, de a VEVOAZON ne jelenjen meg a listában. Módosítsuk a Paraméterforma képernyőn a paraméterek címkéjét ’beszédesebbre’. Megoldás: 9 Varázsló: Adat lap: WHERE utasításrész kiegészítése: … RENDELES.VEVOAZON IN (:P1, :P2, :P3) 9 Objektum-navigátor: Adatmodell⇒Felhasználói paraméterek: P1,P2,P3 Tulajdonság-paletta: Adattípus: NUMBER Értéklista: SELECT utasítás (dinamikus) SELECT VEVOAZON, VEVONEV, VAROS FROM VEVO Első oszlop elrejtése kapcsoló bekapcsolása 9 Eszközök⇒Paraméterforma készítő: Címkék módosítása
47
4.4. riport: Mátrix riport készítése A gyakorlat célja: Szülő-szülő-gyerek típusú, Mátrix stílusú riport létrehozása varázsló használatával. Feladat: Készítsünk Mátrix stílusú riportot: soraiban a vevő azonosítója és neve, oszlopaiban a rendelési dátum, a cellákban a vásárlások bruttó összesen értéke szerepeljen. Írassunk ki soronként, oszloponként az összesített bruttó értékeket, mentsük a riportot REP4.RDF néven. A valós idejű megjelenítőben szépítsük meg a riportot: dátum középre, numerikus mezők jobbra, Vesszők ikon, Cím, dátumformátum, felesleges címkék törlése. RENDDAT1 RENDDAT2 … VEVOAZON1 VEVONEV1 VEVOAZON2 VEVONEV2 ... Megoldás: 9 Indítsuk el a Riport-varázslót. Stílus lap: Mátrix Adat lap: Lekérdezés megadása Sorok lap: VEVOAZON, VEVONEV Oszlopok lap: RENDDAT Cella lap: BRUTTO és Összeg> kiválasztása Összegzések: Sumbrutto és Összeg > kiválasztása Sablon lap: Corporate1
4.5. riport: Mátrix csoporttal riport készítése A gyakorlat célja: Mátrix csoporttal stílusú riport létrehozása varázsló használatával. Feladat: Az előző feladatban létrehozott Mátrix riportot módosítsuk Mátrix csoporttal stílusúra: képezzünk csoportokat a fizetési mód szerint, a fizetési mód kódja helyett a nevét jelenítsük meg (K-Készpénz, A-Átutalás, I-Incassó, Egyéb). Adjunk címet a riportnak, majd mentsük el REP5.RDF néven. Fizetési mód: FIZMODNEV1 RENDDAT1
RENDDAT2
…
VEVOAZON1 VEVONEV1 VEVOAZON2 VEVONEV2 ... Fizetési mód: FIZMODNEV2 … Megoldás: 9 Indítsuk el a Riport-varázslót. Stílus lap: Mátrix csoporttal Adat lap: SELECT listához új kifejezés hozzáadása: FIZMODNEV (DECODE vagy CASE használatával) Csoportok lap: FIZMODNEV 48
4.6. riport: Formalevél készítése A gyakorlat célja: Formalevél stílusú riport létrehozása varázsló használatával. Szöveges paraméter létrehozása. Feladat: Írjunk Formalevelet azoknak a vevőknek, akik még semmit nem vásároltak. A levél a vevő azonosítóját, nevét és címét, valamint tetszőleges összekötő szöveget tartalmazzon. Mentsük el REP6.RDF néven. Ha elkészült a riport, hozzunk létre szöveges paramétert, melynek segítségével a felhasználó döntheti el, hogy a levelek VEVOAZON, VEVONEV vagy VAROS szerinti sorrendben készüljenek el. Megoldás: 9 Objektum navigátor: Adatmodell/Felhasználói paraméterek Létrehozás ikon: RENDEZ 9 Tulajdonság-paletta (RENDEZ paraméter): Adattípus: CHARACTER Kezdőérték: VEVOAZON Értéklista (statikus): VEVOAZON, VEVONEV, VAROS Lista szűkítése előre meghatározott értékekre kikapcsolása 9 Riportvarázsló: Adat lap:
... ORDER BY &RENDEZ
Feladat: Futtassuk a riportot összetett rendezési feltételek megadásával: • Város, azon belül utca szerint rendezés majd • Vevőnév szerinti csökkenő rendezés
4.7. riport: Mátrix riport készítése a cellában két érték megjelenítésével A gyakorlat célja: Mátrix stílusú riport létrehozása varázsló használatával, a cellákban két érték megjelenítésével. Feladat: Készítsünk Mátrix stílusú riportot, melynek soraiban a cikknév, oszlopaiban a vevőnév szerepel. Jelenítsük meg a cellákban a nettó és bruttó vásárlások összesített értékét. A sorok és oszlopok végén is írassunk összesítést. Mentsük REP7.RDF néven. Nettó és Bruttó vásárlások vevőnként és cikkenként VEVONEV1
VEVONEV2
…
CIKKNEV1 CIKKNEV2 ...
49
4.8. riport: Beágyazott mátrix riport készítése Feladat: Az előző feladatban készített riportot módosítsuk úgy, hogy a cikknév szinten felül képezzünk CIKKCSOPNEV szerinti csoportot, a vevőnéven felül pedig VAROS szerinti csoportot. Mentsük a riportot REP8.RDF néven. Hozzuk létre az érték szerinti hivatkozású CPAR paramétert, melynek segítségével a felhasználó eldönti, mely cikkcsoport adatait listázza. A cikkcsoport nevét dinamikus értéklistából lehessen választani. VAROS1 VEVONEV1 CIKKCSOPNEV1 CIKKCSOPNEV2
VEVONEV2
VAROS2 VEVONEV3
VEVONEV4
...
CIKKNEV1 CIKKNEV2 ...
4.9. riport: Felülre csoportosított riport készítése Feladat: Készítsünk riportot, amely megjeleníti, hogy az egyes cikkeket (cikkazonosító, cikknév) kik (vevőazonosító, vevőnév), mikor (rendelési dátum) és mennyiért (ár, mennyiség, nettó, áfa, bruttó) vásárolták. Írassuk ki cikkenként az összesített nettó és bruttó értékeket. Mentsük a riportot REP9.RDF néven. Az összesített nettó és bruttó értékeket módosítsuk Göngyölített összesenre. Tegyük lehetővé a felhasználó számára, hogy két, általa paraméterként megadott dátum közötti vásárlásokat tudjon lekérdezni. Cikk: CIKKAZON1 CIKKNEV1 Vevoazon Vevonev VEVOAZON1 VEVONEV1 VEVOAZON2 VEVONEV2 ... ... Összesen:
Rend.datum RENDDAT1 RENDDAT2 ...
Ar AR1 AR2 ...
Mennyiseg MENNY1 MENNY2 ...
Netto NETTO1 NETTO2 ... ...
Afa AFA1 AFA2 ...
Brutto BRUTTO1 BRUTTO2 ... ...
Ar ...
Mennyiseg ...
Netto ...
Afa ...
Brutto ...
Cikk: CIKKAZON2 CIKKNEV2 Vevoazon Vevonev ... ... ... Összesen: Riport összesen:
Rend.datum ...
... ...
50
... ...
5. Az alkalmazás összeállítása 5.1. form: Főmenü formamodul létrehozása A gyakorlat célja: Olyan formamodul létrehozása, melyből az eddig elkészített formamodulok és riportok mindegyike elérhető. Feladat: Hozzunk létre nyomógombokat, amelyek segítségével az eddig elkészített formamodulok és riportok meghívhatók.
51
6. Gyakorló feladatok 6.1. gyakorlat: Formamodul és menümodul létrehozása A gyakorlat célja: Formamodul létrehozása önállóan a TELEPHELY, ALKALMAZOTT és BEOSZTAS táblák felhasználásával. ADATTÁBLÁK
Feladat: Jelenítsük meg a felhasználó számára az alábbi elrendezés szerint, hogy az alkalmazottak melyik telephelyen dolgoznak és mi a foglalkozásuk. A táblákat létrehozó script neve TELALKCREA.SQL.
A háromblokkos formamodul alaptábláit az alábbiak szerint kell megadni. 1. ALKALMAZOTT adatblokk: 2. TELEPHELY adatblokk: Szülő blokk: Kapcsolat 3. BEOSZTAS adatblokk: Szülő blokk: Kapcsolat
alaptábla: ALKALMAZOTT alaptábla: TELEPHELY ALKALMAZOTT TELEPHELY.T_KOD =ALKALMAZOTT.T_KOD alaptábla: BEOSZTAS ALKALMAZOTT BEOSZTAS.B_KOD =ALKALMAZOTT.B_KOD
52
• • • • • • • • • • •
Lekérdezés végrehajtása esetén az alkalmazottak B_KOD, azon belül A_NEV szerinti sorrendben jelenjenek meg A BELEPES kezdőértéke a rendszerdátum legyen Az A_KOD elem értékét ne lehessen módosítani Hozzuk létre a TELEP értéklistát az ALKALMAZOTT blokkban levő T_KOD elem értékének megadásához. Az értéklista oszlopai: T_NEV, VAROS, T_KOD legyenek Hozzunk létre Beugró menüt a T_KOD elemhez, melyből a TELEP értéklista elérhető Hozzuk létre az OSSZES megjelenéselemet (képernyőelemet), és írassuk bele rekordonként a FIZETES és PREMIUM összegét (a FIZETES és a PREMIUM NULL érték is lehet) Hozzuk létre a OSSZFIZ és OSSZPRE megjelenéselemet (képernyőelemet), majd írassuk bele az alkalmazottak összesített FIZETES és PREMIUM értékét Hozzuk létre a VEZER nevű vezérlőblokkot Hozzunk létre nyomógombot a VEZER blokkban, melynek lenyomása esetén kilépünk a futtató környezetből Hozzunk létre riasztást, amely minden blokkban rekordtörlés esetén megerősítést kér a rekord törlésére vonatkozóan. Hozzunk létre Menümodult az alábbi menüpontokkal, rendeljük hozzá a formamodulunkhoz: Beszámoló Teljes lekérdezés Utolsó rekord Kilépés
6.2. gyakorlat: Riport létrehozása A gyakorlat célja: Riport létrehozása önállóan a TELEPHELY, ALKALMAZOTT és BEOSZTAS táblák felhasználásával. Feladat: Hozzunk létre riportot az alábbi elrendezéssel: Átlagos fizetés és prémium beosztásonként és telephelyenként
B_NEV1 B_NEV2 B_NEV3
T_KOD1 T_NEV1 ... ... ... ...
T_KOD2 T_NEV2 ... ... ... ...
T_KOD3 T_NEV3 ... ... ... ...
... ... ... ...
A sorokban a beosztás megnevezése, az oszlopokban a telephely kódja és neve szerepeljen. Írassuk ki a cellákba, hogy beosztásonként és telephelyenként mennyi a FIZETES+PREMIUM átlagos értéke. A sorok és oszlopok végén jelenítsük is meg az átlagot. A numerikus mezők jobbra igazítva jelenjenek meg. (A FIZETES és a PREMIUM NULL érték is lehet!!!) Hozzunk létre két paramétert, melynek segítségével a felhasználó döntheti el, hogy mely két dátum között belépett alkalmazottak adatait akarja megjeleníteni.
53
7. Az adattáblákat létrehozó scriptek CIKKCREA.SQL tartalma: DROP TABLE vevo CASCADE CONSTRAINTS / DROP TABLE cikkcsoport CASCADE CONSTRAINTS / DROP TABLE cikk CASCADE CONSTRAINTS / DROP TABLE tetel CASCADE CONSTRAINTS / DROP TABLE rendeles CASCADE CONSTRAINTS / CREATE TABLE vevo ( vevoazon number(6) CONSTRAINT vevo_pk PRIMARY KEY, vevonev varchar2(25) NOT NULL, irsz varchar2(4), varos varchar2(15), utca varchar2(20), telefon varchar2(16), email varchar2(30), megj long) / CREATE TABLE cikkcsoport ( cikkcsopazon number(3) CONSTRAINT cikkcsoport_pk PRIMARY KEY, cikkcsopnev varchar2(25) NOT NULL) / CREATE TABLE cikk ( cikkazon number(6) CONSTRAINT cikk_pk PRIMARY KEY, cikkcsopazon number(3) CONSTRAINT cikk_csoport_fk REFERENCES cikkcsoport(cikkcsopazon) NOT NULL, cikknev varchar2(25) NOT NULL, m_egys varchar2(4), ar number(8), afa number(2), keszlet number(8)) / CREATE TABLE rendeles ( rendazon number(6) CONSTRAINT rend_pk PRIMARY KEY, renddat date, fizmod varchar2(1), vevoazon number(6) NOT NULL, szalldat date) / CREATE TABLE tetel ( rendazon number(6) CONSTRAINT tetel_rend_fk REFERENCES rendeles(rendazon) NOT NULL, tetelazon number(3), cikkazon number(6) NOT NULL, ar number(6), menny number(6), afa number(2), CONSTRAINT tetel_rend_pk PRIMARY KEY (rendazon,tetelazon)) / INSERT INTO vevo VALUES ( '1001','KOVACS JANOS','3300','EGER','DOBO UT 11','30-9456-654','
[email protected]',NULL) / INSERT INTO vevo VALUES ('1002','NAGY JANOS','3300','EGER','SZECHENYI UT 42','60-9123456','
[email protected]',NULL) / INSERT INTO vevo VALUES ( '1003','VARGA EVA','4032','DEBRECEN','DOBERDO UT 1','52-565-454','
[email protected]',NULL) / INSERT INTO vevo VALUES ( '1004','KELEMEN IMRE','4032','DEBRECEN','PIAC UT 1',NULL,NULL,NULL) /
54
INSERT INTO vevo VALUES ( '1005','JUHASZ BELA','1117','BUDAPEST','VACI UT 111','1-9111-222',NULL,NULL) / INSERT INTO vevo VALUES ( '1006','HORVATH JUDIT','4028','DEBRECEN','SIMONYI UT 20',NULL,'
[email protected]',NULL) / INSERT INTO vevo VALUES ( '1007','VASS PAL','3300','EGER','FELNEMETI UT 88','60-9141-414',NULL,NULL) / INSERT INTO vevo VALUES ( '1008','KALMAN EDIT','1115','BUDAPEST','VACI UT 10',NULL,'
[email protected]',NULL) / INSERT INTO vevo VALUES ( '1009','KOVACS PETER','4032','DEBRECEN','BOSZORMENYI 42','52-545-454','
[email protected]',NULL) / INSERT INTO vevo VALUES ( '1010','BALOGH PAL','1118','BUDAPEST','VIRAG UT 15',NULL,NULL,NULL) / INSERT INTO vevo VALUES ( '1011','BALOGH ENDRE','1118','BUDAPEST','HOVIRAG UT 1','30-1234-567','
[email protected]',NULL) / INSERT INTO vevo VALUES ( '1012','BALOGH EDE','1117','BUDAPEST','ALMA UT 15',NULL,'
[email protected]',NULL) / INSERT INTO vevo VALUES ( '1013','VARGA PAL','3300','EGER','DOBO UT 10','70-2345-555',NULL,NULL) / INSERT INTO vevo VALUES ( '1014','IVAN BELA','3400','MEZOKOVESD','HOVIRAG UT 1','49-444-555',NULL,NULL) / INSERT INTO vevo VALUES ( '1015','NAGY OTTO','3300','EGER','MAKLARI UT 55','30-6541-358','
[email protected]',NULL) / INSERT INTO vevo VALUES ( '1016','ARVA BELA','4032','DEBRECEN','VEZER UT 15',NULL,NULL,NULL) / INSERT INTO vevo VALUES ( '1017','FARKAS JUDIT','4032','DEBRECEN','VEZER UT 11',NULL,NULL,NULL) / INSERT INTO vevo VALUES ( '1018','FARKAS OTTO','4032','DEBRECEN','PALLAGI UT 11',NULL,NULL,NULL) / INSERT INTO vevo VALUES ( '1019','REVESZ GYULA','4032','DEBRECEN','SIMONYI UT 4','60-6989-888','
[email protected]',NULL) / INSERT INTO vevo VALUES ( '1020','KOVACS AGNES','4032','DEBRECEN','PIACZ U 1',NULL,NULL,NULL) / INSERT INTO cikkcsoport VALUES ('1','UDITO ITAL') / INSERT INTO cikkcsoport VALUES ('2','PEKARU') / INSERT INTO cikkcsoport VALUES ('3','HUSARU') / INSERT INTO cikkcsoport VALUES ('4','TEJTERMEK') / INSERT INTO cikkcsoport VALUES ('5','GYUMOLCS') / INSERT INTO cikkcsoport VALUES ('6','HAZTARTASI PAPIRARU') / INSERT INTO cikk VALUES ('101','1','HOHES C','DB',280,25,1000) / INSERT INTO cikk VALUES ('102','6','PAPIRZSEBKENDO ZITA','DB',90,25,1000) / INSERT INTO cikk VALUES ('103','3','PULYKAMELL','KG',1100,15,1000) / INSERT INTO cikk VALUES ('104','3','TELISZALAMI','KG',4000,15,1000) /
55
INSERT INTO cikk VALUES ('105','4','RAMA MARGARIN 500 GR','DB',220,15,1000) / INSERT INTO cikk VALUES ('106','4','RAMA MARGARIN 250 GR','DB',130,15,1000) / INSERT INTO cikk VALUES ('107','4','VITALINEA JOGHURT','DB',80,15,1000) / INSERT INTO cikk VALUES ('108','4','DANONE PUDING','DB',120,15,1000) / INSERT INTO cikk VALUES ('109','5','NARANCS','KG',280,15,1000) / INSERT INTO cikk VALUES ('110','4','TURO RUDI','DB',60,15,1000) / INSERT INTO cikk VALUES ('111','3','CSEMEGE KARAJ 100 GR','DB',320,15,1000) / INSERT INTO cikk VALUES ('112','2','FELBARNA KENYER','KG',160,25,1000) / INSERT INTO cikk VALUES ('113','5','ASZALT FUGE 200 GR','DB',120,15,1000) / INSERT INTO cikk VALUES ('114','2','KIFLI','DB',22,25,1000) / INSERT INTO cikk VALUES ('115','2','ZSEMLE','DB',22,25,1000) / INSERT INTO cikk VALUES ('116','1','TOP JOY ALMALE 1,5 LITER','DB',300,25,1000) / INSERT INTO cikk VALUES ('117','2','FELBARNA KENYER','KG',160,25,1000) / INSERT INTO cikk VALUES ('118','5','BANAN','KG',250,15,1000) / INSERT INTO cikk VALUES ('119','5','ALMA','KG',100,15,1000) / INSERT INTO cikk VALUES ('120','5','KORTE','KG',500,15,1000) / INSERT INTO rendeles VALUES (1001,'01-JAN-02','K',1010,'01-JAN-02') / INSERT INTO rendeles VALUES (1002,'02-JAN-12','K',1006,'02-JAN-12') / INSERT INTO rendeles VALUES (1003,'02-JAN-22','A',1004,'02-JAN-29') / INSERT INTO rendeles VALUES (1004,'02-FEB-01','K',1010,'02-FEB-01') / INSERT INTO rendeles VALUES (1005,'02-FEB-12','K',1008,'02-FEB-12') / INSERT INTO rendeles VALUES (1006,'02-FEB-12','K',1007,'02-FEB-12') / INSERT INTO rendeles VALUES (1007,'02-FEB-12','A',1008,'02-FEB-19') / INSERT INTO rendeles VALUES (1008,'02-FEB-12','K',1007,'02-FEB-12') / INSERT INTO rendeles VALUES (1009,'02-FEB-12','I',1004,'02-FEB-12') / INSERT INTO rendeles VALUES (1010,'05-JAN-3','K',1009,'05-JAN-3') / INSERT INTO rendeles VALUES (1011,'05-JAN-3','K',1009,'05-JAN-3') / INSERT INTO rendeles VALUES (1012,'05-JAN-4','K',1011,'05-JAN-4') / INSERT INTO rendeles VALUES (1013,'05-JAN-5','K',1012,'05-JAN-5') / INSERT INTO rendeles VALUES (1014,'05-JAN-5','A',1011,'05-JAN-12') / INSERT INTO rendeles VALUES (1015,'05-JAN-9','A',1013,'05-JAN-16') / INSERT INTO rendeles VALUES (1016,'05-JAN-9','K',1011,'05-JAN-9') / INSERT INTO rendeles VALUES (1017,'05-JAN-9','K',1013,'05-JAN-9') / INSERT INTO tetel VALUES (1001,1,101,280,5,25) /
56
INSERT INTO tetel VALUES (1001,2,111,260,1,15) / INSERT INTO tetel VALUES (1001,3,109,280,2,15) / INSERT INTO tetel VALUES (1001,4,107,8,5,15) / INSERT INTO tetel VALUES (1001,5,108,120,1,15) / INSERT INTO tetel VALUES (1001,6,101,280,3,25) / INSERT INTO tetel VALUES (1002,1,112,160,3,25) / INSERT INTO tetel VALUES (1002,2,103,1100,4,15) / INSERT INTO tetel VALUES (1002,3,108,120,12,15) / INSERT INTO tetel VALUES (1003,1,112,160,3,25) / INSERT INTO teTel VALUES (1003,2,109,280,4,15) / INSERT INTO tetel VALUES (1003,3,107,80,12,15) / INSERT INTO tetel VALUES (1004,1,110,60,12,15) / INSERT INTO tetel VALUES (1004,2,102,70,11,25) / INSERT INTO tetel VALUES (1004,3,103,1100,4,15) / INSERT INTO tetel VALUES (1004,4,101,220,10,25) / INSERT INTO tetel VALUES (1005,1,108,120,3,15) / INSERT INTO tetel VALUES (1005,2,102,90,2,25) / INSERT INTO tetel VALUES (1005,3,112,160,1,25) / INSERT INTO tetel VALUES (1006,1,102,90,11,25) / INSERT INTO tetel VALUES (1006,2,109,280,3,15) / INSERT INTO tetel VALUES (1006,3,109,280,2,15) / INSERT INTO tetel VALUES (1006,4,111,260,1,25) / INSERT INTO tetel VALUES (1007,1,108,120,3,15) / INSERT INTO tetel VALUES (1007,2,103,1100,3,15) / INSERT INTO tetel VALUES (1007,3,108,120,4,15) / INSERT INTO tetel VALUES (1007,4,109,280,3,15) / INSERT INTO tetel VALUES (1008,1,108,120,1,15) / INSERT INTO tetel VALUES (1008,2,109,280,1,15) / INSERT INTO tetel VALUES (1009,1,104,4000,3,15) / INSERT INTO tetel VALUES (1009,2,106,130,3,15) / INSERT INTO tetel VALUES (1011,1,113,120,1,15) / INSERT INTO tetel VALUES (1011,2,114,22,5,25) / INSERT INTO tetel VALUES (1011,3,115,22,10,25) / INSERT INTO tetel VALUES (1011,4,110,60,3,15) / INSERT INTO tetel VALUES (1011,5,104,4000,3,15) /
57
INSERT INTO tetel VALUES (1011,6,113,120,1,15) / INSERT INTO tetel VALUES (1011,7,119,100,3,15) / INSERT INTO tetel VALUES (1011,8,120,500,5,15) / INSERT INTO tetel VALUES (1014,1,118,250,5,15) / INSERT INTO tetel VALUES (1014,2,119,100,5,15) / INSERT INTO tetel VALUES (1015,1,118,250,5,15) / INSERT INTO tetel VALUES (1015,2,119,100,4,15) / INSERT INTO tetel VALUES (1016,1,118,250,8,15) / INSERT INTO tetel VALUES (1016,2,119,100,2,15) / commit / --exit
TELALKCREA.SQL tartalma: DROP TABLE beosztas / DROP TABLE alkalmazott / DROP TABLE telephely / CREATE TABLE telephely (t_kod VARCHAR2(2) t_nev VARCHAR2(20), varos VARCHAR2(15)) / CREATE TABLE alkalmazott (a_kod VARCHAR2(4) a_nev VARCHAR2(20), b_kod VARCHAR2(2), belepes DATE, fizetes NUMBER(6), premium NUMBER(6), t_kod VARCHAR2(2) / CREATE TABLE beosztas (b_kod VARCHAR2(2) b_nev VARCHAR2(20)) /
NOT NULL,
NOT NULL,
NOT NULL) NOT NULL,
INSERT INTO beosztas VALUES ('1','ELADO') / INSERT INTO beosztas VALUES ('2','SZERELO') / INSERT INTO beosztas VALUES ('3','VIZSGABIZTOS') / INSERT INTO beosztas VALUES ('4','TELEPHELYVEZETO') / INSERT INTO beosztas VALUES ('5','IGAZGATO') / INSERT INTO telephely VALUES (10,'IRODAK','BUDAPEST') / INSERT INTO telephely VALUES (20,'UJ_AUTO','BUDAPEST') / INSERT INTO telephely VALUES (30,'UJ_AUTO','GYOR') / INSERT INTO telephely VALUES (40,'UJ_AUTO','DEBRECEN') / INSERT INTO telephely VALUES (50,'HASZNALT_AUTO','BUDAPEST')
58
/ INSERT INTO telephely VALUES (60,'HASZNALT_AUTO','SZEGED') / INSERT INTO telephely VALUES (70,'DEVIZAS_AUTO','BUDAPEST') / INSERT INTO alkalmazott VALUES (1234,'KOVACS JOZSEF','1','1986-DEC-10',52000,12000,20) / INSERT INTO alkalmazott VALUES (1235,'MOLNAR PETER','2','1971-FEB-08',72000,NULL,30) / INSERT INTO alkalmazott VALUES (1236,'CSIKOS BELA','1','1985-MÁR-12',53000,15000,30) / INSERT INTO alkalmazott VALUES (1237,'TOTH ARPAD','3','1980-ÁPR-22',80000,NULL,20) / INSERT INTO alkalmazott VALUES (1238,'NEMETH ZSOLT','4','1983-NOV-28',116000,14000,30) / INSERT INTO alkalmazott VALUES (1239,'SZABO JOZSEF','5','1977-MÁJ-01',216000,75000,10) / INSERT INTO alkalmazott VALUES (1240,'BALOGH IMRE','2','1983-JÚN-09',88000,5000,50) / INSERT INTO alkalmazott VALUES (1244,'KIRALY JANOS','3','1980-AUG-04',84000,8000,40) / INSERT INTO alkalmazott VALUES (1245,'HERCEG EVA','1','1984-NOV-12',44000,6000,40) / INSERT INTO alkalmazott VALUES (1246,'BOGNAR JUDIT','1','1979-OKT-08',52000,6000,50) / INSERT INTO alkalmazott VALUES (1247,'HALASZ PETER','2','1981-MÁJ-23',84000,7000,60) / INSERT INTO alkalmazott VALUES (1248,'HORVAT PAL','4','1981-DEC-09',100000,12000,60) / INSERT INTO alkalmazott VALUES (1249,'KISS ANNA','1','1971-DEC-23',50000,9500,40) / commit / --exit
59