错误提示:无法在此会话中启动更多的事务.
我使用的是SQLSERVER2000的数据库.
哪为高手知道为什么?

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/2853/2853452.xml?temp=.3599207
      

  2.   

    典型问题:你有没有提交的事务(有可能是因为提交时发生了异常而你丢掉了这个异常),而且试图在Begin另一个事务。
    方案:ADOConnet.BeginTrans和ADOConnet.RollbackTrans/conmit放在一个函数中,并且用try finally机制保证事务必定会被关闭。
    呵呵,仅供参考
      

  3.   

    注意格式的正确,保证每个事务都提交了ADOConnection1.Begintrans;
    try
     //代码
     //...
     ADOConnection1.Committrans; //这一句不能掉
    except
     ADOConnection1.Rollbacktrans;
    end;另外,在调试程序的时候,Delphi会在每个异常处中断。如果你用了try...except则在运行exe的时候一切会正常。如果调试的时候也不想中断,菜单 tools\debugger options, Language exceptions 页,将Stop on Delphi Exceptions的钩去掉就可以了
      

  4.   

    ADOConnet.RollbackTrans   放在except 里面,只有产生异常时才回滚
      

  5.   

    正确的处理应该是:
      if conn.intransaction=true then RollbackTransaction
      

  6.   

    或者开展事务:
    if conn.intraction=true then
    begin
      conn.rollback;
      conn.begintrans;
    end
    else
      conn.begintrans;
      

  7.   

    我现在也碰到这个问题:
      我是用三层结构,服务器端使用adoconnection连接到sqlserver2000,然后想在
    datasetprovider的beforupdaterecord中使用语句:
      try
        adoconnection.begintrans;  //这一句出错,错误信息如下
        ....
        adoconnection.committrans;
      except
        ....
      end错误信息如下:
        无法在此会话中启动更多的事务我在启用adoconnection.begintrans前用判断adoconnection.InTransaction是false,
    为什么?