procedure TForm1.Button1Click(Sender: TObject);var
  aNameList : TStringList;
  sName : String;
begin
  aNameList := TStringList.Create;
  try
    with adoTable1 do
    begin
      first;
      repeat
        sName := FieldByName('单位名称').asString;
        if aNameList.IndexOf(sName) = -1 then
        begin
          aNameList.Add(sName);
          Next;
        end else
          begin
          Delete;
          end;
      Until eof ;
    end;
  finally
    aNameList.Free;
  end;end;end.
DLEPHI说键列信息不足,更新影响过多的行。

解决方案 »

  1.   

    主键?一个表难道就非要主键码?我记得好像是没有哦!我觉得你的程序这里有问题
    procedure TForm1.Button1Click(Sender: TObject);var
      aNameList : TStringList;
      sName : String;
    begin
      aNameList := TStringList.Create;
      try
        with adoTable1 do
        begin
          first;
          repeat
            sName := FieldByName('单位名称').asString;
            if aNameList.IndexOf(sName) = -1 then
            begin
              aNameList.Add(sName);
              Next;
            end else
              begin
              Delete;
              next;//这里加入这个
              end;
          Until eof ;
        end;
      finally
        aNameList.Free;
      end;end;end.
      

  2.   

    TO; zhang21cnboy(沧桑男人) 如果改成沧桑老男人 不错
    楼上说的对
      

  3.   

    你用adoquery多好呀
    打开表的语句改成
    select 单位名称 from 表名 order by 单位名称
    下面代码改成
    var
      aNameList : TStringList;
    begin
      aNameList := TStringList.Create;
      try
        with adoTable1 do
        begin
          first;
          repeat
            aNameList.Add(FieldByName('单位名称').asString)
            Next;
          Until eof ;
        end;
      finally
        aNameList.Free;
      end;
    end;end.
      

  4.   

    "DLEPHI说键列信息不足,更新影响过多的行".桉上几位看清楚错误信息!!!!!!!!!!!!!!楼主已经说得很清楚了.如果两条记录的值完全一样,难道能删除吗????????当然,除非你直接发送DELETE语句.
      

  5.   

    有可能是ADO的BUG,你是否已打ADO补丁?