如何在ClientDataSet中调整记录顺序?如上移下移?急啊!望各位大侠指点 如何在ClientDataSet中调整记录顺序?我试过了加一个NO.字段,但是每一动一次就要edit、post两次(本记录NO.-1,上一条记录NO.+1)速度太慢了,求更好的解法,注意:不能和Server有数据交换 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (1)数据库中表的记录的顺序是任意的,根据数据库管理的需要随机存放。读取记录时按照一定的排序条件进行顺序输出(有时不指定任何条件就按照磁盘物理位置先后作为顺序)。所以你调整它们的顺序是没有任何意义的。有效的做法是根据需要建立不同的索引,那么访问数据的速度就会增加,而且索引本身也是排序的。(2)根据你的描述,大概是希望在显示窗口(如DBGrid)中调整行序。事实上,DBGrid通过DataSource与DataSet联接,DBGrid只负责根据DataSet来显示当前需要显示的内容,DBGrid本身并没有任何域来保存数据的值,因此不改变数据集是不可能的。 综上所述,要解决你的问题,应该从速度上考虑。比如增加和调整索引、过滤数据等等。俺曾经在一个项目中遇到过此类问题,似乎解决起来并不麻烦。方法和你的一样。 to cnsuyong(小可)首先:以上两条完全同意,我的情况和你描述的差不多,索引我已经建立了,关键的问题在于这里: LBCds.Edit; LBCds.FieldByName('lb_no').AsInteger :=LBCds.RecNo-1; LBCds.Prior; LBCDs.Edit; LBCds.FieldByName('lb_no').AsInteger :=LBCds.RecNo+1; LBCds.Next;慢阿 看看是不是相关的AfterEdit、AfterPost、Afterxxxx、Beforexxxx、Onxxxx等事件处理程序造成速度很慢;如果不是,再试试Edit之前断开DBGrid与DataSource的链接,Post之后恢复链接;如果不行,再试试利用Filter和Filtered来减少当前显示的记录数;如果还不能达到满意的程度,那么俺也没有更好的办法了。关注。 就你以上的几个语句会有“慢”地感觉?不可能的,clientdataset是基于内存的控件。是不是你关联的事件太多了? to:: chun2000(冷水) ( ) 你是不是在lb_no上建立了索引,然后想将前后二条记录交换位置显示吗?这应该不会慢才对呀.用disabledControls;EnabledControls; 谢谢大家,问题已解决了,原来是有一个AfterScroll在作祟,呵呵,写完他以后忘了,给分给分! 各位,本人也遇到相同的问题,但是本人使用的是ado +本机access数据库,现在要求调整以后的纪录顺序要保存起来,该怎样做啊? 关于DBGRIDEH的行、列顺序号 delphi用idhttp提交信息后截取的数据包末尾怎么都多了个&符号? 银行间数据是怎么通讯的? vclskin安装的问题 请问ADO如连接DB数据库呢???很急 如何将目录下的的文件完全路径加文件名生成一个文件? 如何将QReport做的报表输出为一个打印文件? 如何动态生成一组控件,数量也是动态的? ado访问excel 高分求助------急急 mstts5.1发音如何实现中英文的切换 数据添加问题??急用??
(2)根据你的描述,大概是希望在显示窗口(如DBGrid)中调整行序。事实上,DBGrid通过DataSource与DataSet联接,DBGrid只负责根据DataSet来显示当前需要显示的内容,DBGrid本身并没有任何域来保存数据的值,因此不改变数据集是不可能的。
综上所述,要解决你的问题,应该从速度上考虑。比如增加和调整索引、过滤数据等等。俺曾经在一个项目中遇到过此类问题,似乎解决起来并不麻烦。方法和你的一样。
首先:以上两条完全同意,我的情况和你描述的差不多,索引我已经建立了,关键的问题在于这里:
LBCds.Edit;
LBCds.FieldByName('lb_no').AsInteger :=LBCds.RecNo-1;
LBCds.Prior;
LBCDs.Edit;
LBCds.FieldByName('lb_no').AsInteger :=LBCds.RecNo+1;
LBCds.Next;
慢阿
如果不是,再试试Edit之前断开DBGrid与DataSource的链接,Post之后恢复链接;
如果不行,再试试利用Filter和Filtered来减少当前显示的记录数;
如果还不能达到满意的程度,那么俺也没有更好的办法了。
关注。
不可能的,clientdataset是基于内存的控件。
是不是你关联的事件太多了?
你是不是在lb_no上建立了索引,然后想将前后二条记录交换位置显示吗?
这应该不会慢才对呀.
用disabledControls;EnabledControls;