C/S三层结构中客户数据与服务器数据的一致性问题.(100分)

  • 主题发起人 主题发起人 czy_crown
  • 开始时间 开始时间
C

czy_crown

Unregistered / Unconfirmed
GUEST, unregistred user!
在三层结构中如何校验客户端的更新前数据是否和数据库的实际数据一致.<br><br>例如:<br>客户端 A: 读取一条记录 &nbsp; [学号] 60 &nbsp;[成绩] 80, 然后尝试将成绩改为 85<br>在客户端提交 update 前. 改记录被另外一个客户端B 修改为 [学号] 60 &nbsp;[成绩] 50<br><br>我希望在客户端A提交的时候返回一个异常,提示用户更新的数据已经被其他客户端修改过.<br>需要重新读取数据...<br>往高手指点............
 
凑热闹,帮你顶!<br>try<br>&nbsp; (保存代码)<br>except<br>&nbsp; showmessage(adoconnection.error);<br>&nbsp; adoquery1.requery;<br>end;
 
你到以下地址去找找,可能找得到你需要的答案。<br>http://iinsnian.cnblogs.com/<br>这地址里介绍了很多DELPHI的技巧,不知道你的运气好不好。
 
非常感谢,不过想表达的是怎么捕获这种异常情况.<br>在正常情况下,applyupdate 是会直接忽略这种情况直接更新的。....
 
是否在 clintdatset &nbsp;上<br>还是 provider &nbsp;上有设置或方法来实现呢???/
 
跟你说一下吧<br>用delphi开发的三层程序,一般的思维是先从服务器程序取回数据并能Data的方式传给客户端,客户端的ClientDataSet.Data赋上传回的Data值后,就会解析成数据记录,这时你可以添加数据、更改数据最后把ClientDataSet修改后的Delta值传到服务器上去进行更新。<br>服务器接收到Delta后怎么更新呢?把Delta交给TDataSetProvider去更新。<br>你的问题就是TDataSetProvider提交的问题,TDataSetProvider有一个属性:updateMode,<br>它有向个值可选:upWhereAll(全部字段值都要匹配),upWhereChanged(已经改变的字段需要匹配),upWhereKeyOnly(且主键需要匹配)。匹配的意思就是与修改前字段的值相同。如果你需要严格的来控制,可以采用upWhereAll。<br>客户端怎么接收错误信息呢?ClientDataSet.OnReconcileError就是用来处理这类错误的一个事件,详细使用方法你自己去网上查查吧。
 
后退
顶部