捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
Midas 源码中的 MergeChangeLog 问题
关键字:Midas MergeChangeLog 索引 修正
来 自:原创
平 台:Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:初级 完成时间:2007/11/18
发布者:chh1999 发布时间:2007/11/18
编辑器:DELPHI7 语  种:简体中文
分 类:数据库 下载浏览:330/9506
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
无图片
使用Midas源码时,发现ClientDataset执行MergeChangeLog后,Delta不为空,跟踪源码,发现TDSBase.ClearChanges代码有问题:
...
 with FChanges do
    for I := Count - 1 downto 0 do
    begin
      P := List^[I];
      SeqNo := P.NewSeqNo;
      pRecBuf := FRecords.List^[SeqNo];
      if ((Attr <> dsRecModified) or (pRecBuf <> pRecOrg)) and (GetRecordRecNo(pRecBuf) = RecOrgNo) then
      begin
        DelChange(P);
        DestroyChangeEntry(P, True, { RollingBack, }DeltaRecs);
        if (pRecBuf <> pRecOrg) then begin
          RemoveRecord(SeqNo, pRecBuf, DeltaRecs);
        end;
      end;
    end;
...
由于TChangeInfo.OldSeqNo,TChangeInfo.NewSeqNo和TDeltaRec.RecNo指示的都是FRecords的Index,所以,只有在FRecords有变化时才需要变更,因此源码应该为
....
      if ((Attr <> dsRecModified) or (pRecBuf <> pRecOrg)) and (GetRecordRecNo(pRecBuf) = RecOrgNo) then
      begin
        DelChange(P);
        if (pRecBuf <> pRecOrg) then begin
          RemoveRecord(SeqNo, pRecBuf, DeltaRecs);
          DestroyChangeEntry(P, True, { RollingBack, }DeltaRecs);
          Dec(RecNo);
        end;
      end;
....
另外,RemoceRecord过程中的修改DeltaRecs[i].RecNo的代码要去除。

修改后,问题解决。
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
Midas 源码中的 MergeChangeLog 问题
chh1999 2007/11/18 下+330/浏+9507 评+0
Midas 中文过滤功能修正2
dengwenyi 2007/10/1 下+1109/浏+10076 评+12
Midas 中文过滤功能修正
wangyunyong 2007/9/23 下+396/浏+7489 评+7
相关评论
共有评论0条
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表