Delphi - Paradox tábla verziójának módosítása

forráskód letöltése
A Borland Database Engine segítségével a Delphi-ben többféle verziójú paradox táblákat használhatunk. Ebben a példában megnézzük, hogy miként lehet egy paradox tábla verzióját futó Delphi programból módosítani.
A cikk írása pillanatában a Borland Database Engine segítségével a következő verziójú paradox táblákat használhatjuk: 3.5, 4, 5.0 for Windows, 7.
Lehetőségünk van arra, hogy programból módosítsuk egy paradox tábla verziójának számát. Természetesen csak a fent felsorolt verziókat használhatjuk.
A verziószám módosítása struktúramódosító művelet, ezért kizárólagos tábla használati joggal kell, hogy rendelkezzünk hozzá. A művelet nem végezhető el olyan táblán, amelyet az adott pillanatban egy másik felhasználó vagy program használ.
A művelet végrehajtásához a BDE unit struktúráit és függvényeit használjuk.
A DbiGetObjFromObj függvény segítségével meghatározhatjuk a tábla azonosítóját, amely a hDb változóba kerül. A változó tartalmára a DbiDoRestructure függvény meghívásánál lesz szükségünk.
Check(DbiGetObjFromObj(hDBIObj(Table1.Handle),objDATABASE,hDBIObj(hDb)));
A CRTblDesc struktúra segítségével érhetjük el a megadott tábla tulajdonságait, valamint ezt a struktúrát használhatjuk fel arra is, hogy a tulajdonságokat megváltoztassuk.
Az FLDDesc struktúra írja le az adattábla egy mezőjének tulajdonságait. Ha a struktúra szName mezőjének a ’LEVEL’ értéket adjuk, akkor elérhetjük és beállíthatjuk a tábla verziószámát.
StrPCopy(FieldDesc.szName,'LEVEL');
A táblaleíró struktúra pFldOptParams mezőjében adhatjuk meg a mezőleíró objektumot, a pOptData mezőben pedig az új verziószámot.
TableDesc.pFldOptParams:=@FieldDesc;
TableDesc.pOptData:=@ComboBox1.Text[1];
Végül meghívjuk a DbiDoRestructure BDI API függvényt, amely a tábla szerkezetét módosítja a táblaleíróban beállított értékeknek megfelelően.
DbiDoRestructure(hDb,1,@TableDesc,nil,nil,nil,False);
DbiDoRestructure
function DbiDoRestructure (
hDb: hDBIDb;
iTblDescCount: Word;
pTblDesc: pCRTblDesc;
pszSaveAs: PChar;
pszKeyviolName: PChar;
pszProblemsName: PChar;
bAnalyzeOnly: Bool
): DBIResult stdcall;
A DbiDoRestructure egy BDE függvény, amely a táblák tulajdonságainak megváltoztatására szolgál. Használhatjuk mezők típusának megváltoztatására, mezők méreteinek megváltoztatására, új mezők létrehozására, mezők törlésére, mezők átrendezésére, indexek módosítására, táblák közti referenciák módosítására, valamint jelszavak módosítására.
Paraméterek
hDb: hDBIDb
Egy adatbázis azonosítására szolgál.
iTblDescCount: Word
Meghatározza a táblaleírók számát. Függvényhívásonként ebből csak egy lehet, úgyhogy itt mindig 1-es értéknek kell szerepelnie.
pTblDesc: pCRTblDesc
Itt egy mutató típusú változót kell megadni, amely egy CRTblDesc típusú adatszerkezetre mutat. Ez az adatszerkezet írja le az adatbázis szerkezetét. Ha valamit módosítani akarunk, akkor azt ebben a változóban kell beállítanunk.
pszSaveAs: PChar
Használata opcionális. Ha nem Nil paramétert kap, hanem egy nevet, akkor elkészít egy új táblát az új szerkezettel (ennek a nevét lehet itt megadni), a régit pedig változatlanul hagyja.
pszKeyviolName: PChar
Használata opcionális. Mutató egy tábla nevére, ahová azok a rekordok kerülnek, amelyek kulcsütközést okoznak. Ha értéke Nil, akkor nem jön létre ilyen tábla.
pszProblemsName: PChar
Használata opcionális. Mutató egy tábla nevére, ahová azok a rekordok kerülnek, amelyeket nem lehet a rendes táblába beilleszteni. Ha Nil paramétert adunk meg, akkor ez a tábla nem jön létre.
bAnalyzeOnly: Bool
Nem használt. Értékét állítsuk False-ra.
Visszatérési érték
Ha az új szerkezet létrehozása sikeres volt, akkor DBIERR_NONE-t ad vissza visszatérési értékként.