Hozzunk létre egy új mappát, programunk számára. A mappán belül pedig egy újabb mappát, az adatbázis számára.
Három adattáblát fogunk használni. Nyilvántartjuk az orvosokat, betegeket, valamint a betegek vizsgálatait, panaszokkal, diagnózisokkal és javallatokkal együtt.
A Magyarországon működő háziorvosi rendszert próbáljuk meg feldolgozni, ahol egy beteg egy háziorvoshoz tartozik.
Az adatbázis kialakítása szempontjából a beteg alá van rendelve az orvosnak, a vizsgálatok pedig alá vannak rendelve a betegeknek. Ezek master – detail kapcsolatokat fognak alkotni.
A szükséges adatszerkezet a következő. (A táblázatokban a paradox-nak megfelelő elnevezéseket használjuk, úgy ahogyan azok a DatabaseDesktop segédprogramban szerepelnek.)
Orvosok.db
| Field Name |
Type |
Size |
| Okod |
Autoincremet |
- |
| ONev |
Alpha |
100 |
| Jelszo |
Alpha |
15 |
Másodlagos index: ONev alapján.
OKod: Orvos kódja. Kulcsmező a táblában.
ONev: Orvos neve.
Jelszo: Az orvos bejelentkezéséhez szükséges jelszó.
Betegek.db
| Field Name |
Type |
Size |
| BKod |
Autoincrement |
- |
| OKod |
Long Integer |
- |
| BNev |
Alpha |
100 |
| AnyjaNeve |
Alpha |
100 |
| IRSZ |
Alpha |
4 |
| Telepules |
Alpha |
50 |
| Cim |
Alpha |
100 |
| SzulIdo |
Date |
- |
| SzulHely |
Alpha |
50 |
| Telefon |
Alpha |
15 |
Másodlagos index: OKod, BNev alapján.
BKod: Beteg kódja. Kulcsmező a táblában.
OKod: A beteg orvosát azonosítja az Orvosok.db táblában.
BNev: Beteg neve.
AnyjaNeve: Beteg anyja neve.
IRSZ, Telepules, Cim: A beteg lakcím adatai.
SzulIdo: Beteg születési ideje.
SzulHely: Beteg születési helye.
Telefon: Telefonszám, amin a beteget esetleg el lehet érni.
Vizsgalat.db
| Field Name |
Type |
Size |
| RKod |
Autoincrement |
- |
| BKod |
Long Integer |
- |
| Megjelent |
Date |
- |
| Panasz |
Memo |
240 |
| Diagnozis |
Memo |
240 |
| Javallat |
Memo |
240 |
Másodlagos index: BKod, Megjelent alapján.
RKod: Kulcsmező a táblában.
BKod: A beteget azonosítja a Betegek.db táblában.
Megjelent: Dátum, amikor a beteg megjelent az orvosnál.
Panasz: A beteg panaszai.
Diagnozis: Az orvos által felállított diagnózis.
Javallat: Az orvos által javasolt kezelés, gyógyszerek, stb.
Paradox tábla létrehozása
A táblák létrehozásához használjuk a Delphi-hez mellékelt DatabaseDesktop segédprogramot.
Válasszuk File – New – Table menüpontot. Megjelenik egy kis ablak, amely alapértelmezés szerint, a Paradox 7-es adattábla típust kínálja fel. Ezt fogadjuk el az OK gombbal.
Ismét megjelenik egy újabb ablak, amelyben az adattábla szerkezetét kell megadnunk, úgy ahogy azok a fenti táblázatokban láthatóak.
Adattáblák használatakor célszerű minden táblában létrehozni egy kulcsot, amely egyértelműen azonosítja a tábla egy rekordját. Paradox táblák esetén a kulcsot *-al jelezzük a Key mezőben. Kulcsmező csak az első helyen állhat. Ha összetett kulcsot akarunk használni, akkor egymás alatt több sorban is elhelyezhetünk csillagokat.
A kulcs egy olyan mező, amelyben egy adott értékből csak egyetlenegy szerepelhet, erre a programok készítése során majd vigyáznunk kell.
A táblák rekordjainak rendezése a megadott kulcsok szerint történik. Lehetőségünk van más elrendezések létrehozására is. Ezeket másodlagos indexeknek nevezzük. Ezeket használjuk majd arra, hogy például a betegek név szerint jelenjenek meg majd a listákban.
Másodlagos index létrehozásához válasszuk a Table properties ComboBox, Secondary Indexes elemét, majd kattintsunk a Define feliratú gombra.
A Define Secondary Index ablakban, az Index fields listába kell kijelölni azokat a mezőket, amelyekből az adott indexet létre akarjuk hozni. Egy index állhat egyetlen, vagy akár több mezőből is. Ha kiválasztottuk a mezőket, akkor az OK gomb megnyomása után, és egy név megadása után létrejön az index.
Egy ilyen adatokat tároló program esetében fontos, hogy kívülről ne tudja mindenki módosítani az adatokat. Lehetőségünk van a táblákat jelszóval ellátni. Jelszó megadásához az előbb említett ComboBox-ban válasszuk a Password Security elemet, majd kattintsunk a Define gombra. Adjuk meg a jelszót, majd az OK gomb lenyomásával fogadjuk el azt. Ezt tegyük meg az összes táblánál. A mellékelt példaprogramban az adattáblák kódja „animare”.
Ha megalkottuk egy tábla szerkezetét, a Save As gomb lenyomásával mentsük el a létrehozott Data könyvtárunkba, majd hozzuk létre a többi táblát is.
Az adattáblák használatához elengedhetetlen lesz némi védelem. Figyelnünk kell a master – detail kapcsolatra, a megfelelő formátumú értékekre (pl.: dátum mező), és arra, hogy a kulcsokat véletlenül se kettőzzük.
A védelem során megtehetjük azt, hogy tábla szintű védelmet hozunk létre, így a programban csak a megfelelő hibaüzeneteket kell majd kezelnünk. A másik lehetőség, hogy programunkban adatfelvitel és módosítás előtt ellenőrizzük az adatokat. Az utóbbi a kényelmesebb, és több lehetőséget nyújtó megoldás, ezt fogjuk alkalmazni.
A táblákat azért láttuk el jelszavas védelemmel, hogy kívülről ne lehessen az adatokat módosítani és megnézni. A táblához rendelt jelszavak kezelését majd programból végezzük el a háttérben.
Master-detail kapcsolatok
A master-detail kapcsolatokat arra használhatjuk, hogy ha például az orvosok táblában kiválasztunk egy személyt, akkor a betegek táblában már csak a hozzá tartozó betegek szerepeljenek. A többi beteg adatai ilyenkor olyanok, mintha ott sem lennének. Ugyanez a helyzet a betegekkel, és az orvosnál tett látogatásaikkal (vizsgalat.db tábla).
A kapcsolat létrehozásának feltétele, hogy két táblát valamilyen kulcsmező alapján össze tudjunk kötni, valamint, hogy az adott kulcsmező mindkét táblában indexként szerepeljen. Az orvosok és a betegek esetében ez a mező az OKod.
A kapcsolatot a Delphi DataModul-ja segítségével hozzuk létre.
Indítsuk el a Delphi-t, kezdjünk egy új alkalmazást, hozzunk létre egy új DataModule-t, majd az egészet mentsük el abba a könyvtárba, amit a program számára létrehoztunk.
A DataModul-t nevezzük el DM-nek, hogy ne kelljen annyit gépelnünk. Helyezzünk el rajta három Table és három DataSource komponenst, ezeket kössük is össze.
A táblákat egyelőre jelszó védi. A program futása során a táblák megnyitását forráskódból fogjuk vezérelni, így a jelszó használat a felhasználót nem érinti.
Ahhoz, hogy a master-detail kapcsolatokat definiáljuk, most mégis meg kell nyitnunk a táblákat szerkesztési időben, de csak ideiglenesen.
Szerkesztési időben a táblák elérési útját relatívan adjuk meg. A Table komponens, TableName property-jének adjuk meg az adott tábla eléréséhez szükséges elérési utat és a tábla nevét. Ha a programunk és a létrehozott adattáblák az ismertetett könyvtárakban találhatóak, akkor ez a relatív elérési út a következő pl.:
Előfordulhat, hogy az elérési utat helyesen adjuk meg, de a Delphi mégsem találja a táblát. Ilyenkor mentsük el munkánkat, zárjuk be a Delphi-t, majd nyissuk meg újra.
A Table komponensek Active property-jét állítsuk True-ra. Nyissuk meg a Data Diagram ablakot. Ezt a Delphi 5-ben és 6-ban különböző módon tehetjük meg. Delphi 5 - a DataModul ablakban kattintsunk a Data Diagram fülre. Delphi 6 – a DataModule-hoz tartozó forráskód szerkesztő ablakban (lent) kattintsunk a Diagram fülre.
Delphi 5–ben az ablak bal oldaláról, Delphi 6-ban az Object Inspector ablakból, Drag and Drop módszerrel húzzuk át az adattáblákat a Diagram ablakba.
A három adattáblát egy-egy téglalap szemlélteti.
Az ablakban található néhány ikon, válasszuk a Master Detail feliratút. Ha rákattintunk, a kurzorból egy kereszt lesz. Vigyük a keresztet az orvosok tábla fölé, tartsuk lenyomva az egér bal gombját, húzzuk a keresztet a betegek tábla fölé, majd engedjük el. Olyan mintha egy rajzprogramot használnánk, és egy vonalat akarnánk húzni.
Megjelenik egy új ablak, ahol meg kell adnunk az összeköttetést biztosító mezőket. Az orvos – beteg kapcsolat esetén ez az OKod mező. A ComboBox-ban válasszuk az IOKod indexet. Mindkét listában jelöljük ki az Okod mezőt, majd kattintsunk az Add feliratú gombra.
Ekkor a Joined Fields listában megjelenik az OKod -> OKod felirat. Kattintsunk az OK gombra.
Ugyanezt a műveletet a vizsgalat és a betegek táblákkal is meg kell tennünk. A vonalat a betegek táblából húzzuk a vizsgalat táblára, összekötő mezőként a BKod mezőt adjuk meg, mindkét helyen.
Ezzel a master-detail kapcsolatokat meghatároztuk.