Connection把表锁住了 怎么办?(200分)

  • 主题发起人 主题发起人 wrench
  • 开始时间 开始时间
W

wrench

Unregistered / Unconfirmed
GUEST, unregistred user!
用ADO做一个C/S程序,所有的数据库操作都通过一个Connection对象
用一个ADOCommand对象执行了一条Update语句
更新了一条记录
然后发现这条记录就被锁住了
别的程序就不能查询,也不能更新这条记录
可是该程序自己还可以读写这条记录
这样,几个客户程序一起运行时,就会发生严重的死锁
我认为是Connection对象把该记录锁住了
一定是什么属性没设置好

请大家赐教
 
数据库平台是什么,试试改变锁的类型。
 
SQL Server
表不是我加的
是Connection对象自己加上去的
 
更正:

锁不是我加的
是Connection对象自己加上去的
 
可能是隔离级别的问题,看一看属性IsolationLevel的帮助,
换个别的隔离级别试一试吧。
或者直接在Update语句前启动一个事务,完成后commit,让commit来把
锁释放掉,不过事务多了会增加数据库服务器的log。
 
同意DSM2000.
用多個Session可以解決該問題.
 
做完了马上commit就会好些了.

另外, 打开表应该用shared read 方式, 至少别人还可以读数据.
 
有哪位能讲解一下Connection对象的Mode属性的
各个取值的含义
 
停止使用TTable和RequirLite为True的TQuery
全部使用 TQuery + TUpdateSQL!

经验之谈!

 
cmUnknown 权限未确定.
cmRead 只读权限.
cmWrite 只写权限.
cmReadWrite 可读可写.
cmShareDenyRead 禁止具备读权限的其他人打开联接.
cmShareDenyWrite 禁止具备写权限的其他人打开联接.
cmShareExclusive 禁止其他人打开联接.
cmShareDenyNone 禁止具备任何权限的其他人打开联接.
 
我们这里做了一个大型VC的项目,也碰到过类似的问题,是因为ADO的超时时间太短引起的
可以参考一下。
 
多人接受答案了。
 

Similar threads

回复
0
查看
804
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部