Title: Pack PARADOX
Question: Pack a PARADOX Table
Answer:
procedure PackTable(Table: TTable);
var
Props: CURProps;
hDb: hDBIDb;
TableDesc: CRTblDesc;
begin
Table.Active := false;
Table.Exclusive := true;
Table.Active := true;
{ Asegurese que la Tabla este abierta en modo exclusivo }
if not Table.Active then
raise EDatabaseError.Create('La Tabla debe estar abierta');
if not Table.Exclusive then
raise EDatabaseError.Create('La Tabla tiene que estar abierta en modo exclusivo');
{ Averiguar el tipo de Tabla (PARADOX , dBASE) }
Check(DbiGetCursorProps(Table.Handle, Props));
{Si la Tabla es Paradox, solo llamar a DbiDoRestructure...}
if Props.szTableType = szPARADOX then
begin
{ Limpiar la estructura }
FillChar(TableDesc, sizeof(TableDesc), 0);
{ Obtener el Handle del Database desde el Handle de la Tabla }
Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE,hDBIObj(hDb)));
{ Poner el nombre de la Tabla en el Descriptor de la Tabla}
StrPCopy(TableDesc.szTblName, Table.TableName);
{Poner el tipo de la Tabla en el Descriptor }
StrPCopy(TableDesc.szTblType, Props.szTableType);
{Poner TRUE en la Opcion pack del Descriptor}
TableDesc.bPack := True;
{ Cerrar la Tabla para que se complete la reestructuracin }
Table.Close;
{ LLamar a DbiDoRestructure... }
Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
end
else
raise EDatabaseError.Create('La Tabla solo puede ser PARADOX dBASE' + ' Tipo de PACK');
Table.Active := false;
Table.Exclusive := false;
Table.Open;
end;