pack na tabela nao elimina..pk??

06/11/2005

eu ja dei um pack na tabela (paradox), mas a tabela nao eliminou todos os registos,porque o campo de auto incremento continua contando...e apos fazer um pack a tabela apaga por completo,so quando eu insiro um novo registo a o camnpo de auto incremento conta a partir do ultimo registo que fiz antes de dar um pack na tabela.
exemplo;

antes do pack:
o ultimo registo no campo incremento contem o valoir 10;

apos o pack:
quando insiro um novo registo, o campo auto incremento nao começa do 1 mas sim do 10;


Já usei o empty do database e tb tem o mesmo problema


obrigado!


Cyberchip

Respostas

07/11/2005

Firekiller

Tente usar isso:

procedure ParadoxPack(Table : TTable);
var
TBDesc : CRTblDesc;
begin
FillChar(TBDesc,Sizeof(TBDesc),0);
with TBDesc do begin
StrPCopy(szTblName,Table.TableName);
StrPCopy(szTblType,szParadox);
bPack := True;
end;
Check(DBIDoRestructure(Table.DBHandle,1,@TBDesc,nil,nil,nil,False);
end;



Se não funcionar, tente isso:

function ResetAutoInc(FileName: TFileName; Base: Longint): Boolean;
begin
with TFileStream.Create(FileName, fmOpenReadWrite) do
Result := (Seek($49, soFromBeginning) = $49) and (Write(Base, 4) = 4);
end;


onde:

O parâmetro FileName é o nome da tabela, incluindo o caminho. E o parâmetro Base é o valor inicial para o contador do AutoIncremento.
Para a segunda opção, o banco não pode estar em uso.


Responder Citar