La Web del Programador: Comunidad de Programadores
 
    Pregunta:  23923 - COMPACTAR TABLAS PARADOX
Autor:  Armando Montoya
Hola a todos, tengo una duda, como puedo hacer para eliminar completamente los registros eliminados en Paradox, ya que en mi aplicacion hago uso del EmptyTable y despues requiero eliminar esos registros hago un llamado de DbiDoRestructure pero no me elimina nada. si alguien me pudiera indicar el codigo necesario estaria muy agradecido. Gracias y saludos

  Respuesta:  jorge luis guzman abreu
Aqui tienes un ejemplo de como se hace:

-Incluye 'bde' en el uses de tu form
-y utiliza esta funcion para compactarla:

procedure PackDBF(Tabla: TTable);
begin
Check(DbiPackTable(Tabla.DBHandle, Tabla.Handle, nil, szDBASE, True))
end;

Pero cuidado, para poder compactar la tabla, ésta debera estar abierta en modo exclusivo

Ejemplo:

{Cerramos la tabla/Close table}
Table1.Close;
{En Modo exclusivo/Exclusive mode}
Table1.Exclusive:=True;
{Abrimos tabla/Open table}
Table1.Open;
{Compactar/pack}
PackDBF(Table1);

{Reabrir tabla/reopen table}
Table1.Close;
Table1.Exclusive:=False;
Table1.Open;

Compactar tablas DBF con una función:

procedure PackDBF(Const ADatabase, ATable : String);
begin
with TTable.Create(nil) do
try
DatabaseName := ADataBase;
TableName := ATable;
Exclusive := True;
Open;
Check(DbiPackTable(Database.Handle,Handle,'','',True));
finally
Free;
end;
end;

Ejemplo de llamada:

PackDBF('Alias','Table1');

Para tablas Paradox:

procedure PackParadox(Const ADatabase, ATable : String);
var
ADB :TDataBase;
SaveKC : Boolean;
PdxStruct : CRTblDesc;
begin
with TTable.Create(nil) do
try
DatabaseName := ADatabase;
TableName := ATable;
Exclusive := True;
Open;
ADB := DAtabase;
SaveKC := ADB.KeepConnection;
ADB.KeepConnection := True;
try
Close;
FillChar(PdxStruct,SizeOF(PdxStruct),0);
StrPCopy(PdxStruct.szTblName,ATable);
PdxStruct.bPack := True;
Check(DbiDoRestructure(ADB.Handle,1,
@PdxStruct,nil,nil,nil,False));
finally
ADB.KeepConnection := SaveKC;
end;
finally
Free;
end;
end;

Ejemplo de llamada:

PackParadox('Alias','Table1');