clientdataset.ApplyUpdates(0) 出现'record changed by another user' (和以前贴子的情况不同)(10

  • 主题发起人 主题发起人 swordman_hu
  • 开始时间 开始时间
S

swordman_hu

Unregistered / Unconfirmed
GUEST, unregistred user!
clientdataset.ApplyUpdates(0) 出现'record changed by another user' (和以前贴子的情况不同)(100分)<br />我以前是用"中文window" 的,把数据拿出来修改(资料也是中文的),然后applyupdates 没有问题,
但现在我在"英文window" 上操作,那些中文资料变成乱码(当然这也很正常),
但资料拿出来修改后applyupdates出现'record changed by another user' 的错误
如果资料是英文的没有乱码的就没有问题,我想是不是sql 对资料不能识别,

---------
有什么方法可以解决

 
>>'record changed by another user'
設置 DataSetProvider1的UpdateMode屬性為 upWhereKeyOnly;
SQLDataSet1 或 AdoXX 中, 設置一個字段為 Key!

有時, 只要更親不成功, 就會得到 'record changed by another user' 錯誤!
 
几种情况:
1、在你修改数据库以后别人修改了数据库,这种情况属于正常情况。比较容易理解
2、数据表里面设有缺省值,在ClientDataSet新建记录以后,本地可能没有填入该字段的值
,在applyupdates以后,ClientDataSet中的记录与上面事实上是不一样的(缺省值的地方
)。再次修改后applyupdates,在updateWhereAll的情况下必然会出错。
3、数据字段设成char的时候使用MS sql server也容易引起错误,原因类似 2。
4、数据表里面没有设主键或者唯一索引,似乎会出错。
5、包含有比较特别的字段,比如TDateTime,由于微软和Borland公司对时间的解释
“略有不同”,DateTime记录到毫秒,比如对于:2001-11-4 19:19:01 在微软的数据库
里面可能真正的值是相当于2001-11-4 19:19:00.568 ,如果转成字符串,微软会认为
是2001-11-4 19:19:01 ,但是Borland公司把后面的毫秒四舍五入,
解释成“ 2001--11-4 19:19:00”,在applyupdates的时候就会拿这个字符串
去数据库里面找,微软的ADO引擎(假设用的是ADO)自然是找不到对应的记录。所以
也会引发错误。这个错误是非常隐蔽的,实数字段估计也是相应的原因引起的。
目前Borland提供的D6的2个补丁包里面都没有解决这个问题。
对于5最好的解决方法是指望Borland公司提供补丁修正,目前可以暂时做这样的处理
:1、如果不是多用户同时操作该表或记录,您可以用设定upWhereKeyOnly的方法。
2、多用户时,对于有特别的字段,比如DateTime,在业务允许的情况下,只填写日期。避开
real类的字段,试用其他的字段来代替。
3、不要用applyupdaes或者Delta来处理,使用自己组织 Sql语句。
 
后退
顶部