|
A megvalósításhoz a Delphi5 vagy ennél magasabb verzió szükséges. Ha azonban megelégszünk a Dbase adatbázissal a rendszerhez, akkor a közreadott példa akár Delphi 4-el is használható. Ez esetben persze el kell távolítani az MS SQL-el kapcsolatos részeket. Delphi 5 esetében ajánlatos a Update #1 és az ADO Update telepítés, mivel az SQL szerver eléréshez ADO-t használunk, amit viszont a Delphi hibásan kezel a javítócsomagok nélkül.
A készítendő rendszerhez minimálisan az Internet Explorer 5 verzióját javasoljuk. A rendszer IE6 alatt készült és nem lett tesztelve más típusú böngészővel.
A rendszer fejlesztéséhez feltételezzük, hogy adott egy olyan számítógép (akár helyi, akár a hálózaton elérhető), melyen működőképes az Internet Information Server, esetleg a Personal Web Server. Ezek telepítésével és konfigurációjával kapcsolatban részletesebb információ található az alább hivatkozott cikkeinkben.
Szükség lesz egy gépre, melyen fut az MS SQL szerver valamely változata. Ezek lehetnek akár egy gépen is, de akár a hálózatban több gépre is elosztva. A Dbase kezeléséhez a Delphi BDE-jét használjuk, így erre is szükség van az adott gépen.
Sorozatunk első részében az adatbázisok tervezésével és létrehozásával foglalkozunk. A rendszert a számlakészítéshez elengedhetetlen funkciókkal fogjuk felruházni, így csak az alapvető adatok tárolására lesz szükség. Tárolnunk kell tehát a vevők adatait (customers tábla), szükség lesz a termékek adataira (products tábla), létrehozunk egy felhasználói táblát (userdata tábla), melyben a rendszert használható személyek neve, jelszava kap helyet és végül szükség lesz egy táblára, mely a számlák fejrész adatait tárolja (invoice tábla) és egyre, mely a számlák tételeit tárolja (invoicedetail tábla).
Nézzük sorra a táblákat, melyeket az MS SQL-ben hozunk létre, majd onnan exportáljuk Dbase-be, így a két adatbázis rendszert valójában csak egyszer kell létrehoznunk.
A létrehozáshoz az MS SQL Enterprise Manager-t használjuk. A mellékelt SQLData könyvtárban lévő adatbázist feltelepíthetjük a rendszerbe, ha a Database elemen jobb gombbal kattintunk és az All task – Attach Database menüpontot választjuk. Nézzük miként is jött létre ez az adatbázis:
Létrehozunk egy adatbázist NetInvoice névvel, majd felvesszük az alábbi táblákat.
Customers tábla
CustomerID int – egyedi azonosító a vevők részére, az Identity 1, 1
CustomerName varchar(80) – vevő neve
ContactName varchar(50) – kapcsolat tartó személy neve
PostalCode char(4) - irányítószám
City varchar(50) – település neve
Address varchar(80) – utca, hsz.
Phone varchar(50) – telefonszám
E táblában kapnak helyet a vevők adatai. Amikor számlát készítünk, akkor majd egy listából választhatjuk ki a vevőt név és cím alapján. A számla táblájába átmásoljuk a CustomerName, PostalCode, City, Address mezők tartalmát, hogy a számla adatait egy esetleges módosítás ne érintse a jövőben. Erre szükség van, hiszen a vevőnk címe megváltozhat idővel és ha a számla táblában csak a vevő kódjával hivatkoznánk a Customer táblára, akkor egy régebbi számlának is megváltoznának az adatai, ami nem biztos, hogy egy jó megoldás lenne.
Products tábla
ProductID int – egyedi azonosító a termékek részére, az Identity 1, 1
ProductName varchar(50) – a termék megnevezése
KSH varchar(20) – KSH besorolás, esetleg ITJ, SZJ
Unit varchar(10) – mennyiségi egység
UnitPrice int – nettó egységár
VAT int – áfa kulcs
A Products táblában találhatók a termékek adatai. A számla készítéskor majd egy listából választhatunk a termékek közül név alapján.
UserData tábla
UserID int – egyedi azonosító a felhasználók részére, az Identity 1, 1
UserName varchar(50) – felhasználói név
Password varchar(20) – felhasználói jelszó
A felhasználók adatait tároljuk itt. Egy valós alkalmazás esetén természetesen e tábla még bővülhet adatokkal, mint például a személy neve, jogai a rendszer funkció felett, stb.
Invoice tábla
InvoiceID int – egyedi azonosító a felhasználók részére, az Identity 1, 1
InvoiceNumber varchar(20) – számla száma
InvoiceDate datetime – a számla kiállításának dátuma
FulfillmentDate varchar(20) – a teljesítés időpontja. Itt nem használhatunk datetime típust, hiszen a teljesítés időpontja lehet szöveges is, pl.: 2001. március
PaymentDate datetime – fizetési határidő
PaymentMode smallint – fizetési mód kódja (0 – átutalás, 1 – készpénz, 2 – postai utánvét)
CustomerID int – hivatkozás a Customers tábla CustomerId mezőjére
CustomerName varchar(80) – a Customers tábla CustomerName mezőjének a számla készítésekor aktuális értéke
PostalCode char(4) – a Customers tábla PostalCode mezőjének a számla készítésekor aktuális értéke
City varchar(50) – a Customers tábla City mezőjének a számla készítésekor aktuális értéke
Address varchar(80) – a Customers tábla Address mezőjének a számla készítésekor aktuális értéke
A számlák fejrészére kerülő adatokat az Invoice táblában tároljuk. Itt helyezzük el a hivatkozást is a Customers táblára, hogy melyik vevőnek készült a számla, így könnyen kikereshetjük mondjuk az aktuális telefonszámát a vevőnek, viszont a számlára kerülő adatait átmásoljuk, hogy azok már ne változhassanak a számlán.
InvoiceDetail tábla
InvoiceId int – létrehozunk egy relációs kapcsolatot az Invoice táblával
ProductId int – a termék kódja, mellyel hivatkozhatunk a Products tábla ProductId mezőjére
ProductName varchar(50) - a Products tábla ProductName mezőjének a számla készítésekor aktuális értéke
KSH varchar(20) - a Products tábla KSH mezőjének a számla készítésekor aktuális értéke
Unit varchar(10) - a Products tábla Unit mezőjének a számla készítésekor aktuális értéke
UnitPrice int - a Products tábla UnitPrice mezőjének a számla készítésekor aktuális értéke
VAT int - a Products tábla VAT mezőjének a számla készítésekor aktuális értéke
ProductCount int – a termék mennyisége
Itt tároljuk a számlához tartozó tételeket. Az Invoice és az InvoiceDetail táblák között relációs viszonyt kell kialakítanunk. Erre nyilván azért van szükség, mert egy-egy számla fejrészhez tetszőleges számú tétel tartozhat.
A táblák létrehozása után a Data Transformation Service-t használva exportáljuk az összes táblát Dbase típusba. Ha ez megtörtént, akkor szükség van némi utómunkálatra a Dbase táblákon. Ilyen például az, hogy a *Id mezőkhöz létrehozzunk indexet. Az int típusokat olyan számmá konvertálja a Data Transformation Service, hogy azok húsz karakter hosszúságúak és öt karakternyi törtrészt tartalmazhassanak. Ezt megváltoztatjuk öt hosszúságú tárolásra, nulla tört résszel.
Fontos megjegyeznünk, hogy a Dbase-ben a mezőnevek hossza igen rövidre van szabva, így hosszabb megnevezéseink csonkulnak. Ezt a későbbi programfejlesztés során nem szabad elfelejtenünk.
Az adatszerkezet kialakításával végeztünk is, a következő részben lerakjuk a programunk alapjait.
|