Fórum Banco de dados com falha #169335

14/07/2003

0

Criei a algum tempo uma tabela em paradox onde o campo código está com autonumeração, depois que inclui vários dados verifiquei que houve uma falha na tabela, a autonumeração pulou um nº de código, como faço para atualizar esta tabela incluindo este código pulado. Tenho mais de 500 códigos, o que dificulta fazer tudo de novo. ME AJUDEM, POR FAVOR.


Antonio Pedro

Antonio Pedro

Responder

Posts

14/07/2003

Carnette

Corrigir Erros de campo AutoIncremento
Esta procedure corrige erro em campos auto incremento (ftAutoInc), quando ocorre o key violation provocado pela perda do sequencial do campo.



Procedure AcertaAutoInc(NomeAlias : String);
Var ParamAlias, AliasTab: Tstrings;
contador, I : integer;
VlrAutoInc,VLRregAutInc : Longint;
AutoIncOK, EAutoInc : Boolean;
Tabela: TTable;
arqteste, CampoAutoInc, PathAlias: String;
begin
EAutoInc := false;
ParamAlias := TStringList.create;
AliasTab := TStringList.create;
Session.GetTableNames(NomeAlias,´*.db´,true, true, AliasTab);
contador := 0;
Session.GetAliasParams(NomeAlias,ParamAlias);
PathAlias := ParamAlias.Values[ ´PATH´ ];
if copy(PathAlias,length(PathAlias),1) = ´\´ then
PathAlias := copy(PathAlias,1,length(PathAlias)-1);
while contador <> AliasTab.Count do
begin
with TFileStream.Create( PathAlias +´\´+AliasTab.Strings[contador], fmOpenReadWrite) do
begin
AutoIncOK := (Seek($49, soFromBeginning) = $49) and (Read(VlrAutoInc, 4) = 4);
free;
end;
if AutoIncOK then
begin
with TTable.Create(Application) do
try
DatabaseName := NomeAlias;
TableName := AliasTab.Strings[contador];
with FieldDefs do
begin
Update;
for I := 0 to Count -1 do
begin
if Items[i].DataType = ftAutoInc then
begin
CampoAutoInc := (Items[I].Name);
EAutoInc := true;
end;
end;
end;
finally
Free;
end;
end
else
begin
Application.MessageBox(´Erro na recuperação do campo Auto-Incremento.´,´Atenção´,MB_OK);
Exit;
end;
if EAutoInc then
begin
Tabela := TTable.create(Application);
Tabela.DatabaseName := NomeAlias;
Tabela.TableName := AliasTab.Strings[Contador];
Tabela.open;
if Tabela.RecordCount > 0 then
begin
Tabela.Last;
VLRregAutInc := Tabela.FieldByName(CampoAutoInc).Value;
end;
Tabela.close;
if VlrAutoInc < VLRregAutInc then
begin
with TFileStream.Create(PathAlias +´\´+ AliasTab.Strings[contador], fmOpenReadWrite) do
begin
AutoIncOK := (Seek($49, soFromBeginning) = $49) and (Write(VLRregAutInc , 4) = 4);
free;
end;
end;
if AutoIncOK = false then
Application.MessageBox(´Erro na recuperação do campo Auto-Incremento.´,´Atenção´,MB_OK);
end;
EAutoInc := false;
contador := contador + 1;
end;
ParamAlias.Free;
AliasTab.Free;
end;
{Dica enviada por:Jasoni Corrêa


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar