sábado, 6 de junho de 2009

Compactando tabelas 2

{Esta rotina existe para o banco de dados local Paradox pois, mesmo os registros sendo deletados pelo usuário, as posições deles continuam sendo utilizadas mas os dados não estão mais acessíveis. }
uses BDE;

procedure CompactarTabela(Table:TTable);
var
TableDesc: CRTblDesc;
WasActive: Boolean;
hDataBase: hDbiDB;
begin
WasActive := Table.Active;
Screen.Cursor := crHourglass;
try
{abre se estava fechado para o obter o DBHandle válido}
if not WasActive then
begin
Table.Open;
{obtem o handle do banco de dados e fecha a tabela}
hDataBase := Table.DBHandle;
Table.Close;
{preenche o descritor da tabela}
FillChar(TableDesc, SizeOf (CRTblDesc), 0);
end;
with TableDesc do
begin
StrPCopy(szTblName, Table.TableName);
StrPCopy(szTblType, szParadox);
bPack := True;
end;
{reestrutura a tabela, empacotando-a}
if hdataBase<>nil then
Check(DbiDoRestructure(hDataBase, 1, @TableDesc, nil, nil, nil, False))
else
Application.MessageBox('A tabela não possui dados para
compactação','Compactação',0+16);
finally
Screen.Cursor := crDefault;
{por fim, reabre}
if WasActive then
Table.Open;
end;
end; //A Table que você estiver usando deve estar fechada (Active := false).

Nenhum comentário:

Postar um comentário