HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Paradox táblák mezőinek átméretezése programból


Példaprogram letöltése

5139 bájt

Gyakran előfordul, hogy amikor megtervezünk egy adatbázist, a mezők hosszát kisebbre állítjuk, mint amire szükségünk lenne. Ilyenkor egy adatbázis kezelő program segítségével át kell méreteznünk a mezőket. Nem is biztos, hogy mindenhol a rendelkezésünkre áll egy ilyen eszköz. Ez a cikk és a hozzá tartozó példaprogram bemutatja, hogy hogyan lehet mindezt programból végrehajtani.

A példaprogram a mellékelt Adatok.db paradox állományt használja, amely a forráskód könyvtárában található.
Ha a programot elindítottuk, adjuk meg annak a mezőnek a nevét, amit át szeretnénk méretezni, valamint adjuk meg a mező új méretét. Ezután kattintsunk az „Átméretez” gombra.
A program működése
A programban szereplő parancsok használatához szükség van a DBITypes, DBIProcs, DBTables és DB unit-okra.
Az „Átméretez” gomb meghívja a ResizeField eljárást az alábbi módon.
ResizeField(Table1, Edit1.Text, StrToInt(Edit2.Text));
Ahhoz, hogy a tábla struktúráját módosíthassuk, kizárólagos használatra van szükség.
if (Table.Active and not Table.Exclusive) then   Table.Close;
if (not Table.Exclusive) then Table.Exclusive := True;
if (not Table.Active) then Table.Open;
A ResizeField létrehoz egy Rec (TChangeRec) változót. A TChangeRec struktúra írja le egy adatmező tulajdonságait.
TChangeRec = Packed Record
  szName: DBINAME;
  iType: word;
  iSubType: word;
  iLength: word;
  iPrecision: byte;
end;
A struktúra iLength tulajdonságát rögtön be is állítjuk FieldSize-ra.
Szükség van a tábla tulajdonságaira, hogy meghatározhassuk a tábla típusát. Ezeket a Props (CURProps) változóba mentjük el.
Check(DbiSetProp(hDBIObj(Table.Handle), curxltMODE, integer(xltNONE)));
Check(DbiGetCursorProps(Table.Handle, Props));
Szükség van egy pFields (pFLDDesc) és egy pOp (pCROpType) pointer változóra. Ezeken a pointer típusú változókon keresztül tudjuk a mezők szerkezetét módosítani. Az FLDDesc struktúra a mezők szerkezetét, a CROpType pedig a műveleteket írja le. Először lekérdezzük a létező mezők szerkezetét, majd beállítjuk az új méretet.
Inc(pOp, Table.FieldByName(FieldName).Index);
pOp^ := crMODIFY;
Dec(pOp, Table.FieldByName(FieldName).Index);
Check(DbiGetFieldDescs(Table.Handle, pFields));
Inc(pFields, Table.FieldByName(FieldName).Index);
Töröljük az adatszerkezetet.
    FillChar(TableDesc, sizeof(TableDesc), 0);
Meghatározzuk az adattábla azonosítóját.
Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
A táblaleíróban beállítjuk a tábla nevét, típusát és mezőinek számát.
StrPCopy(TableDesc.szTblName, Table.TableName);
StrPCopy(TableDesc.szTblType, Props.szTableType);
TableDesc.iFldCount := Table.FieldCount;
A tábla leíróhoz hozzárendeljük a művelet leírót és szerkezetleírót.
TableDesc.pecrFldOp := pOp;
TableDesc.pFldDesc := pFields;
Végül meghívjuk a DbiDoRestructure BDE API függvényt, amely a tábla szerkezetét módosítja.
DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, FALSE);
DbiDoRestructure függvény
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 hamisra.
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.

Cikksorozat

#IDKategóriaCikk címeSorozat
3047WindowsAz XML bemutatása1. rész
3059WindowsAz XML bemutatása2. rész
3068WindowsAz XML bemutatása3. rész
3077WindowsAz XML bemutatása - deklarációk4. rész
3086WindowsAz XML bemutatása - MSXML, XSLT5. rész
3094WindowsAz XML bemutatása - DTD6. rész
3105WindowsXML adatok megjelenítése Excel-ben7. rész
3114WindowsDokumentum hivatkozások az XML-ben8. rész
3123WindowsXML adattípusok9. rész
3132WindowsXML adatok HTML oldalakon10. rész
3141WindowsXML Notepad11. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 675. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |