如何将ClientDataSet.Delta置空?

wangwpf 2003-09-11 12:07:26
我做了一个COM+的程序,将ClientDataSet.Delta发到服务器更新后,第二次将ClientDataSet.Delta将发往服务器更新的时候,便提示出错说记录未找到,或另一用户修改的记录,再在找到原因中delta中还保存着上将更新过的记录,可是不知道有什么方法能清空delta,并且使data中是更新后的值??
...全文
138 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangzi8 2003-09-11
  • 打赏
  • 举报
回复
....
michaelpeng7799 2003-09-11
  • 打赏
  • 举报
回复
十在不行,就动态创建cds或dsp,用完free了,用时再create,这样准保data和delta都是空的。不过事件就麻烦了,要在创建前写好了用的事件,然后事件副职。myCds.xxx事件:=已完好的xxx事件。
Zengqf_W 2003-09-11
  • 打赏
  • 举报
回复
ClientDataSet.MergeChangeLog用来清空Delta的值。
但是如果想从服务器上把更新的结果写回数据库还要自己动手作的事情。
xjlqlqlq 2003-09-11
  • 打赏
  • 举报
回复
ClientDataSet 调用数据合并方法或回滚更新方法,
其Delta 就为空了。。。
wangwpf 2003-09-11
  • 打赏
  • 举报
回复
我没有用ClientDataSet.ApplyUpdate(0)方法,我是做的COM+组件,是手工将ClientDataSet.Delta发到服务器上的,用的是COM+上自定义的SetReport方法,如:
客户端:
SetReport(ClientDataSet.Delta,iMaxError,iOutError);
服务端:
DataSetProvider.applyUpdate(Delta,iMaxerror,iouterror);
这样手工更新后ClientDataSet.Delta的值不会改变
michaelpeng7799 2003-09-11
  • 打赏
  • 举报
回复
很遗憾,.Delta是只读的。
有点没看明白你的意思,如果将cds.Delta发到服务器更新成功后,cds.Delta就会自动清空,如果出错,在cds和dsp的出错事件中可以得到出错的记录值,也是以Delta包存放的。

你是不是碰到了多表更新的问题,多表更新时有时就会碰到“提示出错说记录未找到,或另一用户修改的记录,”这种情况,具体是因为有些字段的值在更新时还没有或不确定造成的,可以将dsp.updatemode改成upwherechanged试试。另外可以用TField.providerTag来控制字段是否能被保存。以前有相关粘子,找找。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧