Record change by another user ???(100分)

  • 主题发起人 主题发起人 evon
  • 开始时间 开始时间
E

evon

Unregistered / Unconfirmed
GUEST, unregistred user!
扂腔最宒岆婓 NT server (茞极ㄩ衄嗣衡CPU珨堍釬ㄘ硒俴
摽傷蟀諉 Orcale Database Server

妏蚚 Tquery 釬 Update 奀 都堤珋涴欴腔捅洘
" Record change by another user " error code=10259

扂洷咡婓楷汜渣昫摽ㄛ夔載劂眕涴捩訧蹋眻諉葡裔裁
祥剒笢剿最宒ㄐ

祥眭睡釬ㄛ詢忒硌諒ㄐ
 
i can't read your word. please repaste it!
 
evon:could u use english?
 
干脆用big5也许还清楚点
 
Sorry .....
I believe when I am working on multi Cpus I sometimes got the message "
The record has been changed by another user" when I am using Tquery
applyupdates. The point is that I should handle the "the record has
been changed by another user" error without fail ,how to do that ?
Thanks.

 
这个错误本身恐怕不能忽略,错误信息一定是在您向DBMS提交了update语句时产生
的,如果其他用户和您都要更新同一个字段,更新确实会导致其他用户发生丢失修
改,那么您应该考虑在检索数据之前给记录加上排他锁;如果其他用户和您更新的
是不同的字段,那么您应该仔细研究以下您的更新语句的where 字句。
 
你用的是否Paradox ?
 
with Quert1 do
begin
Database1.StartTransaction;
try
ApplyUpdates; {try to write the updates to the database};
Database1.Commit; {on success, commit the changes};
except
Database1.Rollback; {on failure, undo the changes};
raise;
end;
CommitUpdates; {on success, clear the cache}
end;
如上所示,你可能没有清除Cache.
 
除非加锁,否则无法避免.
如果与Update相关,可自己设计一张表来加锁实现.
 
ORACLE应该可以实现行级锁!
锁定后再修改提交就可以了.

 
this problem is a bug because of float number. the only solution is
to avoid using float type in table.

for example to explain the issue:
a table in server. a record is (a 12.34567 float, b "XXX" char)
in client when u change the b and apply updates, bde process the
request. if u use sql moniter, u'll find after bde process the float
12.34567 changed to 12.3445 because of float operation. so error
occurs "the record has been changed by another user".
 
To Liuz:
could this problem in Oarcle or Sql Server ?
 
我用SQL MONITOR看过,ORACLE没有问题,是不是
SQL SERVER中锁机制与DELPHI相处有问题?
 
支持spear的说话,就用启动事务的方法,不过可以加可循环,当Update不成功时重试。
另外的办法,就是定义存储过程,通过调用后台的存储过程来Update。
 
使用存储过程执行更新操作,在更新前在过程内使用SELECT语句
查找是否可更新,使用OUTPUT参数返回状态
 
a u using Paradox tables or FoxPro tables???
in almost case, C/S DataBase does not raise
the error that u saw.
OK?
 
回应大家:
我使用的Database Server 是 Oarcle 7.3.3 面对这个问题
似乎您们所说的我都有作了!
到最後 我是使用 UpdateSQL中作拦截的动作
另外询问一下
1: 在Table 中如何得知这个 DataField 是属於 Is Not Null(在程序中得知);
2: 在TQuery中的 OnPosterror 和ONUpdateError有何不同!
另外我想在Onposterror中的 TdataAction 中为何没有如同TupdateAction
有 uaApplied的功能,如果要做到可否给个意见!
谢谢!
 
数人数得好累。。。:-(((
 
这个问题我在软件开发过程中已经遇到过,一直困扰着我,一次,我抱着试着看的方法,另开一个TDataBase构件,问题就得到解决了,以后就再也没有出现
Record change by another user 的错误了,
请注意:我使用的TQuery构件对SQL Server数据库进行存取。
 
事务可以实现类型锁一样的功能?能够锁定一张表?不行吧?
 
后退
顶部