Többtáblás
adatbázisok kezelése - Delphi
Amikor adatbázisokat hozunk létre, akkor a legritkább esetben tartalmaznak azok egy táblát. Az adatbázis-kezelés során alapvető fontosságú, hogy a táblák legalább 3. normálformában legyenek. Ezt úgy tudjuk elérni, hogy a tárolandó tulajdonságainkat széjjelbontjuk, és külön-külön táblában tároljuk. Annak érdekében, hogy a tulajdonságok között meglegyen a kapcsolat, szükség van olyan tulajdonságokra, amelyek ezt a feladatot képesek megvalósítani. Minden táblának tartalmaznia kell egy olyan tulajdonságot, amely minden egyes rekordban más és más értéket vesz fel, vagyis alkalmas az elsődleges kulcs szerepének az ellátására. Ha ez y tulajdonság egy másik táblában is szerepel, akkor ezek összerendelésével már meg is valósítottuk a kapcsolatot. Ezek a kapcsolatok fogják a táblákban lévő megfelelő sorokat összerendelni, amit azután lekérdezésekben, vagy jelentésekben tudunk láthatóvá tenni. A cikkben megvizsgáljuk, hogy Delphi alatt hogyan lehet az ilyen adatbázisokat kezelni. Az egyszerűség kedvéért a Delhi-ben található mintaadatbázist fogjuk használni.
Amikor elkészítünk egy olyan adatbázist, amelyben több tábla is van, akkor azokat indexelni kell azon mezők alapján, amelyek majd a kapcsolat létrehozásában szerepet fognak játszani. Ha megnézzük a DBDEMOS adatbázisban található ORDERS.DB és CUSTOMER.DB táblákat, akkor láthatjuk, hogy az ORDERS.DB indexelve van a CustNo mező alapján. Ez fogja a kapcsolatot létrehozni. Az előbbi táblában tároljuk a megrendeléseket, míg az utóbbiban a megrendelőket. Minden megrendelőhöz hozzátartoznak a megrendeléseik, amelyeket külön táblában helyezünk el. Minden megrendelőnek egyedi azonosítója (CustNo) van, ez alapján indexelve is van a tábla. Az megrendelések táblában minden egyes megrendelés adatai egy külön rekordban kerülnek tárolásra és a CustNo mezőt annyiszor ismételjük, amennyi megrendelése az adott partnernek van. Így a megrendelés táblában található tételeket a CustNo mező alapján már le tudjuk válogatni.
A táblák összekapcsolására a Delphi-ben úgynevezett Master-Detail kapcsolatot kell a megfelelő táblapárok között létesíteni. A főtábla, amely alapján a leválogatást meg fogjuk oldani, lesz a Master, míg amelyben a leválogatást végrehajtjuk, lesz a Detail tábla. Ez utóbbit kell a kapcsolatot megvalósító mező alapján indexelni. Ehhez használjuk az IndexName tulajdonságot, ahol a legördülő listából lehet a rendelkezésre álló indexek közül választani.
Ezek után már létrehozhatjuk a kapcsolatot, amit nagyon egyszerűen a táblák tulajdonságpaneljén el tudunk végezni. A megrendelések táblában (ORDERS.DB) be kell állítani a MasterSource tulajdonságot a CUSTOMER.DB táblához tartozó DataSource komponens nevére. Ezt követően meg kell adni a MasterField tulajdonságban annak a mezőnek az értékét, amelyet a kapcsolatban használni szeretnénk. Itt elegendő megadnunk a CustNo mezőt, de használhatjuk a kapcsolatszerkesztőt is, ami elérhető a beviteli mező után elhelyezett nyomógombbal.
A kapcsolatszerkesztő ablaka
Ebben a Detail Fields és a Master Fields listából kiválasztjuk azt a mezőt, amely a kapcsolatot létrehozza, majd az Add gombbal definiáljuk a kapcsolatot.
Amikor ezt a három tulajdonságot beállítottuk, tulajdonképpen végeztünk is a feladattal, ugyanis a kapcsolat máris létrejött. A működést tesztelhetjük, ha a táblák tartalmát megjelenítjük egy-egy DBGridben. Ha futtatjuk a programot, akkor a Customer táblában lépkedve mindig az adott partner azonosítójának megfelelő rekordok fognak az Orders listában látszani.
Ezzel a Delphi alapok végére értünk. Most már a kezdeti lépéseken mindenki túl van, tehát elkezdődhet a programozási nyelv mélyebb elsajátítása. Sok sikert kívánok mindenkinek hozzá!
Markó Imre - marko.imre@akribisbt.hu