Este código es para reparar los campos Autonuméricos en paradox. El procedimiento ActualizarAutoInc es cortesía de Román.
Código Delphi
[-]
procedure ResetAutoinc(Tabla: TTable);
function HayAutoinc : string;
var
i : Integer;
begin
Result := '';
i := 0;
while (i < Tabla.FieldCount) and (Result = '') do
begin
if Tabla.Fields[i].DataType = ftAutoinc then
Result := Tabla.Fields[i].FieldName;
i := i + 1;
end;
end;
function ValorAutoinc(campo : string) : Integer;
var
q : TQuery;
begin
q := TQuery.Create(self);
q.DatabaseName := Tabla.DatabaseName;
q.SQL.Add(format('Select max(%s) as result from %s', [campo, Tabla.TableName]));
q.Active := True;
Result := q.FieldByName('result').AsInteger;
end;
procedure ActualizarAutoinc(valor : Integer);
var
mystream : tfilestream;
AParams : TStringList;
dir : string;
begin
AParams := TStringList.Create;
AParams.Clear;
Session.GetAliasParams(Tabla.DatabaseName, AParams);
Dir := Copy(AParams.Strings[0],6,255);
if dir[length(dir)] <> '\' then
dir := dir + '\';
AParams.Free;
mystream := tfilestream.Create(dir + tabla.TableName,
fmOpenWrite + fmShareExclusive);
try
mystream.Seek(73, soFromBeginning);
mystream.Writebuffer(valor, SizeOf(valor));
finally
mystream.Free;
end;
end;
var
valor : Integer;
campo : string;
begin
try
Tabla.Active := True;
campo := HayAutoinc;
if campo <> '' then
begin
valor := ValorAutoinc(campo);
Tabla.Active := False;
ActualizarAutoinc(valor);
end;
finally
if Tabla.Active then
Tabla.Active := False;
end;
end;