DBRichEdit关联ClientDataSet不能保存的Bug

26 篇文章 0 订阅
14 篇文章 1 订阅

    ClientDataSet的最大好处,就是建立能内存表,特别DataSnap三层运用中,主要使用ClientDataSet与运程的服务器中的数据表,建立读取存贮关系。

    在软件的使用中,总有客户反映,一些数据不能保存。

    发现都是使用DBRichEdit,DBMemo长文字的编辑框,修改的数据不能保存。问题出面自己编写的保存ClientDataSet的函数: UpDataClientAll。

    一、UpDataClientAll工作原理

    ClientDataSet的ChangeCount属性,记录的表中被编辑修改的数据行数。就是通过,这一属性判断,是否需要保存。有保存时,通过SQL语句,向服务器上传数据。无则退出。 

    ClientDataSet被修改的数据保存在Delta中,通过对Delta找到待保存行的ID。通过SQL上传数据。
    二、数据行编辑的机制

      1、数据的保存,需要在编辑的情况下,完成编辑(确认完成),才能进行。

      2、数据行中字段的编辑的确认,只要点击另一字段,确认编辑完成。

      3、数据行的编辑确认,需要点击(进入)另一行,确认该条数据行编辑完成。

   三、问题

     1、客户在DBRichEdit中编辑后,直接点击保存,通过UpDataClientAll,出现数据末保存的Bug。

     2、.ClientDataSet与DBRichEdit,DBMemo长文字控件关联时,在DBRichEdit中编辑修改后,没有完成对数据行的编辑确认,ClientDataSe的ChangeCount,没能添加该行。只有进入另一行时,退出该行时,才能ClientDataSet才能记录该行被编辑。

     3、上述情况通过ChangeCount判断,是否保存数据时,就会出错。造成没有修改的行,不保存。

     三、问题的解决

     1、问题是在DBRichEDit或DBMemo类长文字编辑框中,编辑时需要一个确定数据行编辑完成的过程。

     2、经测试在保存前,加入下列代码,可以完成数据行编辑确认:

    ClientDataSet1.Edit;
    ClientDataSet1.Post;

       这样通过Post推送,ChangeCount完成加一。

       这种bug,是对ClientDataSet的编辑机制末能完全理解造成的。通过修改代码,是可以解决的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值