运行以下代码,第一次运行时可以实现添加和删除,但是第二次点击就出错,重新打开后点击就有可以实现相关的功能,

运行以下代码,第一次运行时可以实现添加和删除,但是第二次点击就出错,重新打开后点击就有可以实现相关的功能,求助?
procedure TForm1.Button10Click(Sender: TObject);
var
  StrSQL,Todata:string;
begin
  StrSQL:='select * from Output';
  ClientDataSet2.CommandText:=StrSQL;
  ClientDataSet1.open;
  ClientDataSet1.first;
  while not ClientDataSet1.eof do
  begin
      if ClientDataSet1.Fields[9].AsBoolean = True then
       begin
       ClientDataSet1.Edit;
       ClientDataSet1.FieldByName('运维班核对人').AsString:=loginForm.edit2.Text;
       ClientDataSet1.Post;
       end;
       if ClientDataSet1.Fields[11].AsBoolean = True then
       begin
       Todata:=datetostr(Date());
       ClientDataSet1.Edit;
       ClientDataSet1.FieldByName('监控核对人').AsString:=loginForm.edit2.Text;
       ClientDataSet1.FieldByName('核对日期').AsString:=Todata;
       ClientDataSet1.Post;
       end;
        if ClientDataSet1.Fields[9].AsBoolean = True  then
        begin
        if ClientDataSet1.Fields[11].AsBoolean = True then
          begin
          ClientDataSet2.Open;
          ClientDataSet2.Append;
          ClientDataSet2.FieldByName('序号').AsString:=ClientDataSet1.FieldByName('序号').AsString;
          ClientDataSet2.FieldByName('点号').AsString:=ClientDataSet1.FieldByName('点号').AsString
          ClientDataSet2.ApplyUpdates (0);
          ClientDataSet1.Delete;
          ADOquery2.Close;
          ADOquery2.SQL.Clear;
          ADOquery2.SQL.Add('select * from Input');
          ADOquery2.Open;
          with DataSetProvider1.DataSet.FieldByName( '序号' ) do
             ProviderFlags := ProviderFlags + [ pfInKey ];
          ClientDataSet1.ApplyUpdates (0);
          end;
        end;
        ClientDataSet1.Next;
  end;
end;
出现的错误是违反了PRIMARY KEY约束。不能在对象DBO.Input中插入重复键。求帮忙
------解决思路----------------------
你的删除有问题,你这样删不干净,你最好倒着来,从后往前删
------解决思路----------------------
ClientDataSet1.Last;然后往下滚啊ClientDataSet1.Prior;

procedure TForm1.Button10Click(Sender: TObject);
var
  StrSQL,Todata:string;
begin
  StrSQL:='select * from Output';
  ClientDataSet2.CommandText:=StrSQL;
  ClientDataSet1.open;
  ClientDataSet1.Last;
  while not ClientDataSet1.eof do
  begin
      if ClientDataSet1.Fields[9].AsBoolean = True then
       begin
       ClientDataSet1.Edit;
       ClientDataSet1.FieldByName('运维班核对人').AsString:=loginForm.edit2.Text;
       ClientDataSet1.Post;
       end;
       if ClientDataSet1.Fields[11].AsBoolean = True then
       begin
       Todata:=datetostr(Date());
       ClientDataSet1.Edit;
       ClientDataSet1.FieldByName('监控核对人').AsString:=loginForm.edit2.Text;
       ClientDataSet1.FieldByName('核对日期').AsString:=Todata;
       ClientDataSet1.Post;
       end;
        if ClientDataSet1.Fields[9].AsBoolean = True  then
        begin
        if ClientDataSet1.Fields[11].AsBoolean = True then
          begin
          ClientDataSet2.Open;
          ClientDataSet2.Append;
          ClientDataSet2.FieldByName('序号').AsString:=ClientDataSet1.FieldByName('序号').AsString;