最近在看李维的《Delphi 5.x分布式多层应用系统篇》碰到这样一个问题,当一个用户进入一张表对其中一条记录的一个字段进行了修改。但是在他下载了这条数据以后,递交修改以前,有其他用户进入并修改了同一条记录的同一个字段,并已经保存。这就导致了第一个用户在保存的时候会产生错误,因为OldValue与CurValue的值不一样了,这时候在TClientDataSet的OnReconcileError事件里提供了处理该错误的方法,可以将Action值设置成raSkip,raCancel,raCorrect,raRefresh,raMerge在书中对这几个动作是这样解释的:
raSkip    跳过这笔记录,并把用户对这笔记录的更新保留在Delta中
raCancel  取消这笔记录的更新并且回复所有字段的旧值
raCorrect 把目前需要更新的数据以新的,在事件处理函数中指定的数值来更正错误
raRefresh 取消对这笔数据的所有更新,并且以目前数据表中的字段数值来代替这笔数据的数值
raMerge   把这笔需要更新的数值和目前数据表中的数值合并
但是我对这几个动作的解释是一头雾水,比方说我想进行这样的步骤,我不管目前数据库中的数值是什么,我只想把我这次更新的数据保存进去,也就是说在OldValue与CurValue的值不一样时我也想把NewValue的值更新的数据库中代替现有的CurValue时我应该怎么操作。我试了所有的动作好象都不行。
还有就是当我更新了两笔数据时其中一笔数据发生了上面的错误,而另一笔是正常的,按理说不管我执行什么操作,那笔正常的数据应该能够保存进去的,可是好象两比数据都无法递交。
小弟刚刚接触三层结构,望得到各位大虾的帮助,如以上问题有不妥的地方还请各位帮我指正!