例如,我对一个DBGrid的某条记录进行更新。保存之后,我希望光标所在记录还是我刚才更新过的那条记录,而不是第一条记录。如果是删除操作,那希望保存之后是该记录的后一条记录。请问这要怎么实现?
解决方案 »
- 报内存错误...
- 如果让一个窗体锁定在桌面,同时程序运行时不显示在工具栏?
- 一般出现"无法定位程序输入点于****动态链接库中"的错误是怎么产生的,怎么解决?
- 如何将EXE文件在XP一开机的时候就启动啊,就像QQ一样?
- 关于业务逻辑与数据库分离的问题。
- 我用delphi作了一个ocx控件,但是在其它的机器上不能正常显示,请大侠们帮忙看看啊
- delphi的高手们,来帮一个忙!
- 我用Directshow做了个播放器,但有时缺各中视频的解码器,不知在娜有下载,如何打包?
- 怎么用DELPHI代码删除一个只读文件?
- SQL SERVER 问题,(在线等待)
- 怎样动态产生文本框或按钮?
- 请问一下,怎么判断网页打开完毕?
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;
dm.goods_ClientDataSet1.Locate('fieldname',vieldvalue,[]);
即可
刚好我现在做的项目中要有这个要求,就自己找的性质,很管用的~~
下边是我在删除时,保存下一个记录(或上一个)位置前做的工作
var dd:string;
DM.goods_ClientDataSet1.Next;
dd:=DM.goods_ClientDataSet1.Fieldbyname('goodsid').AsString;
DM.goods_ClientDataSet1.Prior;
dm.goods_ClientDataSet1.Locate('FieldName',FieldValue,[]);
即可
刚好我现在做的项目中要有这个要求,就自己找的性质,很管用的~~
下边是我在删除时,保存下一个记录(或上一个)位置前做的工作
var dd:string;
DM.goods_ClientDataSet1.Next;
dd:=DM.goods_ClientDataSet1.Fieldbyname('goodsid').AsString;
DM.goods_ClientDataSet1.Prior;
数据集locate
adoquery1.locate('id','01',[])
kaguo(▲) Guozhi(★★★★★) 的方法比较简单。但我一般会用动态的SQL语句,也就是ADO是公用的,我可以用ADO1先来SELECT出相关的记录,然后对其中的某条记录进行UPDATE,用的也是ADO1,然后再用ADO1对窗口的数据进行刷新。这样的话,其实这个书签是不是还能起作用呢?
shitianj(仲) 的方法也不错,但也有个问题,因为有些时候刷新出来的数据并不能只用一个关键字段就能区分,这样处理起来就是相对麻烦。
qizhanfeng(glacier) 的想法,我没有试过,我不知道这个ID是不是数据库里表自带的还是一个设好的字段,如果是后者,那就需要对现有的表结构进行升级了,估计可行性不太大。
还是谢谢各位的帮助。希望能够找到更好的方法。
如果简单的REFRASH,数据量少时效果不错,光标相对位置可以达到我的要求,但数据量大了后速度太慢,因为对每一条记录都做了SELECT而更新。
有没有一个折中的办法?
比如我的一个操作是先插入一条记录,然后在DBGrid里将所有的记录都列出来,但我希望能够定位到我新插入的记录上。Book能实现吗?
因为数据集locate可以对多个字段同时查找的,
自己看看locate的帮助文件吧