我们知道,对于自增型字段,其字段值是不断递增的并且不能修改的.
假使清空有N条记录的一个表,然后再插入记录,那么新纪录的自增型
字段的值会从删除前最大的ID值开始,而不是从1开始.如果要做到从
1开始给自增型字段赋值,那么只有先删除该字段,然后新建该字段.代码如下,但测试时自增型字段并没有从1开始,而是仍旧从上次最大的
ID开始.Why?
procedure RefreshKeyField();    procedure DeleteKeyFieldIndexesAndKeys();    //删除主键上的所有索引和所有键
    var
      i3: integer;
    begin
      i3:= 0;
      while i3 < NewDB.Tables[ATableName].Indexes.Count do
      begin
        if NewDB.Tables[ATableName].Indexes[i3].Columns[0].Name = KeyField then
          NewDB.Tables[ATableName].Indexes.Delete(NewDB.Tables[ATableName].Indexes[i3].Name)   //删除一个索引则Count减1,故不须改变i3;
        else
          Inc(i3);
      end;      i3:= 0;
      while i3 < NewDB.Tables[ATableName].Keys.Count do
      begin
        if NewDB.Tables[ATableName].Keys[i3].Columns[0].Name = KeyField then
          NewDB.Tables[ATableName].Keys.Delete(NewDB.Tables[ATableName].Keys[i3].Name)   
        else
          Inc(i3);
      end;
    end;    procedure DeleteKeyField();
    var
      tmpqry: tadoquery;
    begin
      tmpqry:= tadoquery.Create(nil);
      tmpqry.ConnectionString:= Format(connstr, [fmmain.edOldDB.Text, WorkGroupFilePath]);
      tmpqry.SQL.Text:= Format(' ALTER TABLE %s Drop %s CASCADE ', [ATableName, KeyField]);
      tmpqry.ExecSQL;      tmpqry.Close;
      tmpqry.Free;
    end;    procedure AddKeyField();
    var
      tmpqry: tadoquery;
    begin
      tmpqry:= tadoquery.Create(nil);
      tmpqry.ConnectionString:= Format(connstr, [fmmain.edOldDB.Text, WorkGroupFilePath]);
      tmpqry.SQL.Text:= Format(' ALTER TABLE %s ADD %s COUNTER(1,1) PRIMARY KEY ', [ATableName, KeyField]);
      tmpqry.ExecSQL;      tmpqry.Close;
      tmpqry.Free;
    end;begin
    DeleteKeyFieldIndexesAndKeys();  //必须先删除主键上的所有索引和所有键
    DeleteKeyField();
    AddKeyField();
end;
注:
  NewDB是一个_Catalog变量.