这个问题问过很多次了,不过还是要问一下。结构为三层结构,中间层为ADOConnection, ADOQuery, DataSetProvider。
客户端为DCOMConnection,ClientDataSet。客户端A,B同时读出数据,A先把数据字段F1的内容由‘XXX’改为'YYY' ,提交。这时数据库中内容已改变为‘YYY’。
B显示仍为‘XXX’,这时B把字段内容改为‘ZZZ’,提交,中间层会报错“...Record not found or changed by another user...”,数据不会得到提交,数据库中的字段仍然是‘YYY’(修改时均使用数据感知控件修改,提交使用ClientDataSet的ApplyUpdates方法)我想如何可以将中间层的错误消息捕获后(或者客户端直接捕获也可以)显示在客户端,提示用户数据已被其他用户修改,需刷新后才可以修改?这里有个限制条件就是:B客户端后来提交的数据一定不能在不知道A已经更改的情况下去更新。不知道以上想法是否可行,谢谢!

解决方案 »

  1.   

    一般情况下,为防止这样的问题,数据库设计的时候有个字段记录修改次数或者修改时间,保存前,中间层里从新判断一下数据库里面该记录的值是否和datasetprovider的oldvalue一致,一致就保存,不一致就提示该数据已经被别人更新过,需要刷新
      

  2.   

    请问hare007(hare)如何将中间层的结果返回?是返回给所有客户端吗?具体事件和步骤怎样?是在DatasetProvider 的OnUpdateError事件里写呢,还是在ADOQuery的OnPostError事件里写?