请问个你们都有可能碰到过的问题,当别的客户端更改了服务端的某条记录时候,你也同时更改了这条记录,这时候当然会出错,那么请问我如何得到其它客户端更改后的记录值?(

  • 主题发起人 主题发起人 xhyph
  • 开始时间 开始时间
X

xhyph

Unregistered / Unconfirmed
GUEST, unregistred user!
请问个你们都有可能碰到过的问题,当别的客户端更改了服务端的某条记录时候,你也同时更改了这条记录,这时候当然会出错,那么请问我如何得到其它客户端更改后的记录值?(50分)<br />在三层结构中
比方说有个Table1 有个字段是 工资
某条记录工资是900,我想改成1000
当我下载数据,更改工资的之前,工资已经被别的客户端更改为800
这时候服务端的工资也就成了800,我这时候ApplyUpdate(0)当然会在
ClientDataSetReconcileError出现错误
(DataSet: TClientDataSet;
E: EReconcileError;
UpdateKind: TUpdateKind;
var Action: TReconcileAction);
请问我如何得知这时候服务端的最新的'工资'到底是多少?
而且如果我一定要改成1000,或者放弃这次修改,该怎么做?
 
当一个客户端修改数据时,应该锁定要修改的记录。
而当程序中要修改记录时,首先应检查当前记录是
否被锁定,如果被锁定就提示不能修改。
 
lock()
Change()
unlock()
 
但是如果是别人在服务端的数据库里更改呢?比如说在 SqlServer2000里
 
我主要用pb+sybase开发系统,如果在服务端的数据库里更改的话,
sybase数据库自动会让客户端取得最新数据。
我想sql肯定也有此功能。
 
我是用Delphi+sql,根据MIDAS的理论,当客户端得到数据后,就和服务端没关系了
客户端根本就不知道服务端在干什么,别说服务端的数据库了
客户端只有在上传添加数据的时候才知道这个数据已经被更新过了
只会回传个错误,我是想知道如何处理这个错误,如何从这个错误中得到最新的数据是什么
 
中间层的dataset,双击dataset进入field editor
把不是关键的字段(比如工资)的ProviderFlags的pfInWhere改成false
而那些关键的字段(比如 职工号)的ProviderFlags的pfInWhere保持true
那么修改纪录的时候,它生成的sql命令的where段仅包含 职工号 等关键的字段
那么别人修改了工资等非关键字段,不会影响你的操作
 
我是说怎么在ClientDataSetReconcileError错误里知道 那些信息
 
onreconcileerror事件中:
oldvalue()
newvalue()
curvalue()
 
如果一个数据表可以被多人更新的话,保证不出错的最稳妥方法是用存储过程来实现
数据的更改
 
多人接受答案了。
 
后退
顶部