我有一个ADOQuery1已经查询有了数据,
ADOQuery1.LockType:=ltBatchOptimistic;
ADOQuery1.SQL.Text:='select * from MyTable';
ADOQuery1.Open;
这个时候我在界面上的DBGrid数据区编辑了一条记录
ID   Value
1    中国 
2    美国
3    加拿大1  //--在编辑之前是’加拿大‘
4    新加坡
这个时候我处理以下过程
procedure TForm1.myproc;
var
   q:TADOQuery;
begin
    q:=TADOQuery.Create(self);
    try
      q.Recordset:=ADOQuery1.Recordset;
    finally
      q.Free;
    end;
end;
处理了上一步骤后,我保存数据
ADOQuery1.UpdateBatch(arAll);
大家一定想象不出最后数据库中的结果
ID   Value
1    加拿大1 //--这里怎么被替代了
2    美国
3    加拿大  //--我在这里编辑的
4    新加坡
当然如果我不执行过程myproc怎么编辑怎么保存,结果肯定是正确的

解决方案 »

  1.   

    如此处理procedure TForm1.myproc;
    var
       q:TADOQuery;
    begin
        q:=TADOQuery.Create(self);
        try
          q.Recordset:=ADOQuery1.Recordset.Clone(1);
        finally
          q.Free;
        end;
    end;
      

  2.   

    可能是在执行
    q.Recordset:=ADOQuery1.Recordset;时 会自动执行First
      

  3.   

    to sjg0317(sjg0317) ( ) 
    有唯一关键字
      

  4.   

    出项问题不奇怪
    ADO本身就是有很多BUG
      

  5.   

    在执行q.Recordset:=ADOQuery1.Recordset;时q的记录指针位置被修改,自动指向第一条记录,你可以在赋值以后刷新看看,就像楼上说的用q.Recordset:=ADOQuery1.Recordset.Clone(1);赋值就行了