ClientDataSet的最大好处,就是建立能内存表,特别DataSnap三层运用中,主要使用ClientDataSet与运程的服务器中的数据表,建立读取存贮关系。
在软件的使用中,总有客户反映,一些数据不能保存。
发现都是使用DBRichEdit的编辑修改的数据不能保存。问题出面自己编写的保存ClientDataSet的函数: UpDataClientAll。
一、UpDataClientAll工作原理
ClientDataSet的ChangeCount属性,记录的表中被编辑修改的数据行数。就是通过,这一属性判断,是否需要保存。有保存时,通过SQL语句,向服务器上传数据。无侧退出。
ClientDataSet被修改的数据保存在Delta中,通过对Delta找到待保存行的ID。通过SQL上传数据。
二、Bug
1、ClientDataSet与DBEdit等VCL关联时,只要的对一条数据行进行编辑修改数据,ClientDataSe的ChangeCount 就是自动加一。
2、ClientDataSet与DBRichEdit关联时,在DBRichEdit中编辑修改后,ClientDataSe的ChangeCount没有反映。
3、现通过ChangeCount判断,是否保存数据时,就会出错。
三、问题的解决
1、在执行ChangeCount函数前,在带有DBRichEdit控件调用函数保存时,加入代码:
ClientDataSet1.Edit;
ClientDataSet1.Post;
强制让ChangeCount加一。
2、使用DBMemo代替DBRichEdit。因为,DBRichEdit 比较好看,有行间距,代替DBMemo是一种习惯。如果使用富文本,不能通过SQL上传数据,只能通过二进制数据方式上传保存了。
这种bug,是编程软件的Bug。编程者,只能通过修补的方式解决。