kategória | ||||||||||
|
||||||||||
|
||
Gyakorlat: 838i86i
Váltson adatlap nézetre és vigye be a következő adatsorokat az Ügyintéző táblába:
Törzsszám |
Ügyintéző neve |
Osztálykód |
|
Piri |
|
|
Józsi |
|
|
Anikó |
|
|
Elemér |
|
|
Zoltán |
|
(Számláló) |
|
|
Megfigyelhetők:
¾ A Törzsszámot nem kell (nem is lehet) bevinni, mert az ACCESS által automatikusan osztott sorszám.
¾ Az Osztálykód mezőbe az ACCESS nem enged 3 pozíciónál hosszabb szöveget bevinni, annak megfelelően, hogy a mezőméret=3. Egyébként egyelőre bármilyen értéket megadhatunk ebben a mezőben.
Feltételezzük, hogy az Ügyintéző tábla ablakán áll adatlap nézetben.
Gyakorlat: 838i86i
Módosítsa a 3-as törzsszámú ügyintéző osztálykódját 100-ra!
Művelet:
Egyszerűen felülírja a megfelelő adatsorban az Osztálykód mező értékét.
Stop! Próbálja meg módosítani (felülírni) valamelyik adatsorban a Törzsszám mező értékét. - Az ACCESS ezt a módosítást nem engedi meg (pontosabban nem veszi figyelembe). Ennek logikusan legalább két oka lehet: 1. a Törzsszám a tábla elsődleges kulcsa; 2. a Törzsszám az ACCESS által osztott (és ezért nem a felhasználó által nem írható) számláló. - Nos, az ACCESS-nél csak az utóbbi ok áll fenn. Később látni fogja, hogy az ACCESS az elsődleges kulcs módosítását is megengedi, ha az nem számláló mező, és ha a módosítás éppen nem sért valamilyen hivatkozás-integritási korlátot; sőt egy adott rekord kulcsa módosításának következményeként más, vele kapcsolatban álló rekordok is automatikusan módosulhatnak (lásd 5.2-ben).
Stop! Az ACCESS-ben az adatértékek módosításának eltárolásához (vagy adatrekord törlésének érvényesítéséhez) nem szükséges alkalmazni a "Mentés" műveletet, az automatikusan végrehajtódik. Explicit mentésre csak a tábla definíciójának változásakor van szükség.
Gyakorlat: 838i86i
Törölje (távolítsa el az Ügyintéző táblából) a 3-as törzsszámú ügyintéző rekordját!
Műveletek:
A sorkurzorral álljon a megfelelő adatsorra az Ügyintéző táblában!
Válassza ki a "Szerkesztés" menüből a "Rekord törlése" menüpontot
vagy
kattintson a "Rekord törlése" eszközikonra!
A törlés tényére figyelmeztető üzenet jelenik meg. A "Biztosan törölni szeretné a rekordokat?" kérdésre a megerősítő Igen gombra kattintás válasszal véglegesítheti a törlést.
Stop! Az ACCESS nem mindig engedi meg egy adott sor törlését; máskor meg egy adott sor törlésének következményeként más, vele kapcsolatban álló sorok is törlődnek (lásd 5.2-ben).
Gyakorlat: 838i86i
Kapcsolja be a 2.5 pont szerint definiált szűrőt a "Szűrés" eszközikonra kattintással. Figyelje meg, mit lát az adatlapon!
Kapcsolja be a 2.5 pont szerint definiált szűrőt és rendezést a "Rekordok" menü "Szűrés/Rendezés" menüpontjának kiválasztásával. Figyelje meg, hogyan változott meg az adatlap tartalma!
Próbálja ki, hogy az előbbiek szerint beállított szűrés mellett be tudja-e vinni a táblába a következő új sort:
Törzsszám |
Ügyintéző neve |
Osztálykód |
|
Rózsi |
|
Érvényes-e a szűrő hatása a bekapcsolása után bevitt sorokra?
Gyakorlat: 838i86i
Kapcsolja be ismét a 2.5 pont szerint definiált szűrőt és rendezést a "Rekordok" menü "Szűrés/Rendezés" menüpontjának kiválasztásával.
Kapcsolja ki csak a szűrőt a "Szűrő eltávolítása" (azaz a benyomva látszó "Szűrés") eszközikonra kattintással. Figyelje meg, mit lát az adatlapon!
Kapcsolja ki a rendezést (is) a "Rekordok" menü "Szűrés/Rendezés törlése" menüpontjának kiválasztásával. Figyelje meg, mit lát az adatlapon!
Foglaljuk össze a szűrés és rendezés be-, illetve kikapcsolására vonatkozó tapasztalatokat!
¾ Mind a szűrés, mind a rendezés csak akkor fejtik ki hatásukat, ha be vannak kapcsolva.
¾ A szűrés csak a megjelenítésre van hatással, az adat bevitelre nem. A bekapcsolt szűrés mellett is bevihetők olyan adatsorok, amik a szűrőfeltételeket nem elégítik ki.
¾ A "Rekordok" menü "Szűrés/Rendezés" menüpontjának kiválasztása egyszerre bekapcsolja a szűrést és rendezést is.
¾ A "Rekordok" menü "Szűrés/Rendezés törlése" menüpontjának kiválasztása egyszerre kikapcsolja mind a szűrést, mind a rendezést.
¾ A "Szűrés/Szűrő eltávolítása" eszközikonra kattintással csak a szűrés kapcsolható be/ki.
¾ Ha a táblatulajdonságok közül csak a rendezést akarjuk bekapcsolni, a következő két lépésben megtehető: a "Rekordok" menü "Szűrés/Rendezés" menüpontjának kiválasztása, majd a (benyomva látszó) "Szűrés/Szűrő eltávolítása" eszközikonra kattintással a szűrés kikapcsolása.
Feltételezzük, hogy az Ügyintéző tábla meg van nyitva, annak ablaka aktív, adatlap nézetben van és sem a szűrő, sem a rendezés nincs bekapcsolva.
Gyakorlat: 838i86i
Rendezze az Ügyintéző táblát egyszerűen névsor szerint!
Műveletek:
Álljon kurzorral az Ügyintézőnév oszlopra (bármely sorban).
Kattintson a "Rendezés - növekvő" eszközikonra;
vagy
válassza ki a "Rekordok" menü "Rendezés" almenüjének "Rendezés - növekvő" menüpontját.
Figyelje meg, hogyan változott a megjelenített adattartalom!
Menjen át tervező nézetbe és nézze meg, milyen bejegyzés szerepel az Ügyintéző tábla Redezés tulajdonságában!
Gyakorlat: 838i86i
Menjen vissza adatlap nézetbe (ehhez előbb kénytelen lesz elmenteni a táblát, - pontosabban annak megváltozott definícióját) és kapcsolja ki a rendezést!
Művelet:
Ki kell választani a "Rekordok" menüből a "Szűrés/Rendezés törlése" menüpontot.
Gyakorlat: 838i86i
Most tegyük fel, hogy ismét szeretné bekapcsolni a legutóbbi rendezést, de már nem emlékszik rá, hogy az milyen volt.
Műveletek:
Ki kell választani a "Rekordok" menüből a "Szűrés/Rendezés" menüpontot.
Figyelje meg, mi látható!
Kattintson a "Szűrés eltávolítása" eszközikonra!
Miért kellett a "Szűrés eltávolítása" eszközikont alkalmazni?
Hogyan lehetne megoldani, hogy ha csak a legutolsó rendezést akarja (a szűrést viszont nem), akkor a "Szűrés/Rendezés" menüpont kiválasztása után ne kelljen alkalmazni a "Szűrés eltávolítása" eszközikont? (Táblatulajdonságok!)
Gyakorlat: 838i86i
Most tegyük fel, hogy (adatlap nézetben) az Ügyintéző tábla minden sora megjelent (ha nem így lenne, kapcsolja ki a szűrést és a rendezést). Ebből az állapotból indulva érje el, hogy pontosan azok az ügyintézők jelenjenek meg, akik a 110-es osztályhoz tartoznak!
Műveletek:
Álljon a tábla Osztálykód oszlopában egy olyan sorra, amiben az érték éppen '110'!
Kattintson a "Szűrés kijelöléssel" eszközikonra!
Figyelje meg az eredményt!
Menjen át tervező nézetbe és nézze meg, milyen bejegyzés szerepel az Ügyintéző tábla Szűrő tulajdonságában!
Menjen vissza adatlap nézetbe (ehhez előbb kénytelen lesz elmenteni a táblát) és kapcsolja ki a szűrést ("Szűrő eltávolítása" eszközikon), majd ismét kapcsolja be a szűrést ("Szűrés" eszközikon).
Foglaljuk össze a szűrés és rendezés beállításával kapcsolatos eddigi tapasztalatokat.
¾ Bármilyen módon állítunk be szűrőt vagy rendezést egy táblára, azt az ACCESS úgy jegyzi, meg mintha azt a táblatulajdonságok között adtuk volna meg (az ott megadottakat a legutolsó beállítással felülírja).
¾ Az előbbi megállapítással összhangban bármilyen módon utoljára beállított szűrő vagy rendezés úgy kapcsolható be/ki a "Szűrés/Rendezés", "Szűrés/Rendezés törlése" menüpontokkal, valamint a "Szűrés/Szűrő eltávolítása" eszközikonnal, mint azt a 4.3-ban már megismertük.
¾ Ha azt akarjuk, hogy az ACCESS végleg elfelejtse az adott táblára beállított szűrőt vagy rendezést, akkor ezt a táblatulajdonságok "Szűrő", illetve "Rendezés" bejegyzéseinek törlésével (üresre állításával) tudjuk elérni.
Gyakorlat: 838i86i
Most tegyük fel, hogy (adatlap nézetben) az Ügyintéző tábla minden sora megjelent (ha nem így lenne, kapcsolja ki a szűrést és a rendezést). Ebből az állapotból indulva érje el, hogy pontosan azok az ügyintézők jelenjenek meg, akik nem a 110-es osztályhoz tartoznak!
Műveletek:
Álljon a tábla Osztálykód oszlopában egy olyan sorra, amiben az érték éppen '110'.
Válassza ki a "Rekordok" menü "Szűrő" almenüjéből a "Szűrés kizárással" menüpontot.
Feltételezzük, hogy az Ügyintéző tábla meg van nyitva, annak ablaka aktív, adatlap nézetben van és sem a szűrő, sem a rendezés nincs bekapcsolva.
Gyakorlat: 838i86i
Érje el, hogy azok az ügyintézők jelenjenek meg, akinek a törzsszáma nagyobb 3-nál, és egyidejűleg az osztálykódjuk vagy 110, vagy 270; de a Józsi(k) adatsora(i) akkor is jelenjenek meg, ha nem teljesítik az előbbi feletételeket!
Műveletek:
Válassza ki a "Rekordok" menü "Szűrés" almenüjéből a "Szűrés űrlappal" menüpontot!
(A tábla ablaka átalakul: A tábla most nem adatmegjelenítésre szolgál, hanem olyan űrlapként viselkedik, amibe szűrési feltételeket lehet írni. Ezt az állapotot az ablak fejrészében az "Ügyintéző: szűrés űrlappal" felirat jelzi.)
A Törzsszám mezőbe írja: >3.
Az Osztálykód mezőbe írja: ="110" OR ="270".
Az ablak alsó részében kattintson a "vagy" fülre. - Ezzel az űrlap újabb sorát töltheti ki.
Az új sorban az Ügyintézőnév mezőbe írja: 'Józsi'.
Kattintson a "Szűrés" eszközikonra!
Figyelje meg az eredményt!
Az alábbi táblázat összefoglalja, hogyan adtuk meg a feltételeket. Az első sorban a "vagy" fülre kattintás előtt megadott feltételek, a második sorban a "vagy" fülre kattintás után megadott feltétel látható.
|
Törzsszám |
Ügyintéző neve |
Osztálykód |
|
>3 |
|
="110" OR ="270" |
vagy: |
|
'Józsi' |
|
Megállapíthatjuk:
¾ Az űrlap egy sorában, de különböző mezőiben megadott feltételek egymással logikai "és" (AND) kapcsolatban állnak:
(Törzsszám>3) AND (Osztálykód ="110" OR Osztálykód ="270")
¾ Az űrlap különböző soraiban adott feltételek egymással logikai "vagy" (OR) kapcsolatban állnak:
( (Törzsszám>3) And (Osztálykód ="110" OR Osztálykód ="270") ) OR
(Ügyintézőnév='Józsi')
Stop! A Törzsszám>3 feltételben a 3-as határoló jelek nélkül áll, míg más adatok - "110" vagy 'Józsi' - idézőjelben, vagy aposztrófok között állnak a feltételekben. Ennek az az oka, hogy a Törzsszám szám típusú adat, míg a másik kettő szöveg típusú.
Stop! A feltételek beírása közben az űrlap mezői kombinált listaként viselkednek, azaz belőlük lenyitható az adott mező előforduló értékeinek listája. Így, ha valamely mezőre egyetlen értékkel való egyenlőséget akarunk feltételként előírni (például "Józsi"), a feltétel-értékeket a közvetlen beírás helyett a lehúzott listából is ki lehet választani.
Stop! Bonyolult szűrési feltételek adhatók meg az "Irányított szűrés" menüpont alkalmazásával. Ezzel azonban a 4.6 pontban foglalkozunk, mert az irányított szűrés megadása teljesen egyezik az egy táblán alapuló lekérdezések tervezőrácson való definiálásával. Ez olyannyira igaz, hogy egy irányított szűrést be lehet tölteni egy (ugyanazon táblára vonatkozó) lekérdezés definíciójából, illetve el lehet menteni lekérdezés definíciójaként.
Gyakorlat: 838i86i
Feltételezzük, hogy az Ügyintéző tábla meg van nyitva, annak ablaka aktív, adatlap nézetben van és sem a szűrő, sem a rendezés nincs bekapcsolva. Érje el, hogy a tábla sorai a következő rendezettségben jelenjenek meg: A fő rendezés legyen csökkenő (pontosabban nem növekvő) Osztálykód szerinti, azon belül pedig a rendezettség legyen növekvő (pontosabban nem csökkenő) Ügyintézőnév szerinti.
Műveletek:
Váltson tervező nézetre.
Kattintson a "Tulajdonságok" eszközikonra.
A megjelenő táblatulajdonságok ablakban a "Rendezés" rovatba írja: Osztálykód DESC, Ügyintézőnév.
Stop! Az Osztálykód mezőnév után álló DESC toldalék csökkenő (pontosabban nem növekvő) rendezési sorrendet jelöl (descending).
Stop! Mivel az Ügyintézőnév szerinti rendezés nem az egész táblára, hanem csak az azonos osztályba tartozó ügyintézők csoportjára vonatkozik, az ilyen rendezést hierarchikus rendezésnek mondjuk.
Gyakorlat: 838i86i
Nézze meg, hogy a 4.5 pontban utoljára adott szűrés és rendezés definíciója hogyan adható meg irányított szűrésként! (Feltesszük, hogy az Ügyintéző tábla ablaka aktív.)
Műveletek:
Válassza ki a "Rekordok" menü "Szűrő" almenüjéből az "Irányított szűrés/rendezés." menüpontot!
Egy ablak jelenik meg, aminek felső részében egy doboz képviseli azt a táblát, amire szűrőt akarunk definiálni, az alsó részében pedig egy tervezőrács található. A tervezőrácsban éppen az utoljára megadott szűrő és rendezés definíciója látható.
Mező: |
Osztálykód |
Ügyintézőnév |
Törzsszám |
|
Rendezés: |
Csökkenő |
Növekvő |
|
|
Feltétel |
"110" Or "270" |
|
>3 |
|
vagy: |
|
"Józsi" |
|
|
|
|
|
|
|
A tervezőrácsban egyszerű vagy hierarchikus szűrés, illetve egyszerű vagy összetett feltételek adhatók meg. A rácsban azokat a mezőket kell feltüntetni, amik vagy a rendezésben, vagy a szűrési feltételben szerepet játszanak. A rendezésben részvevő mezők közül a főbb rendezési szempontnak megfelelőnek kell előbb (balrább) állni.
A feltételek megadása tekintetében a tervezőrács erősen hasonlít az űrlappal történő szűréshez: a feltételek több sorban is megadhatók; az azonos sorban, de különböző mezőkre vonatkozóan megadott feltételek egymással AND (logikai "és") kapcsolatban állnak; a különböző sorokban álló feltételek egymással OR (logikai "vagy") kapcsolatban állnak.
Gyakorlat: 838i86i
Az irányított szűrést mentse el lekérdezésként! (Feltételezzük, hogy az irányított szűrés definiáló ablaka aktív.)
Műveletek:
Válassza ki a "Fájl" menü "Mentés lekérdezésként" menüpontját,
vagy
kattintson a "Mentés lekérdezésként" eszközikonra!
A megjelenő dialógusablakban adja meg a lekérdezés nevét, pl.: Ügyintéző_szűrő.
Az "OK" gombra kattintással hagyja jóvá az elmentést!
Gyakorlat: 838i86i
Nyissa meg az imént elmentett lekérdezést és figyelje meg a lekérdezést adatlap nézetben és tervező nézetben is!
Műveletek:
Az adatbázis ablakban tegye aktívvá a "Lekérdezések" füleslapot!
A füleslapon egyelőre egyetlen lekérdezés neve látható, azé, amit az imént mentett el: Ügyintéző_szűrő. Ezt rákattintással jelölje ki!
Kattintson a "Megnyitás" gombra!
(Az utóbbi két művelet a lekérdezés nevére való dupla kattintással helyettesíthető.)
Megjelenik az lekérdezés eredménye adatlap nézetben, semmiben sem különbözik a legutolsó szűrés eredményétől.
Váltson át tervező nézetre! (Hasonló tervezőablak jelenik meg, mint az irányított szűrésnél, de itt a tervezőrács több elemet tartalmaz.)
A szűrést definiáló, illetve a lekérdezést tervező ablakok között a következő különbségek figyelhetők meg:
¾ A lekérdezés egyidejűleg több táblára is vonatkozhat. Ez - egyebek mellett - abból látszik, hogy a tervezőrácson lehetőséget kapunk különböző táblákból vett mezők megnevezésére. A szűrés mindig egy táblára vonatkozik.
¾ A lekérdezés tervező rácsán azt is meg lehet határozni, hogy mely mezők jelenjenek meg a lekérdezés eredeményeként, illetve melyek ne jelenjenek meg. A szűrésnél a tervezőrácson a megjelenítésről nem rendelkezhetünk.
¾ A lekérdezésnél mezőként kifejezés is megadható megjelenítésre (pl.: Törzsszám*2). A szűrésnél ez nem lehetséges.
¾ A szűrésből csak egy tárolható el a bázisát képező táblával. Lekérdezésekből akárhány letárolható.
¾ Később látni fogjuk, hogy a lekérdezés viszonylagos önálló léttel bír, amin azt értjük, hogy hasonló szerepeket tölthet be, mintha maga is tábla lenne.
Stop! Amíg a lekérdezés csak egy táblából történik, addig a tervezőrácson tett rendelkezéssel a tábla valamely mezőjét a megjelenítésből kihagyni nem lehet. Erre csak adatlap nézetben vagy SQL nézetben nyílik lehetőség. Adatlap nézetben a kihagyandó oszlopon állva, a "Formátum" menüből ki kell választani az "Oszlopok elrejtése" menüpontot. (Az SQL nézettel mindjárt foglalkozunk.)
Stop! Az ACCESS lekérdezés fogalma más relációs adatbáziskezelők view fogalmának felel meg. A lekérdezés lényegében egy virtuális tábla, azaz olyan származtatott tábla, ami fizikailag (tartósan) nem létezik, csak a lekérdezés idejére áll elő fizikailag is létező táblá(k)ból vagy más lekérdezésekből. Bizonyos korlátozás mellett a lekérdezés erdeményeként megjelenő táblába utóbb a felhasználó új sorokat billentyűzhet be, illetve a megjelent sorok egyes mezőinek értékét módosíthatja. Ezek a változtatások ténylegesen a lekérdezés forrását képező valalmelyik valódi táblán hajtódnak végre.
Gyakorlat: 838i86i
Nézze meg a lekérdezést SQL nézetben!
Művelet:
Miközben a lekérdezés ablaka aktív, válassza ki az SQL nézetet!
Egy olyan ablak jelenik meg, amiben SQL parancsokat lehet szerkeszteni. Ebben az utolsó lekérdezés SQL parancsa látható:
SELECT *
FROM Ügyintéző
WHERE
((Ügyintéző.Törzsszám>3) And (Ügyintéző.Osztálykód ="110" OR
Ügyintéző.Osztálykód ="270")) OR (Ügyintéző.Ügyintézőnév='Józsi')
ORDER BY Ügyintéző.Osztálykód DESC, Ügyintéző.Ügyintézőnév;
Aki még az SQL nyelvhez nem szokott hozzá, annak egy lekérdezés parancs formában való definiálása bonyolultabbnak tűnhet a grafikus felületen adott lehetőségekhez képest. Ám ezt is meg lehet szokni, illetve a számítógépes rendszerek fejlesztőinek illik jól ismerni az SQL parancsoknak mind az önállóan alkalmazható alakjait, mind a programnyelvekbe beágyazható formáit.
A lekérdezést definiáló SQL parancsban a SELECT kulcsszó után a megjelenítendő mezők neveit, illetve kifejezéseket lehet felsorolni. A * egy adott tábla összes mezőjének megjelenítését kéri.
A FROM kulcsszó után kell megadni a forrástábla nevét, illetve több forrástábla, esetleg forrás-lekérdezés neveinek felsorolását.
A WHERE kulcsszó után kell megadni a feltételt logikai kifejezés formájában.
Az ORDER BY záradékban egyszerű vagy hierarchikus rendezés írható le.
Stop! A példa szerinti SQL parancsot az ACCESS állította össze. Ennek megfelelően számos felesleges elemet tartalmaz. Mivel a FROM rész csak egyetlen forrástáblát nevez meg, a parancsból minden mezőnév elől elhagyható az "Ügyintéző." minősítés. - Néhány zárójel is felesleges a WHERE részben.
Stop! Nemcsak lekérdező, hanem tábladefiniáló, adatkarbantartó SQL parancsok is léteznek. Később velük is meg fogunk ismerkedni.
Gyakorlat: 838i86i
Módosítsa úgy az SQL parancsot, hogy csak az Osztálykód és az Ügyintézőnév oszlopok jelenjenek meg a lekérdezés eredményében, majd futtassa le a lekérdezést!
Műveletek:
Módosítsa a SELECT parancsot: SELECT Osztálykód, Ügyintézőnév FROM...!
Válassza ki a "Lekérdezés" menüből a "Futtatás" menüpontot
vagy
kattintson a "Futtatás" eszközikonra!
Több táblára támaszkodó lekérdezésekről elsőként az 5.3 pontban lesz szó.
A következő gyakorlatok előkészítése céljából hozza létre az Osztály táblát az alábbi oszlopokkal:
Osztálykód: a tábla elsődleges kulcsa.
Adattípus: Szöveg.
Mezőméret: 3.
Indexelt: Igen (nem lehet azonos).
Osztálynév:
Adattípus: Szöveg.
Mezőméret: 50.
Cím: Osztály neve.
Kötelező: Igen - Azaz kötelező kitölteni (ez még megengedné a 0 hosszúságú láncot).
Nulla hosszúság engedélyezése: Nem - Azaz határozottan legalább egy nem-szóköz karakterből kell állni a névnek.
Indexelt: Nem.
Megjelenítés:
Vezérlőelem megjelenése: Beviteli mező.
Töltse fel a táblát olyan sorokkal, amik azonosítói között (egyszer) szerepeljen valamennyi osztálykód érték, amit korábban az Ügyintéző tábla feltöltésénél felhasznált.
Osztálykód |
Osztály neve |
|
Számviteli osztály |
|
Pénzügyi osztály |
|
Beszerzési osztály |
|
Értékesítési osztály |
|
Termelési osztály |
Stop! A gyakorlatban az Osztály táblát korábban kell feltölteni, mint az Ügyintéző táblát. Ugyanis, amikor az utóbbiba egy új ügyintéző adatait viszik be, ellenőrizni kell, hogy a megadott osztálykód érték szerepel-e az Osztálykód táblában nyilvántartottak között. Többek között ennek a hivatkozás-integritást megőrző ellenőrzésnek az automatizálásáról lesz szó a következő alpontokban.
Az eddig létrehozott két tábla közötti kapcsolatot fejezi ki az a tény, hogy az Osztály tábla elsődleges kulcsa az Ügyintéző tábla mezői közt is szerepel. Az ottani megjelenését idegen kulcsnak mondjuk.
Gyakorlat: 838i86i
Oldja meg, hogy amikor egy új ügyintéző adatait viszi be vagy egy ügyintéző osztályt vált, akkor az osztály kódját ne kelljen beírni az Osztálykód mezőbe, hanem azt egy listából ki lehessen választani.
Műveletek:
Az ügyintéző tábla ablakán állva váltson tervező nézetbe.
Az Osztálykód mezőt definiáló sorra állva, kattintson a "Megjelenítés" mezőtulajdonságokat megadó füleslapra, és adja meg a következő tulajdonságértékeket.
Vezérlőelem megjelenése: Lista. - Ezáltal adatbevitelkor az Osztálykód mező választéklistaként működik, de közvetlenül lehet beleírni értéket.
Sorforrás típusa: Tábla/lekérdezés. - Így a lista egy táblából vagy egy lekérdezésből veszi a választható értékeket.
Sorforrás: Osztály. - Így a lista az Osztály táblából veszi értékeit.
Kötött oszlop: 1. - Így a lista és egyben az Osztály tábla első oszlopa adja azt az értéket, ami a kiválasztáskor az Ügyintéző tábla Osztálykód mezőjében el fog tárolódni.
Oszlopszám: 2. - A lista két oszlopos lesz, éppen az Osztály tábla két oszlopát (mezőjét) fogja mutatni.
Oszlopfejlécek: Nem. - Nem kérünk fejlécet megjeleníteni a választéklista fölé.
Oszlopszélességek: Fogadja el a felajánlottakat, mert az oszlopok szélességét utólag vizuálisan könnyebben tudja a kívánt szélességűre igazítani.
Mentse el az új definíciót!
Váltson vissza adatlap nézetbe, és próbálja ki, hogyan lehet új értéket bevinni kiválasztással az Ügyintéző tábla Osztálykód mezőjébe!
Próbálja ki, lehet-e olyan értéket beírni az Ügyintéző tábla Osztálykód mezőjébe, ami nem szerepel a listából választhatók között!
Stop! Ezen a ponton lényeges különbséget nem lehet észrevenni a lista és a kombinált lista működése között. Figyelmesebb vizsgálódással egy különbség azonban mégis adódik: A kombinált lista esetében a "Csak listaelem?" kérdésre is válaszolni kell a mezőtulajdonságok megadásakor. "Igen" válasz esetén az Ügyintéző tábla Osztálykód mezőjébe bevihető értékeket csak a (kombinált) listából választható értékre vagy NULL értékre korlátozzuk.
Stop! Felmerül a kérdés, ha az Osztály táblának kettőnél több mezője lenne (például kiegészülne a Bérkeret mezővel), és azok sorrendje Osztálynév, Bérkeret, Osztálykód, akkor miként lehetne elérni, hogy úgy is csak az Osztálykód és Osztálynév mezők jelenjenek meg a listában? (A probléma az, hogy ha a sorforrás az újabb Osztály tábla lenne, és az Oszlopszám tulajdonságra 2-t adnánk meg, akkor a listában szándékaink ellenére az Osztálynév és a Bérkeret oszlopok látszanának.) - Nos, ilyenkor sorforrásként nem közvetlenül az Osztály táblát, hanem egy, abból dolgozó lekérdezést kell megadni (lásd később).
Foglaljuk össze a tapasztalatokat!
¾ Ha egy tábla valamely mezője egy másik (fölérendelt) táblából vett idegen kulcs (pl. az Ügyintéző tábla Osztálykód mezője az Osztály táblából vett idegen kulcs), akkor az ilyen mező értékének megadásakor vagy módosításakor kényelmes megoldást nyújt, ha a mező megjelenítésére olyan listát vagy kombinált listát alkalmazunk, aminek a sorforrása a fölérendelt tábla.
¾ Azonban egyedül a lista vezérlőelem nem akadályozza meg, hogy a mezőt üresen hagyjuk, vagy közvetlen beírással olyan értéket vigyünk a mezőbe, ami nem szerepel a fölérendelt tábla soraiban. Ahhoz a mezőtulajdonságoknak (lásd a 2. szakaszban) illetve a kapcsolatok tulajdonságainak (lásd 5.2-ben) megfelelő beállítása is szükséges.
¾ A kombinált lista esetében viszont van olyan beállítási lehetőség ("Csak listaelem" mezőtulajdonság), amivel a mezőbe bevihető értékeket csak a (kombinált) listából választható értékre vagy NULL értékre korlátozzuk.
Feltételezzük, hogy az Iktató adatbázis meg van nyitva. - A továbbiakban táblák közötti kapcsolatokat fogunk definiálni. A kapcsolatok létrehozását, illetve definiálását akadályozhatja, ha az érintett táblák meg vannak nyitva és valamilyen művelet által zároltak. Így a bonyodalmak elkerülése céljából jobb, ha a megnyitott táblákat bezárjuk, mielőtt rájuk vonatkozó kapcsolatokat definiálnánk.
Gyakorlat: 838i86i
Nyissa meg a grafikus kapcsolatszerkesztő ablakot az Ügyintéző tábla és az Osztály tábla kapcsolatának meghatározása céljából!
Műveletek:
Az "Eszközök" menüből válassza "Kapcsolatok." menüpontot.
A megjelenő "Tábla hozzáadása" dialógusablakban a "Táblák" füleslapon jelölje ki az Ügyintéző és az Osztály táblát és kattintson a "Hozzáadás" gombra.
Mindkét tábla hozzáadása után zárja be a "Tábla hozzáadása" ablakot a rajta lévő "Bezárás" gombbal.
(Most a "Kapcsolatok" ablak aktív, és benne egy-egy doboz képviseli a hozzáadott táblákat. A dobozokban a mezők nevei láthatók, köztük az elsődleges kulcs nevét félkövér betűk különböztetik meg.)
Stop! Ha egyidejűleg több táblát akarunk kijelölni a "Táblák" füleslapon, a táblák sorára kattintáskor tartsuk lenyomva a Ctrl billentyűt, ennek hiányában ugyanis csak az az egy tábla jelölhető ki, amire legutoljára kattintunk. - A Ctrl billentyű ilyen célra általában minden olyan esetben alkalmazható, ahol több objektum kiválasztása megengedett. - Természetesen egyenként is kijelölhetjük a hozzáadandó táblákat, de akkor mindegyikre külön-külön kell alkalmazni a "Hozzáadás" gombot.
Stop! A "Kapcsolatok" ablakban állva utóbb további táblák (sőt lekérdezések) adhatók az ablakhoz. Ez a "Kapcsolatok" menü "Tábla hozzáadása." menüpontjával kezdeményezhető.
Stop! A későbbiekben látni fogjuk, hogy sok tábla esetén a kapcsolatok áttekinthetetlen, kusza hálózatot képeznek. Azonban nem mindig szükséges az összes definiált kapcsolatot látni. Egy adott probléma elemzése szempontjából éppen érdektelen táblák kapcsolatai a "Kapcsolatok" menü "Tábla elrejtése" menüpontjának kiválasztásával tüntethetők el a "Kapcsolatok" ablakból. - Persze, megelőzően a "Kapcsolatok" ablakban rákattintással ki kell jelölni az elrejtendő táblát.
Gyakorlat: 838i86i
Hozzon létre egy, az Osztálykód mezőn alapuló kapcsolatot az Osztály és az Ügyintéző tábla között! (A "Kapcsolatok" ablak aktív.)
Műveletek:
Kattintson az Ügyintéző tábla dobozában látható Osztálykód mezőnévre és a gombot lenyomva tartva, húzza az egeret az Osztály tábla dobozában látható Osztálykód mezőnévre (ott elsődleges kulcsra), majd engedje fel az egérgombot.
A megjelenő "Kapcsolatok" dialógusablakban kattintson a "Létrehozás" gombra.
(Most a "Kapcsolatok" grafikus szerkesztő ablakban a megfelelő táblákat összekötő kapcsolóvonal képviseli az éppen létrehozott kapcsolatot.)
Stop! A "Kapcsolatok" dialógusablakban a "Létrehozás" gomb alkalmazása előtt a kapcsolat több jellemzőjét be lehetett volna állítani. Ilyen beállításokra azonban a létrehozás után is van lehetőségünk, - lásd itt egy későbbi gyakorlatnál.
Stop! Ha a "Kapcsolatok" grafikus szerkesztő ablakban a táblákat képviselő dobozok elég nagyok ahhoz, hogy bennük az Osztálykód mező neve látható legyen, akkor a kapcsolóvonal mindkét dobozra ezen mezőnév mellett "tapad" rá. - Grafikusan így jelzi az ACCESS a kapcsoló mezőt (amit az ACCESS inkább kapcsolt mezőnek hív).
Stop! Azt a táblát, amiben a kapcsoló tulajdonság idegen kulcs, az adatmodellezés (az adott kapcsolatban) alárendelt táblának, az ACCESS pedig kapcsolt táblának nevezi. Az adatmodellezésben azt a táblát, aminek elsődleges kulcsa egy adott kapcsolat kapcsoló tulajdonsága, az adott kapcsolatban fölérendelt táblának mondják. - Előfordulás-szinten hasonlóan szokás beszélni kapcsolt sorokról, illetve alárendelt sorokról.
Stop! Az ACCESS-ben lehetőség van nemcsak táblák, hanem lekérdezések közötti kapcsolatok definiálására is (lásd a későbbiekben).
Az adatmodellezési ismereteire támaszkodva válaszoljon a következő kérdésekre:
¾ Miért kell explicit módon létrehozni egy kapcsolatot?
¾ Miért nem határozta meg az Osztály és az Ügyintéző táblák közötti kapcsolatot az a tény, hogy mindkét tábla szerkezetében szerepel az Osztálykód mező?
Gyakorlat: 838i86i
Határozza meg az imént létrehozott kapcsolat jellemzőit úgy, hogy
¾ az Ügyintéző tábla Osztálykód mezőjébe csak olyan értéket engedjen bevinni az ACCESS, amilyen az Osztály tábla valamely sorában is előfordul (ezt csak akkor tudja beállítani, ha az idáig bevitt sorok is kielégítik a szabályt);
¾ az Osztály tábla valamely sorában az Osztálykód kulcs módosításakor automatikusan az Ügyintéző tábla kapcsolt soraiban is analóg módosítás hajtódjon végre az Osztálykód mezőben;
¾ az ACCESS ne engedje meg törölni az Osztály tábla valamely sorát, ha létezik az adott sornak alárendelt sor (az adott sorhoz kapcsolt sor) az Ügyintéző táblában.
Műveletek:
A "Kapcsolatok" grafikus szerkesztő ablakban kattintson duplán a kapcsolóvonalra,
vagy
a kapcsolóvonal kijelölése után válassza ki a "Kapcsolatok" menüből a "Kapcsolat szerkesztése." menüpontot.
A megjelenő "Kapcsolatok" dialógusablakban kapcsolja be (rákattintással) "Hivatkozási integritás megőrzése" opciót! (Ennek hatására az ACCESS további két opcióra vonatkozó rendelkezést is lehetővé tesz.)
Kapcsolja be a "Kapcsolt mezők kaszkádolt frissítése" opciót is.
(A "Kapcsolt mezők kaszkádolt törlése" opciót határozottan kikapcsolt állapotban kell hagyni. Figyelje meg, milyen információkat, illetve további beállítási lehetőségeket lát még a dialógusablakban!)
Kattintson az "OK" gombra a beállítások érvényesítése céljából.
A "Kapcsolatok" grafikus szerkesztő ablakban figyelje meg, hogy a kapcsolóvonal megjelenítése hogyan jelzi a "Hivatkozási integritás megőrzése" opció bekapcsolt állapotát.
Stop! Az "OK" gombra kattintással nem mindig érvényesíthetők a kapcsolat új jellemzői. Az ACCESS visszautasíthatja a változtatásokat, ha az érintett táblák más műveletek által éppen zároltak, vagy ha a kapcsolt táblába korábban olyan sorokat vittünk be, amikben a kapcsolt mező értéke hivatkozási integritást sért, azaz nem szerepel a fölérendelt tábla valamely sorában. - Tehát az ilyen akadályozó körülményeket még az imént leírt műveletek megkezdése előtt meg kell szüntetni.
Stop! A "Hivatkozási integritás megőrzése" opció bekapcsolásának hatására az ACCESS csak olyan értékeket enged bevinni az Ügyintéző tábla Osztálykód mezőjébe, ami előfordul az Osztály tábla valamely sorában, illetve megengedi még az üres értéket (NULL értéket vagy nulla hosszúságú szöveget) is. - Az utóbbit tiltó rendelkezést csak az Ügyintéző tábla Osztálykód mezőjének általános, illetve megjelenítési tulajdonságainál tehetünk. Az egyik megoldás: "Kötelező: Igen" és egyidejűleg "Nulla hosszúság engedélyezése: Nem"; a másik megoldás: "Kötelező: Igen" és egyidejűleg "Vezérlőelem megjelenése: Kombinált lista" "Csak listaelem: Igen". A "Kötelező: Igen"; "Nulla hosszúság engedélyezése: Nem" rendelkezések hatása arra az esetre is kiterjed, amikor az Ügyintéző tábla Osztálykód mezője nem kombinált lista, hanem egyszerű beviteli mező.
Stop! A "Kapcsolt mezők kaszkádolt frissítése" opció bekapcsolásának hatására az Osztály tábla valamely sorában az Osztálykód kulcs módosításakor az ACCESS automatikusan és analóg módon módosítja az Ügyintéző tábla kapcsolt soraiban az Osztálykód mező értékét.
Stop! A "Kapcsolt mezők kaszkádolt törlése" opciót kikapcsolt állapotban hagyva az ACCESS nem engedi meg törölni az Osztály tábla egy sorát, ha létezik az adott sornak alárendelt sor (az adott sorhoz kapcsolt sor) az Ügyintéző táblában.
Stop! A "Kapcsolt mezők kaszkádolt törlése" opció neve valószínűleg hibás fordítás eredménye, mert a valódi értelmét tekintve helyesebb a "Kapcsolt rekordok kaszkádolt törlése" megnevezés. - A továbbiakban mi ezt fogjuk használni.
Stop! A "Kapcsolt rekordok kaszkádolt törlése" opciónak a bekapcsolása az általunk tárgyalt kapcsolat esetében nem lenne szerencsés, mert azt jelentené, hogy egy osztály megszüntetésekor törölni kell az osztályhoz tartozott ügyintézők adatait is, dacára annak, hogy őket utóbb egy mások osztálynál mégis alkalmazzák. - Más kapcsolatoknál viszont éppen az opció bekapcsolásával lehet beállítani a kívánt működést. Például egy rendelés törlése a Rendelés táblából értelemszerűen maga után kell vonja a rendelés összes tételének a törlését a Rendeléstétel táblából.
Mit gondol, miből következtetett az ACCESS arra, hogy az Osztály és az Ügyintéző tábla kapcsolata "egy a többhöz" típusú, mint ahogy azt a "Kapcsolatok" dialógusablakban ki is nyilvánítja?
Gyakorlat: 838i86i
Az eddig tárgyalt kapcsolatra vonatkozóan próbálja ki mind a háromféle illesztés típus beállítását, közben figyelje meg, hogyan változik a grafikus ábrázoláson a kapcsolóvonal megjelenése. (A háromféle illesztés típus értelmét később a lekérdezésekkel kapcsolatos gyakorlatok teszik majd világosabbá.)
Műveletek:
A "Kapcsolatok" grafikus szerkesztő ablakban kattintson duplán a kapcsolóvonalra,
vagy
a kapcsolóvonal kijelölése után válassza ki a "Kapcsolatok" menüből a "Kapcsolat szerkesztése." menüpontot.
A megjelenő "Kapcsolatok" dialógusablakban kattintson az "Illesztés típus ." gombra!
A megjelenő "Illesztési tulajdonságok" dialógusablakban választhatja ki az illesztés típusok valamelyikét, és a "OK" gombbal kezdeményezheti annak alkalmazását.
Az előbbi pontban érintett illesztés típusok jelentése a két táblából való lekérdezésen érthető meg jobban. Annak érdekében, hogy a háromféle illesztés típus közötti különbség érzékelhető legyen, a következő állapotokat célszerű beállítani:
¾ Az Ügyintéző tábla Osztálykód mezőjére engedje meg a nulla hosszúságot (ha a mező kombinált lista vezérlőelem, akkor a mező "Kötelező (kitölteni)" vagy "Csak listaelem" tulajdonságának legalább egyikét is "Nem"-re kell állítani), és hozzon benne létre néhány olyan sort, amiben az Osztálykód üres marad.
¾ Az Osztály táblába is vigyen be néhány újabb kódú osztályt, amilyenekhez még a megadott ügyintézők egyike sem tartozik.
Tegyük fel, hogy az itt leírt előkészületek után a megfigyelés kezdetén az Ügyintéző és az Osztály táblák tartalma a következő:
Ügyintéző:
Törzsszám |
Ügyintéző neve |
Osztálykód |
|
Piri |
|
|
Józsi |
|
|
Elemér |
|
|
Zoltán |
|
|
Rózsi |
|
|
Jani |
|
|
Juci |
|
Osztály
Osztálykód |
Osztály neve |
|
Számviteli osztály |
|
Pénzügyi osztály |
|
Fejlesztési osztály |
|
Beszerzési osztály |
|
Értékesítési osztály |
|
Termelési osztály |
Gyakorlat: 838i86i
Definiáljon egy olyan lekérdezést, amiben az ügyintézők törzsszámukkal, nevükkel, valamint az osztály kódja helyett az osztály nevével jelennek meg.
Műveletek:
Az adatbázis ablakban a "Lekérdezések" füleslapot tegye aktívvá, és abban kattintson az "Új" gombra.
Az "Új lekérdezés" dialógusablakban válassza a tervező nézetet, és kattintson az "OK" gombra. (A lekérdezést definiáló ablak jelenik meg üresen, és éppen az üres állapot miatt az ACCESS a "Tábla hozzáadása" ablakot is felhozza.)
A "Tábla hozzáadása" ablakban jelölje ki mind az Ügyintéző, mind az Osztály táblát, és kattintson a "Hozzáadás" gombra.
Zárja be a "Tábla hozzáadása" ablakot. (Figyelje meg, mit lát a lekérdezést tervező ablak felső részében!)
Duplán kattintson a két tábla közötti kapcsolatot képviselő vonal középső részére, és a megejelenő "Illesztési tulajdonságok" ablakban válassza ki az első lehetőséget ("1. Csak olyan mezők keröljenek bele, amelyeknél az illesztett mezők mindkét táblában egyenlőek."), majd "OK".
A tervezőrács részben a "Mező:" feliratú sorban az első oszlopban válassza ki az Ügyintéző.Törzsszám mezőt, a második oszlopban az Ügyintéző.Ügyintézőnév mezőt, a harmadik oszlopban az Osztály.Osztálynév mezőt. (A "Megjelenítés" sorban az ACCESS automatikusan mindhárom mezőre bekapcsolja a megjelenítést. Fogadja el. Rendezést egyelőre ne kérjen.)
Futtassa le a lekérdezést, azaz válassza ki a "Lekérdezés menü" menü "Futtatás" menüpontját,
vagy
kattintson a "Futtatás" eszközikonra.
Stop! A műveletsor leírásában lényeges volt, hogy a kapcsolatot képviselő vonal középső részére kattintást említette, mert a kapcsolóvonalak végéhez közeli kattintás nem az "Illesztési tulajdonságok", hanem a "Lekérdezés tulajdonságai" dialógusablakot hozza fel.
Stop! A lekérdezés futtatása helyettesíthető az adatlap nézetre váltással.
A kapott eredmény valami ilyesmi:
Ügyintéző:
Törzsszám |
Ügyintéző neve |
Osztály neve |
|
Piri |
Pénzügyi osztály |
|
Józsi |
Beszerzési osztály |
|
Elemér |
Pénzügyi osztály |
|
Zoltán |
Értékesítési osztály |
|
Rózsi |
Számviteli osztály |
(A lekérdezés eredményén nem jelentek meg azok az ügyintézők, akik nem tartoznak egyik osztályhoz sem; illetve nem jelentek meg azok az osztályok, amikhez egyetlen ügyintéző sem tartozik.)
Nézze meg az imént definiált lekérdezést SQL nézetben! (Ugyanott választható ki, ahol az adatlap nézet vagy tervező nézet.)
Amit lát:
SELECT Ügyintéző.Törzsszám, Ügyintéző.Ügyintézőnév, Osztály.Osztálynév
FROM Osztály INNER JOIN Ügyintéző ON
Osztály.Osztálykód = Ügyintéző.Osztálykód;
Ebben most a FROM záradék az érdekes, ami szerint a lekérdezés forrása az Osztály és az Ügyintéző táblák olyan INNER JOINja (belső összekapcsolása), ami a közös Osztálykód mezőbeli értékek egyenlőségén alapul.
Gyakorlat: 838i86i
Próbálja ki a "2. 'Osztály' MINDEN rekordja és 'Ügyintéző' csak azon rekordjai, ahol az illesztett mezők azonosak." illesztési lehetőséget! - Mi az eredménye? Hogy néz ki SQL nézetben?
Műveletek:
Menjen vissza tervező nézetbe.
A lekérdezésben szerepet játszó táblák kapcsolatára hozza fel az "Illesztési tulajdonságok" ablakot, abban válassza ki a 2. lehetőséget, majd "OK".
Futtassa le a lekérdezést!
Az eredmény:
Törzsszám |
Ügyintéző neve |
Osztály neve |
|
Piri |
Pénzügyi osztály |
|
Józsi |
Beszerzési osztály |
|
Elemér |
Pénzügyi osztály |
|
Zoltán |
Értékesítési osztály |
|
Rózsi |
Számviteli osztály |
|
|
Fejlesztési osztály |
|
|
Termelési osztály |
(A lekérdezés eredményén nem jelentek meg azok az ügyintézők, akik nem tartoznak egyik osztályhoz sem; viszont megjelent az összes osztály.)
Nézze meg az imént definiált lekérdezést SQL nézetben! Amit lát:
SELECT Ügyintéző.Törzsszám, Ügyintéző.Ügyintézőnév, Osztály.Osztálynév
FROM Osztály LEFT JOIN Ügyintéző ON Osztály.Osztálykód = Ügyintéző.Osztálykód;
Gyakorlat: 838i86i
Próbálja ki a "3. 'Ügyintéző' MINDEN rekordja és 'Osztály' csak azon rekordjai, ahol az illesztett mezők azonosak." illesztési lehetőséget! - Mi az eredménye? Hogy néz ki SQL nézetben?
Az eredmény:
Törzsszám |
Ügyintéző neve |
Osztály neve |
|
Piri |
Pénzügyi osztály |
|
Józsi |
Beszerzési osztály |
|
Elemér |
Pénzügyi osztály |
|
Zoltán |
Értékesítési osztály |
|
Rózsi |
Számviteli osztály |
|
Jani |
|
|
Juci |
|
SQL nézetben:
SELECT Ügyintéző.Törzsszám, Ügyintéző.Ügyintézőnév, Osztály.Osztálynév
FROM Osztály RIGHT JOIN Ügyintéző ON Osztály.Osztálykód = Ügyintéző.Osztálykód;
Találat: 2336