ADOConnection 有一个Attributes属性,但它有什么用呢?根据MsSqlServer的文档称,
ADO不支持隐性事务。
如果他只支持自动提交事务和显式事务,那么程序不是很难写吗?

解决方案 »

  1.   

    请教高手: 是不是要在每一次数据存取前都BeginTrans然后完事后调用CommitTrans?
      

  2.   

    那样的话,岂不是太繁了?还不如用ODBC好了。我还想请教一下:DBExpress是不是在调用ODBC?
      

  3.   

    你不会连一个insert、update或delete语句都用事务来做吧
    并不是在每一次数据存取前都BeginTrans然后完事后调用CommitTrans
    而是只在真正需要用事务的时候才这样写
      

  4.   

    我知道,但是如果使用自动提交,那么我到了真正需要显式事务时怎么办呢?ADOConnection的Attributes的所谓xaCommitRetaining, abort retaining又是什么意思呢?到底和SQLServer的事务模式有没有关系呢?请不吝赐教
      

  5.   

    不是繁不繁的事,其实你也可以不用BeginTrans,CommitTrans,也可以保存数据到数据库,不过如果是对多表更新,当更新完一个表的时候网络断开或其他一些原因造成程序错误,那就造成了数据不准,比如,自动取款鸡取钱,钱也从存则里扣了,你也没得到钱,所以必须用事务,当其中某一个动作发生错误,一串动作都会恢复成以前的样子!
      

  6.   

    是否每当我Commit或Rollback后,就自动回到自动提交模式呢?
      

  7.   

    1.如果你用事务控制的话,它不会自动提交事务,先将数据存放在Cache中
      只有确认事务才将数据写入到数据库中。或你将ADOQuery/ADODataset等数 据集组件的LockType设为ltBatchOptimistic,只有UpdateBatch才将数据
    写入库中。道理是一样的。2。ADOConnection的Attributes的所谓xaCommitRetaining表示当一个事务处理结束后立即建立一个新的事务处理;abort retaining表示放弃重新建事务。大意如此或许我理解有些正确。
      

  8.   

    Delphi的帮助原文:
    An xaCommitRetaining value specifies that the connection performs retaining commits. Committing a transaction automatically starts a new transaction.An xaAbortRetaining value specifies that the connection performs retaining aborts. Rolling back a transaction automatically starts a new transaction.
      

  9.   

    平时是自动提交的,需要用事务的时候才用事物,commit后还可以自动提交,没有什么别的影响!