ReconcileError(50分)

  • 主题发起人 主题发起人 wlmmlw
  • 开始时间 开始时间
W

wlmmlw

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么在TClientDataSet的ReconcileError事件里将Action赋值为raCorrect总不能正确执行?
 
你必须自己用代码先对数据进行更正,再将Action赋值为raCorrect将数据更新回
数据库。如果不进行处理,直接将Action赋值为raCorrect试图将数据更新回数据
库,当然将再次触发错误.
 
Delphi自带一个更正错误的窗口,我是在OnReconcileError中调用该窗口来进行更正操作的,
不知这样可不可行?
 
用reconcile error对话框也一样。
例如,你修改一条记录的主键值为另一个数,但该数为另一条记录的主键,这时将产生
主键冲突,在reconcile error对话框中你可以看见修改后的值和原来的值,这时你可以
采取的行动为:skip,cancel,correct.如果你选择correct,你必须将modified value修改
为另一个不产生冲突的值.如果直接点击ok,当然不行.
 
一个服务器,两个客户端程序在运行:
1.客户端程序A取得记录原始值3;
2.客户端程序B取得记录原始值3;
3.客户端A将记录值改为10,并作保存成功;
4.客户端B将记录值改为5,进行保存操作。
很明显,到了第4步的时候就会提示出错,因为服务器端无法定位记录值为3的记录,
请详细说明此时该如何处理?谢谢!
 
如果有哪位高手愿详细的接解释并给一个例子将会有300分的回报。
请多指教。
 
有事务处理应该可以解决
 
如果你不想理会记录已被别人修改
TdatasetProvider.UpdateMode:=UpdateWhereKeyOnly
可以避免一些reconcile error,除非key也被改变了
 
我不是想避免,我是说两个人先取出同一个东西,第一人改了东西,存了盘,
后一个改了东西,我也想后一个人也能存盘。
请帮助出主意,谢谢!!!!
 
还不理解吗?
TdatasetProvider.UpdateMode:=UpdateWhereKeyOnly
就行了
 
當然可以,樓上的講了,UpdateMode := upWhereKeyOnly
例如: 有兩個人修改客戶資料,假設以編號為主關鍵字,一般不會修改主關鍵字﹔
(如果有參照完整性約束,也可以不允許修改已被引用的客戶編號;)
而更新定位時則以主關鍵字定位,這樣就不會出現找不到的情況了。
update Customers set ...where ID=1
 
接受答案了.
 
后退
顶部