Haciendo Pack de tablas con Delphi

Estoy iniciándome en Delphi y estoy tratando de hacer una aplicación en donde borro algunos registros de una tabla de Dbase simplemente aplicando Delete. Pero al visualizar la tabla con el Database Desktop de Delphi me encuentro con que no se ha hecho el pack y lo tengo que hacer desde el ya mencionado desktop. ¿Cómo puedo hacerlo desde mi aplicación de forme directa?

1 respuesta

Respuesta
1
Aquí 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;
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');
De parte de Radical - www.q3.nu
Hecho, funciona a la perfeccción y ya lo logré poner en mi aplicación.
Muchas gracias por tu ayuda sin ella no lo hubiera logrado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas