想对表中的主键gxid做一个批量更新,结果提示gxid重复,无法保存  qDetail是adoquery,locktype是ltBatchOptimistic
 我做了一个批量更新的动作,保存出错。
 try
    while not qDetail.Eof do
    begin
      qDetail.Edit;
      qDetail.FieldByName('gxId').AsInteger := i + 1;
      i := i + 1;
      qDetail.Next;
    end;
   finally
  end;
请问是怎么回事。

解决方案 »

  1.   

    不是已经提示你重复了么,应当就是主键问题,
    你可以先last,然后prior的方式试试主键+1,
    不过动主键总不是个办法
      

  2.   

    在qDetail中,查不出重复的东西,就是更新到后台数据库时提示出错。
      

  3.   

    你可以给I一个初始值(相当于前缀),然后更新,更新完后,再给I一个初始值(要更新的值),这样就实现了批量更新,否则会因为主键冲突而失败  with qDetail do
      begin
        first;//移到首行,如果当前行开始删除该语句
         i:=12345;
        while not Eof do
        begin
          Edit;
          qDetail.FieldByName('gxId').AsInteger := i + 1;
          i := i + 1;
          Next;
        end;
      end;