三层结构中的数据处理?急。。。。。。。 ( 积分: 50 )

  • 主题发起人 主题发起人 racesun
  • 开始时间 开始时间
R

racesun

Unregistered / Unconfirmed
GUEST, unregistred user!
最近在看《Delphi 5.x分布式多层应用系统篇》碰到这样一个问题,当一个用户进入一张表对其中一条记录的一个字段进行了修改。但是在他下载了这条数据以后,递交修改以前,有其他用户进入并修改了同一条记录的同一个字段,并已经保存。这就导致了第一个用户在保存的时候会产生错误,因为OldValue与CurValue的值不一样了,这时候在TClientDataSet的OnReconcileError事件里提供了处理该错误的方法,可以将Action值设置成raSkip,raCancel,raCorrect,raRefresh,raMerge在书中对这几个动作是这样解释的:
raSkip 跳过这笔记录,并把用户对这笔记录的更新保留在Delta中
raCancel 取消这笔记录的更新并且回复所有字段的旧值
raCorrect 把目前需要更新的数据以新的,在事件处理函数中指定的数值来更正错误
raRefresh 取消对这笔数据的所有更新,并且以目前数据表中的字段数值来代替这笔数据的数值
raMerge 把这笔需要更新的数值和目前数据表中的数值合并
但是我对这几个动作的解释是一头雾水,比方说我想进行这样的步骤,我不管目前数据库中的数值是什么,我只想把我这次更新的数据保存进去,也就是说在OldValue与CurValue的值不一样时我也想把NewValue的值更新的数据库中代替现有的CurValue时我应该怎么操作。我试了所有的动作好象都不行。
还有就是当我更新了两笔数据时其中一笔数据发生了上面的错误,而另一笔是正常的,按理说不管我执行什么操作,那笔正常的数据应该能够保存进去的,可是好象两比数据都无法递交。
小弟刚刚接触三层结构,望得到各位大虾的帮助,如以上问题有不妥的地方还请各位帮我指正!
 
最近在看《Delphi 5.x分布式多层应用系统篇》碰到这样一个问题,当一个用户进入一张表对其中一条记录的一个字段进行了修改。但是在他下载了这条数据以后,递交修改以前,有其他用户进入并修改了同一条记录的同一个字段,并已经保存。这就导致了第一个用户在保存的时候会产生错误,因为OldValue与CurValue的值不一样了,这时候在TClientDataSet的OnReconcileError事件里提供了处理该错误的方法,可以将Action值设置成raSkip,raCancel,raCorrect,raRefresh,raMerge在书中对这几个动作是这样解释的:
raSkip 跳过这笔记录,并把用户对这笔记录的更新保留在Delta中
raCancel 取消这笔记录的更新并且回复所有字段的旧值
raCorrect 把目前需要更新的数据以新的,在事件处理函数中指定的数值来更正错误
raRefresh 取消对这笔数据的所有更新,并且以目前数据表中的字段数值来代替这笔数据的数值
raMerge 把这笔需要更新的数值和目前数据表中的数值合并
但是我对这几个动作的解释是一头雾水,比方说我想进行这样的步骤,我不管目前数据库中的数值是什么,我只想把我这次更新的数据保存进去,也就是说在OldValue与CurValue的值不一样时我也想把NewValue的值更新的数据库中代替现有的CurValue时我应该怎么操作。我试了所有的动作好象都不行。
还有就是当我更新了两笔数据时其中一笔数据发生了上面的错误,而另一笔是正常的,按理说不管我执行什么操作,那笔正常的数据应该能够保存进去的,可是好象两比数据都无法递交。
小弟刚刚接触三层结构,望得到各位大虾的帮助,如以上问题有不妥的地方还请各位帮我指正!
 
怎么没人回答啊?这事情可急啊?
 
在服务端建立数据事务处理。
 
属于记录冲突的问题:请查看TDatasetProvider的UpdateMode的值;
另一个问题就是cds.ApplyUpdates(MaxErrors: Integer)中参数MaxErrors的设置,
具体请看《Delphi5开发人员指南》
 
属于记录冲突的问题:请查看TDatasetProvider的UpdateMode的值;
另一个问题就是cds.ApplyUpdates(MaxErrors: Integer)中参数MaxErrors的设置,
--------------------------------------------------------
我对这两个问题也是莫名其妙,,,
非常渴望得到正确的答案,俺也在做三层,对事务处理的使用认识也不太够,
渴望大虾可以写出成功的例子工大家DEMO,
我的QQ236309574,愿意和大家交流!!!
 
如果你不关心多人更新冲突问题,简单设置
TDataSetProvider.UpdateMode:=upWhereKeyOnly
系统接受最后一个人的更新数据
如果担心多人更新冲突
就必须使用OnReconcileError调和冲突问题
 
TDataSetProvider.UpdateMode:=upWhereKeyOnly
应该是通过主键来更新数据吧,如果没有人更改主键值的情况下我想就不会出现更新冲突了
 
http://www.playicq.com/dispdocnew.php?id=22781
你下载看看,
我的取数与回添全是用函数实现的
 
后退
顶部