Delphi Examples: DbiCreateTable

<< Click to Display Table of Contents >>

Navigation:  »No topics above this level«

Delphi Examples: DbiCreateTable

Return to chapter overview

Create a table with a different level, block size, and fill factor than specified in the BDE configuration. Most Delphi users should use TTable.CreateTable. This example uses the following input:

 fDbiCreateTable(Database1.Handle, 'TableChange', 3, @FDesc, 7, 32768, 95);

 

procedure fDbiCreateTable(hTmpDb: hDBIDb; TableName: String; Fields: Word;

 pFlds: pFLDDesc; Level, BlockSize, FillFactor: Word);

var

 pOptDesc, pOrigDesc: pFLDDesc;

 pOptData, pOrigData: pBYTE;

 TblDesc: CRTblDesc;

 sLevel, sBlockSize, sFillFactor: String;

begin

 pOptDesc := AllocMem(3 * sizeof(FLDDesc));

 pOrigDesc := pOptDesc;

 pOptData := AllocMem(20);

 pOrigData := pOptData;

try

   sLevel := IntToStr(Level);

   sBlockSize := IntToStr(BlockSize);

   sFillFactor := IntToStr(FIllFactor);

   // Set up first parameter

   pOptDesc.iOffset := 0;

   pOptDesc.iLen := Length(sLevel) + 1;

   StrPCopy(pOptDesc.szName, 'LEVEL');

   StrPCopy(PChar(pOptData), sLevel);

   Inc(pOptData, Length(sLevel) + 1);

   Inc(pOptDesc);

   // Set up second parameter

   pOptDesc.iOffset := Length(sLevel) + 1;

   pOptDesc.iLen := Length(sLevel) + 1 + Length(sBlockSize) + 1;

   StrPCopy(pOptDesc.szName, 'BLOCK SIZE');

   StrPCopy(PChar(pOptData), sBlockSize);

   Inc(pOptData, Length(sBlockSize) + 1);

   Inc(pOptDesc);

   // Set up third parameter

   pOptDesc.iOffset := Length(sLevel) + 1 + Length(sBlockSize) + 1;

   pOptDesc.iLen := Length(sLevel) + 1 + Length(sBlockSize) + 1 +

     Length(sFillFactor) + 1;

   StrPCopy(pOptDesc.szName, 'FILL FACTOR');

   StrPCopy(PChar(pOptData), sFillFactor);

   // Format the table descriptor

   FillChar(TblDesc, sizeof(TblDesc), #0);

   StrPCopy(TblDesc.szTblName, TableName);

   StrCopy(TblDesc.szTblType, szPARADOX);

   TblDesc.iOptParams := 3;

   TblDesc.pFldOptParams := pOrigDesc;

   TblDesc.pOptData := pOrigData;

   TblDesc.iFldCount := Fields;

   TblDesc.pFldDesc := pFlds;

   // Create the table

   Check(DbiCreateTable(hTmpDb, True, TblDesc));

finally

   FreeMem(pOrigDesc, 3 * sizeof(FLDDesc));

   FreeMem(pOrigData, 20);

end;

end;