|
<< Click to Display Table of Contents >> Delphi Examples: DbiCreateTable |
![]() ![]()
|
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;