procedure TForm1.DelbtnClick (Sender:Tobject);
var pos, i, rc:integer;
begin
  rc:=table1.RecordCount;
  pos:=table1.RecNo;
  table1.edit;
  table1.delete;
  table1.edit;
  for i:=pos+1 to rc do
    table1.FieldByName ('编号').AsInteger := i-1;
  table1.Post;
  table1.Refresh;
end;

解决方案 »

  1.   

    问题出在最后的Table1.Post;
    post只对Edit和Insert有效,对Delete无效。
    在BeforePost中写一些代码,跟踪就会发现Table1.Delete是不执行BeforPost的.
    可以把Table1.Edit和Tabele1.Delete对调一下就不会出现错误了。
    另外,你的代码好像不能满足你的要求的。
      

  2.   

    procedure TForm1.DelbtnClick (Sender:Tobject);
    var pos, i, rc:integer;
    begin
      rc:=table1.RecordCount;
      pos:=table1.RecNo;
        table1.delete;
      for i:=pos+1 to rc do
       begin
       table1.edit;
        table1.FieldByName ('编号').AsInteger := i-1;
      table1.Post;
    end;
      table1.Refresh;
    end;
    仔细看
      

  3.   

    不知你想实现的是否是
    删除当前的记录,后面的记录编号依次减1,保持连续?经常有这种数据操作的。
    如果是,可以改成这样:
    procedure TForm1.Button1Click(Sender: TObject);
    var pos, i, rc:integer;
    begin
      rc:=table1.RecordCount;
      pos:=table1.RecNo;
      table1.delete;
      for i:=pos to rc-1 do //delete以后,会指向下一条记录并变成浏览状态
      begin
        table1.edit;    
        table1.FieldByName ('编号').AsInteger := table1.FieldByName    ('编号').AsInteger -1;
        table1.Next;  //注意循环
      end;
      table1.Refresh;
    这样还会有问题:记录已经移动到最后了。要保持当前的位置,可以使用BookMark.
    其实让编号自动减1,使用Query比较好。
    with Query1 do
    begin
      Close;
      SQL.Text:='update db1 set 编号=编号-1 where 编号>"'+IntToStr(pos)+'"';
      Execute;
    end;