例如,我对一个DBGrid的某条记录进行更新。保存之后,我希望光标所在记录还是我刚才更新过的那条记录,而不是第一条记录。如果是删除操作,那希望保存之后是该记录的后一条记录。请问这要怎么实现?

解决方案 »

  1.   

    操作针对dbGrid.dataSource.DataSet
    var
      bk: TBook;
    begin
      if adodsVresult.Active and (adodsVresult.RecordCount > 0) then
      begin
        bk := adodsVresult.GetBook;
        //操作数据库这里
     
        if adodsVresult.BookValid(bk) then//如果标记能匹配就找到该纪录
          adodsVresult.GotoBook(bk);
      end;
    end;
      

  2.   

    取一个关键字段先把刷新前的记录值保存然后使用:
     dm.goods_ClientDataSet1.Locate('fieldname',vieldvalue,[]);
    即可
    刚好我现在做的项目中要有这个要求,就自己找的性质,很管用的~~
    下边是我在删除时,保存下一个记录(或上一个)位置前做的工作
             var dd:string;
             DM.goods_ClientDataSet1.Next;
             dd:=DM.goods_ClientDataSet1.Fieldbyname('goodsid').AsString;
             DM.goods_ClientDataSet1.Prior;
      

  3.   

    不好意思,写错个字母~~取一个关键字段先把刷新前的记录值保存然后使用:
     dm.goods_ClientDataSet1.Locate('FieldName',FieldValue,[]);
    即可
    刚好我现在做的项目中要有这个要求,就自己找的性质,很管用的~~
    下边是我在删除时,保存下一个记录(或上一个)位置前做的工作
             var dd:string;
             DM.goods_ClientDataSet1.Next;
             dd:=DM.goods_ClientDataSet1.Fieldbyname('goodsid').AsString;
             DM.goods_ClientDataSet1.Prior;
      

  4.   

    变量记住id号如01
    数据集locate
    adoquery1.locate('id','01',[])
      

  5.   

    我对各位提供的帮助试了一下。 
    kaguo(▲) Guozhi(★★★★★) 的方法比较简单。但我一般会用动态的SQL语句,也就是ADO是公用的,我可以用ADO1先来SELECT出相关的记录,然后对其中的某条记录进行UPDATE,用的也是ADO1,然后再用ADO1对窗口的数据进行刷新。这样的话,其实这个书签是不是还能起作用呢?
    shitianj(仲) 的方法也不错,但也有个问题,因为有些时候刷新出来的数据并不能只用一个关键字段就能区分,这样处理起来就是相对麻烦。
    qizhanfeng(glacier) 的想法,我没有试过,我不知道这个ID是不是数据库里表自带的还是一个设好的字段,如果是后者,那就需要对现有的表结构进行升级了,估计可行性不太大。
    还是谢谢各位的帮助。希望能够找到更好的方法。
      

  6.   

    用Book后,可以定位到原来的记录,但如果数据较多,定位后光标一般会移动到DBGRID的中间,而不是原来的相对位置,这样当滚动浏览数据时会有抖动,用户看了很不舒服。
    如果简单的REFRASH,数据量少时效果不错,光标相对位置可以达到我的要求,但数据量大了后速度太慢,因为对每一条记录都做了SELECT而更新。
    有没有一个折中的办法?
      

  7.   

    Book有没有办法给新增的记录加标签。
    比如我的一个操作是先插入一条记录,然后在DBGrid里将所有的记录都列出来,但我希望能够定位到我新插入的记录上。Book能实现吗?
      

  8.   

    我用了qizhanfeng(glacier) 提供的方法倒是实现了新增记录的定位。
      

  9.   

    变量记住主键的值,不管有几个字段,这样记录就是唯一的,
    因为数据集locate可以对多个字段同时查找的,
    自己看看locate的帮助文件吧