Delphi - Dbase, Paradox, FoxPro adatbázisoknál PACK művelet végrehajtása

forráskód letöltése
Készítünk egy olyan eljárást, mely képes a címben említett háromféle adatbázisnál a PACK műveletet végrehajtani.

Mivel a rekordok törléskor valójában nem kerülnek végleges eltávolításra az adatbázisból, hanem csak meg lesznek jelölve törlésre, így sok törölt rekord esetén az adatbázis mérete egyáltalán nem csökken és ez egy idő után zavaró lehet.

A PACK művelet véglegesen eltávolítja az adatbázisokból a törölt rekordokat. A készítendő eljárás helyes működésének érdekében az alábbi feltételeket be kell tartanunk:
- Minimum az eljárás hívás idejére az Exclusive property-t igazra kell állítanunk.
- Meg kell adnunk a TableType property-ben az adatbázis típusát.

Mivel a FoxPro adatbázisokat csak a Delphi 4, illetve későbbi verziói kezelik, így ha Delphi 3-at használ, akkor értelemszerűen csak a két másik adatbázisra működik az eljárás is.

A készítendő PackTable eljárásban ketté kell választanunk a program futását attól függően, hogy Dbase vagy FoxPro, illetve Paradox táblával dolgozunk-e, mivel teljesen más módszer kell e két esetben.

Az első eset egyszerűbb. Itt csak meg kell hívnunk a DBIPackTable BDE függvényt, ahol a megfelelő paraméterek átadásával megtörténik az adott adatbázisra a PACK művelet.

Paradox esetén valamivel bonyolultabb a helyzet, itt újra kell strukturálnunk az adatbázist.

Ehhez a DbiDoRestructure BDE függvényt használhatjuk. Itt egy CRTblDesc típusú struktúrát is át kell adnunk paraméterként. Ennek van egy bPack mezője, melyet a PACK művelethez igazra kell állítanunk.