我在程序中用了一个ClientDataSet,
我通过循环对ClientDataSet.RecNo 赋值来对记录定位。
不过在每次循环的时候要修改ClientDataSet的值。
可是当下次定位的时候通过RecNo定位的记录就不正确了。

解决方案 »

  1.   

    ClientDataSet在没有对某个字段值进行排序的时候,这个RecNo就不是固定的,所以有两个办法来解决你的问题(任何一种都可以解决):
    1、用某一个主键来排序
    2、循环赋值的时候用遍历的方法,定位取值的时候用字段定位.
      

  2.   

    我也试过了排序,好像也不行。
    主要是我在赋值的时候不知道记录的关键字。
    我只能通过RecNo来定位,而现在每次更新后记录的顺序就变了。
      

  3.   

    用了也不管用。
    我简单说一下实际的应用:
    我用StringGrid 来显示ClientDataSet中的数据。Procedure RefGrid();
    var
      i,j:Integer;
    begin
    for i:=0 to StringGrid.RowCount -1 do
      for j:= 0 to StringGrid.ColCount -1 do
         DrawGrid(nil,i,j);
    end;DrawGrid 中,我通过i,j计算得到当前grid的index,然后我通过对
    ClientDataSet.RecNo = Index +1;//来定位数据
    .....//并显示数据;起初不对ClientDataSet的数据作修改时,数据显示的都正确。
    可是在
    ClientDataSet.RecNo = Index +1;//来定位数据
    ClientDataSet.Edit;
    CliendDataSet.FieldByName('XX').Asvlue :=1;
    CliendDataSet.Post;.....//并显示数据;这个时候每调用RefGrid(),显示的数据就对不上了;例如原来grid上显示 : 1  2  3  4  5
                          6  7  8  9  10
                          11 .  ......现在点击一次就变成:  2  3  4  5  6
                          7  8  9  10 11
                                1                  再点就变成:          3  4  5  6  7
                          8  9  10 11 12
                          ......... 1  2
    好郁闷。后来我就改用其他方法保存要修改的数据了。而不修改ClientDataSet的数据,每次调用就没问题了。