多台机器同时录入的问题?Delphi3+Sybase(50分)

  • 主题发起人 主题发起人 希臣
  • 开始时间 开始时间

希臣

Unregistered / Unconfirmed
GUEST, unregistred user!
若多台机器同时对一个表录入,如何完全避免个别机器被锁死?
我现在用的都是TQuery控件。


 
使用updatesql+cacheupdate
使用事务控制,更新不成功时 retry

要求高的话可以使用中间层进行队列
更新。
 
又是页锁问题。 :(
你的Query不能太大,要一次性取完整个表,或者
在Query.Open后FetchAll,把所有记录去过来
才可以。
M$ SQL 还可以在select * .... 后加上NOLOCK
避免锁,不过可能会脏读。
 
建议使用带行锁的SQL 7或Oracle 8替代sybase
 
如果用多层结构,可以完全控制写入,不会产生死锁。可以去 www.BORLAND.COM.TW
去找一些资料。
 
你可以说明一下,是否真的发生过"锁死"的情况,
如果有,是什么状态.
 
希臣同志98-12-9 14:31:52还来过本站,
这个问题竟然放在这里不管?
 
谢谢你上次回我帖。
1.你情况与我类似,用你以前回我贴的办法,Sybase 11.9,Row级锁
2.不用CacheUpdate的话,要竞快post,每个写动作都要Try.
3.某些版本的Sybase 有Bugs,与delphi配时要先吃补药,就是Sybase
的EBFxxxx.exe的那东西。tw的Borland主页有讲到一点。
4.吃过捕药后用CacheUpdate的话,要即时
try
Database1.StartTransaction;
Query1.ApplyUpdate;
Database1.Commit;
Query1.CommitUpdate;
excet
Database1.Rollback;
end;
有空给我E_mail,我常去Inprise程序员论坛。

 
自己维护一个用户表。
 
多人接受答案了。
 
后退
顶部