起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: bfaomei

【结贴】[请求]为什么克隆数据集总是丢失一条数据啊! 当我选中三天记录的时候 而克隆

[复制链接]
 楼主| 发表于 2009-8-19 11:56:03 | 显示全部楼层
和上面的Eof没关系 我刚才听同事说 不是这个地方的错误 他说的意思是当你选中第三条的时候 焦点还没离开 这条数据并没有算进去 我测试了一下 当选中的这三条  焦点不在这三条中时 所得的结果正确!
回复 支持 反对

使用道具 举报

发表于 2009-8-19 13:31:35 | 显示全部楼层
哦,那如果是这样的话,就只能自己想办法处理一下了,焦点离开其实就相当于是数据集的post。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-19 14:35:37 | 显示全部楼层
我再问一下啊  怎么可以提高克隆数据集的执行速度啊!我觉得我克隆出来的数据集执行操作的时候 比原始的还慢的多 不知道是什么意思啊!
回复 支持 反对

使用道具 举报

发表于 2009-8-19 16:22:31 | 显示全部楼层
应该不会吧,楼主,慢了多少啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-19 16:37:49 | 显示全部楼层
很慢很慢  都要等一分多钟
回复 支持 反对

使用道具 举报

发表于 2009-8-19 18:52:10 | 显示全部楼层
楼主,您是在做什么操作用了1分钟?
不用科隆数据集,需要多久。

能否给我个demo,我测试一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-19 18:53:02 | 显示全部楼层
我明天给你吧  下班了
回复 支持 反对

使用道具 举报

发表于 2009-8-19 18:57:19 | 显示全部楼层
好的,到时候请描述一下:
是在做什么操作用了1分钟?
不用科隆数据集,需要多久。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-20 09:35:20 | 显示全部楼层
procedure TSALES_RECORD_AUDIT_BETA_FORMDOC.ButtonSELECT_ALLClick(Sender: TObject);
var
   lDataSet:TCloneDataSet;
begin
     IF SELF.DataSetBrokerSALES_RECORD_AUDIT_DT.DataSet.Active THEN
     BEGIN
          try
             if SELF.DataSetBrokerSALES_RECORD_AUDIT_DT.DataSet.State in [TDataSetState.dsEdit,TDataSetState.dsInsert] then
             begin
                SELF.DataSetBrokerSALES_RECORD_AUDIT_DT.DataSet.Post;
             end;
             lDataSet:=TCloneDataSet.Create(nil);
             lDataSet.CloneCursor(SELF.DataSetBrokerSALES_RECORD_AUDIT_DT.DataSet,false,true,false);
            { if DataSetBrokerSALES_RECORD_AUDIT_DT.DataSet.Filter.ToString <> '' then
             begin
               lDataSet.Filtered := True;
               lDataSet.Filter := DataSetBrokerSALES_RECORD_AUDIT_DT.DataSet.Filter.ToString;
             end;}
             lDataSet.Filtered:=true;
             lDataSet.Filter:='MARK IS NULL OR MARK =0';
             lDataSet.First;
             WHILE NOT lDataSet.Eof DO
             BEGIN
               //  if lDataSet.FieldByName('MARK').AsInteger=0 then
             //    begin
                     lDataSet.Edit;
                     lDataSet.FieldByName('MARK').AsInteger:=1;
            //     end;
                 lDataSet.Next;
             END;
          finally
                 lDataSet.Free;
          end;
          self.StatusBarInfo.SimpleText:='标记完成!';
             self.StatusBarInfo.Update;
     END;
end;

为什么我点这个全选按钮的时候 选中的记录总是每次间隔的选中呢?
回复 支持 反对

使用道具 举报

发表于 2009-8-20 10:47:02 | 显示全部楼层
因为不知道具体的需求,不过我你的代码有些问题,
lDataSet.Filtered:=true;
lDataSet.Filter:='MARK IS NULL OR MARK =0';
你是要过滤出MARK IS NULL OR MARK =0 的记录吗?如果是这两句写反了,应该是
lDataSet.Filter:='MARK IS NULL OR MARK =0';
lDataSet.Filtered:=true;
这样的。
另外,如果数据量大循环,应该在循环前和循环后加上DataSet.DisableControls; 和 DataSet.EnableControls;,参考
http://bbs.justep.com/forum.php?mod=viewthread&tid=26856   3楼的代码


至于结果执行的有问题,楼主应该设置断点一步一步看执行哪里没有符合自己的逻辑
例如先看看lDataSet 这个里面数据是否符合自己的需求,一步一步看执行不对
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-19 23:01 , Processed in 0.041353 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表