一个事物处理的问题。(100分)

  • 主题发起人 主题发起人 cowboy738
  • 开始时间 开始时间
C

cowboy738

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大鸟:
首先介绍一下我在事物处理的方面的经验,当然我也不能确认是否正确。我在一个程序中,
表单的Active事件中起动了事物处理database1.startTransaction.在"存储"退出按铵中提交操作
database1.commit;在"取消"退出中取消所有query控件的修改database1.rollback;
这样我在表单起动后可以对数据表各种操作:修改,删除,增加,并可以全部取消程序运行
通过。我用的是odbc连接后台数据库。现提出下面问题
我用的数据库是一种叫做pervasive,其中每个表中都有一个字段rkey当新增一条记录时
rkey值自动增加.于是当有两台工作站甲乙在同进运行我写的程序时甲新增了一条记录后,
乙工作站就不能新增了,要等待甲结束事物处理后才可以。这样我的程序只能同时只有一台工
作站使用呀我急急急!!!
有那位高手在事物处理方法善长请回我或email联系
cowboy738@sina.com
QQ:64104408
感激。。。
 
我觉得你的整个事务处理是占用不太多的时间,应该在“确定”按钮中才处理
database1.startTrans
SQL STATments
on error database1.rollback
DataBase.Commit

这样就不会影响到另一台机器的操作了
 
对应该用上面的方法,否则别的机器查询等都要受影响
 
nathanlee
您所提到的方法的确是一个好的建义,在这这前我也想过,不过有一个问题比较麻烦.
因为我在程序中要操件的的表大约有六到八个,这样如果全部放到确定中去一次更新就比较困难
了,因为对表的所有字段的修改都不能直接邦定.比如使用dbedit ,dbgrid控件.因为我要修改的表的
记录不只是当前一条记录呀,如果不在程序起动时起动事物处理,这样一来就不能全部取消对
所有记录的修改了.
您还有更好的办法吗?当然我还想问问您:您在编写程序时是否很少使用控件邦定到字段
进行编辑记录?
谢谢.....
 
你的方法也对,其实你的方法正式所谓的“悲观锁定”算法,它的意思是:先锁定,
然后编辑,直到提交,解锁。此其间任何另外的人不能对你锁定的表进行读写操作。要解决
问题就必须用所谓“乐观锁定“,即:编辑,锁定,提交,解锁。
 
补充一句:提交后取消缓存,这样你就可以进行另外一个完整的事务。
 
接受答案了.
 
后退
顶部