出现‘Record changed by another user’错误信息怎么办?(200分)

  • 主题发起人 主题发起人 ji_peng
  • 开始时间 开始时间
J

ji_peng

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用TClientDataSet作前台程序,用DCOM连接中间层,在我第一次修改TClientDataSet
中的某条记录时,一切正常,但当我保存(用ApplyUpdates函数)后第二次又修改这条记
录时,会出现‘Record changed by another user’的错误信息,我应该怎么办呢?请大
虾们指教。
 
这样的问题我还没有遇见过
你用ApplyUpdates函数是用的ApplyUpdates(0)吗?
我想应该是先POST,然后再ApplyUpdates(0)是不会出错的
你再试试吧!
 
我在做两层时碰到过这种问题。
很明显,你用缓存更新的时候,其他用户(程序)对你要提交修改的数据也进行了修改,就
会报你所说的错!
 
Change UpdateMode to upWhereKeyOnly.
 
你服务器端是用的TABLE吧?
如果是的话,TABLE 要有PRI KEY,
如上所说 set table 的UpdateMode to upWhereKeyOnly。

如果TABLE 没有 PRI KEY 的话 ApplyUpdates 后再refresh 一下,再修改。


 
当 DataSetProvider.UpdateMode=upWhereAll 时,
update时 where 是指定全部字段,比如,
你有a、b、c 3个字段,修改了c字段,在app server中
修改的命令是
update ... set c=新c where a=旧a and b=旧b and c=旧c
如果 旧的a、b、c之一 已经被其他人改掉了,那where就
找不到合适的记录来修改了。所以报告“记录被其他人修改”,
这个问题和“锁定”是无关的。

当 DataSetProvider.UpdateMode=upWhereKeyOnly 时,
update时 where 是指定key字段,比如,
你有a、b、c 3个字段,修改了c字段,a是key field
在app server中修改的命令是
update ... set c=新c where a=旧a (只比较a字段)
你的程序应该设计为客户修改不到主键字段的值,这样
你的客户只能修改到其他字段的值,其他字段不会出现
在where中,就不会出现你说的问题了。

(注意如果你的表原来没有主键的,需要双击dataset,
添加你的所有field,在有唯一值的field的 ProviderFlasgs 属性
里面 InKey 设置为 true (该field必须是有唯一值的,能相当于主键的,
也就是能唯一确定该行记录的))

 
我用的是ado,做的是c/s结构也会有这样的问题,那我应该怎么做?
 
ji_peng:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
 
自己用StringGrid写,不过的写很多代码,我一般用DBGrid来显示,用Edit来编辑。
 
请尽快结束你的贴子,否则我可要痛下杀手了^-^
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
970
import
I
后退
顶部