Delphi - Compactar BD paradox

   
Vista:

Compactar BD paradox

Publicado por hector (39 intervenciones) el 22/05/2009 06:50:01
como puedo compactar las tablas pues mira que le borro los reguistros y se mantiene aumentando.Probe con estos codigos pero me da error como si tubiera que tener permisos de administrador.

Sita de TMania:

No sé si te habrás dado cuenta, pero cuando borras registros en una tabla, en realidad no desaparecen físicamente del fichero, sino que el BDE los
marca como borrados.
Esto puede traer consecuencias fatales en determinadas aplicaciones en las que se borren muchos registros en una tabla.
Para hacer desaparecer dichos registros marcados para borrar necesitaremos compactar la tabla.


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');
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder