Hola anitra_cattivo.
Creo que exite la función DbiPack..., pero mirando un programa donde compactaba tablas dBase, utilizaba este código que si que funcionaba:
Código:
uses BDE;
procedure PackTable(ATable: TTable);
var
TblDesc: CRTblDesc;
hDb: hDbiDb;
cTablePath: string;
begin
if not ATable.Active then
raise Exception.Create('La tabla debe estar abierta.');
hDb := nil;
try
SetLength(cTablePath, MAX_PATH);
DbiGetDirectory(ATable.DBHandle, True, PChar(cTablePath));
cTablePath := PChar(cTablePath);
if (cTablePath <> '') and (cTablePath[Length(cTablePath)] <> '\') then
cTablePath := cTablePath + '\';
cTablePath := cTablePath + ATable.TableName;
FillChar(TblDesc, SizeOf(CRTblDesc), 0);
with TblDesc do
begin
StrPCopy(szTblName, cTablePath);
bPack := True;
end;
ATable.Active := False;
DbiOpenDatabase(nil, 'STANDARD', dbiReadWrite, dbiOpenExcl, nil,
0, nil, nil, hDb);
DbiSetDirectory(hDb, PChar(cTablePath));
DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False);
finally
DbiCloseDatabase(hDb);
end;
end;
Sal
U2.