pBase 3.5 adatbázis-kezelő program

 

A pEdit fejlesztői szövegszerkesztő mellett, mivel igen sokszor dolgozom dBase állományokkal is, készítettem egy pBase adatbázis-kezelő programot is.

 

A pBase elkészítése előtt a DOS-os FoxBase 2.0-át használtam, mert igen gyors és jól használható programnak tartom. Ennek a programnak a sebességét nem lehet túlszárnyalni! A mai adatbázis-kezelők óriásiak, tele olyan funkcióval, amire nem igazán van szükség, csak akkor, ha adatbázis-kezelő programokat akarunk írni, pedig igen sokszor csak egy tábla tartalmát akarjuk megnézni. Mivel én Delphi-ben dolgozom, ezért egy hasonló tudású programra volt szükségem mint a FoxPro, de programozási tudás nélkül egyelőre.

 

A Delphi-vel igen profi adatbázis-kezelő programot lehetett volna készíteni, de akkor szükség lett volna a BDE-re azon a gépen, ahol a programot futtatni szerettem volna. Ezért szükségem volt egy adatbázis-kezelő komponensre, ami a BDE nélkül képes dBase formátumú táblák kezelésére.

 

Első nekifutásra készítettem egy adatbázis komponenst, ami a BDE nélkül, közvetlenül kezelte a dBase táblákat, de a memo mezők, indexek kezelésének a megoldása túl sok időt vett volna igénybe, ezért megint a már bevált módszerhez folyamodtam, kerestem egy nekem megfelelő komponenst az Interneten. Többet megnéztem, végül a TDBF komponens 5.0 verzióját választottam. A legnagyobb előnye ennek a komponensnek - azon kívül, hogy adják hozzá a forrást is - az, hogy a TDataSet-ből van a komponens származtatva, így a TTable-nak megfelelő property-kel rendelkezik. Kezeli a dBase formátum újabb verzióit is és a memo valamint a blob mezőket is. Sajnos indexelni csak a dBase III. formátumban (NTX) tud, és nem tudta kezelni az összetett indexeket, de gondoltam, majd megoldom ezt a problémát.

Az összetett indexhez és a filter funkcióhoz is egy értelmezőre van szükség, ami a beírt parancsokat fel tudja dolgozni. Ráadásul ennek gyorsan is kell működnie, mert a teljes táblára kiadott filter esetén nem lehet percekig „értelmezni”, így végül olyan megoldást választottam, ami első futtatáskor értelmez, a következő futásnál már csak a megfelelő rutinokat hívogatja. (A sebessége azért még így sem a legjobb, hol van még a FoxPro 2.0 sebességétől) Kezelnie kell a zárójeleket, műveleti sorrendeket, úgyhogy nem is olyan egyszerű a probléma. Többszöri átírás után azért elkészült a komponens, ráadásul úgy, hogy új függvény beillesztését percek alatt meg lehet oldani és a sebessége is javult!

 

Most már volt értelmező, ezt bele kellett rakni az indexelésbe, ami elég nagy fejtörést okozott. Először meg kellett érteni, hogy működik az indexelés, de aztán ez is sikerült.

 

A TDBF komponens nagyon jó, de sajnos ebben is van néhány „varázslat”, ami a forrás értését megnehezíti. Elég soká „túrtam” a forrást és néhány helyen úgy éreztem, hogy gyorsabb lenne a futás, ha egyszerűsítettek volna a kódon, de végül csak ott nyúltam bele a forrásba, ahol nagyon muszáj volt. Néhány funkcióval fel kellett bővíteni, néhány hibát ki kellett javítani benne, de aztán működőképes lett. Természetesen ebből a komponensből is van már újabb verzió. Már nem az eredeti szerző írta tovább, hanem valaki más, de a bug-listát meglátva és a forrásba belenézve szóba sem jöhetett az átállás, pedig az új verzió kezeli a dBase IV MDX index állományait is.

 

Az alap már megvolt, a neheze viszont most kezdődött. A pEdit nyomán nem volt kérdéses a projektszemlélet, az automatikus tábla betöltés, illetve a FileListBox használata a gyors fájl kiválasztáshoz. A tábla megjelenítése, kezelése egy külön formon lett megvalósítva és úgy mint a pEdit-nél, itt is PageControl fülekre kerültek a bedokkolt formok, így korlátlan számú táblát tölthetünk be egy időben.

 

A táblákat browse formátumban jelenítem meg, DBGrid komponensben, de azért ez kevés lenne egy ilyen programban, ezért felkészítettem az edit üzemmódra is. Ilyenkor a tábla aktív mezőire futási időben generálok DBEditet vagy a szükséges mezőt a mező megnevezésekkel együtt.

Fontos dolog, hogy be tudjuk állítani a megjelenítendő mezőket, ezért a FileListBox-szal együtt egy TNootoBook-ra felraktam egy CheckListBox-ot, amiben a megjelenítendő mezőket lehet beállítani. A CheckListBox megjelenítésről azért saját magam gondoskodtam, mert így szebb a program. A pBase-ben is lehetőség van a segédablak bezárására, sőt ide is beépítésre került az ablak automatikus megjelenítése ha az egeret ráhúzzuk. A mezők megjelenítésének kiválasztása mellett a DBGrid-ben a mezőket el is tudjuk mozgatni.

 

Ezzel a program már mindazt tudta mint a többi, de én azért ennél sokkal többet akartam. Összeszedtem azokat a funkciókat, amiket én szerettem a FoxPro-ban és hiányoltam hasonló programokban. Legfontosabb a funkciók gyors elérése, tehát gyorsító gombok kellenek. Itt dropdown ToolButtonokat alkalmaztam, aminél a gombra a leggyakrabban használt funkciót kötöttem, de azt lenyitva megjelenik az ahhoz a témához tartozó összes funkció. A programot természetesen nem csak dBase-en felnőtt felhasználók fogják használni, ezért kétféle üzemmódot terveztem a programba. Egyrészt a kezdők számára gombokkal, menüből elérhető funkciókat, valamint a profik számára parancs üzemmódot is. Ráadásul ezt azzal a szolgáltatással, hogy a menüs funkció használatakor a program kiírja az adott funkciónak megfelelő dBase parancsot is.

 

A dBase parancsok elég egyszerűek, tehát ezek kezelése nem volt olyan nehéz, a parancsok paramétereit pedig a már megírt értelmezővel kezeltem le.  Azért itt is akartam gyorsítani valamit, ezért a parancs sort egy kis intelligenciával is felvérteztem. A parancs beírása közben a program megpróbálja „kitalálni”, hogy mit akarunk gépelni, és ezt felajánlja beírás közben. (Természetesen kikapcsolható ez a funkció, mert sokakat idegesíthet, mint a Word örökös „okoskodása”.) A beírt parancsokat megjegyzi a program és ezek vissza is hozhatók.

 

Egy ilyen program természetesen arra is kell, hogy struktúrákat hozhassunk létre és ezeket módosítani tudjuk. A másik fontos szolgáltatás a nyomtatás. Lehetőség van itt struktúra, tábla nyomtatására, de riport generátor is került a programba. A Delphiben lévő QuickReport-tal elkészíteni egy egyszerű listát elég hosszadalmas, a FoxPro-val viszont igen egyszerű és gyors is. Ezért megpróbáltam a kettő közti átmenetet megtalálni. Alapnak a FoxPro riport generátorát vettem, de az én programomban a riporthoz tartozó táblát is meg kell adni. Természetesen a táblákat relációba is köthetjük. Miután már rengeteg riport volt a clipperes programokhoz, ezért elkészítettem a clipperes riportok importját is, hogy ezeket ne kelljen ismét elkészíteni. Az már csak hab a tortán, hogy a program képes mátrixnyomtatóra is nyomtatni, meg képernyőn is megnézhetjük a riport eredményét.

 

Mivel még időnként clipperes programokkal is kell foglalkoznom, és ezek csak egy felhasználós adatelérést kezelnek, a pBase-be betöltött táblákat nem tudta a Clipper program már megnyitni. Erre a problémára is kellett valamilyen megoldást találnom. Erre végül az a megoldás született, hogy amikor nem a pBase az aktív alkalmazás, akkor a program elengedi fizikailag a táblákat, így a Clipper már gond nélkül képes azokat megnyitni. A lezárás azonban az egyszerűbb eset, de miután ismét a pBase lesz az aktív alkalmazás, ezeket a táblákat ismét meg kell nyitni, de úgy, ahogy otthagytuk őket! Ezért készült egy objektum, ami az összes fontos információt eltárolja a táblákról az újbóli megnyitáshoz.

 

Az élet aztán hozta az újabb fejlesztéseket. Táblákat kellett összefésülni, ráadásul eltérő mezőszerkezettel, de erre még a FoxPro sem volt képes. Miután úgyis meg kellett oldani ezt a dolgot, ezért egyszerűen ezt a pBase-ben valósítottam meg és természetesen nem csak összefésülni tud, hanem ennél sokkal többet. Hasonlóan működik, mint a BatchMove a Delphiben.

 

A program sajnos csak NTX indexeket tud kezelni, ami nem a legfejlettebb megoldás. Erre kell még valami megoldást találnom, meg a relációra, de ezt talán majd következő verzióban.

 

Mivel az index ilyen problémás, ezért újabb szolgáltatásokat raktam a programba. Tábla betöltésekor lehetőség van parancsok végrehajtatására. Ez úgy működik, mint a batch fájl, szépen sorban végrehajtja a megadott parancsokat. Így egy tábla nyitásakor bármit tehetünk, indexelhetünk, szűrőt állíthatunk a táblára, elugorhatunk egy rekordra, megjeleníthetjük a törölt rekordokat, vagy automatikusan kiszedhetjük a táblából a törölt rekordokat. (Ettől függetlenül minden táblánál megadhatjuk, hogy a használt indexeket automatikusan újra megnyissa, esetleg minden nyitáskor újra indexelje őket. Az indexelés úgy megy, mint a villám!)

A program azonban nem csak tábla nyitáskor képes ilyen parancsállomány futtatására, hanem bármikor és ezeket a parancsállományokat el is lehet menteni.

 

Természetesen itt is a lehetőségek szerint mindent saját kedvünkre állíthatunk, hogy még hatékonyabban tudjunk dolgozni a programmal.

 

Mint látható, elég sok funkció került a programba és a lehetőségek szerint megpróbáltam minél kellemesebb programot készíteni, ahol fontos szempont volt a könnyű kezelhetőség.

 

A pBase a pEdit-tel együtt megtalálható a CD-n, a frissítések a weblapomról töltetők le:  pp.freeweb.hu

 

Pammer Pál - pammer@szabolcs.kozut.hu