我不停的点击Button1,会报错:无法在此会话中启动更多的事务。
请帮忙解释,并如何该错,万分感谢!
希望在按钮代码中添加检测代码,控制无限制的BeginTrans。附:
测试环境:D5 + Access2000 + ADOButton1的代码:
procedure TForm1.btnBeginTransClick(Sender: TObject);
begin
  ADOConnection1.BeginTrans;
end;

解决方案 »

  1.   

    事务处理是一个程序块,
    ADOConnection1.BeginTrans;//开始一个事务
    .
    .
    .
    ADOConnection1.CommiTrans;当出现问题时Rollback.
      

  2.   

    ADOConnection1.BeginTrans;
    上面这条语句最好写在数据集的BeforePostPost事件中
      

  3.   

    var
      level: Integer;
    begin
      ADOConnection1.BeginTrans;//这就是事务的嵌套层数
    end;一般来说
    一个事务没有完成前
    是不应该再其他启动事务的
    用ADOConnection1.InTransaction判断
      

  4.   

    昏,这样level := ADOConnection1.BeginTrans;
      

  5.   

    晕,
    数据库 SQL Server 2000,
    程序中用 ADOConnection1 处理事务,当事务嵌套时就出错,这是为啥阿?
      

  6.   


    ADO好像本来就不可以嵌套
    所以要
    if not ADOConnection1.InTransaction then
      ADOConnection1.BeginTrans;
      

  7.   

    MSDN 中 ADO 的事务嵌套可是标准用法阿,为啥 Delphi 包装后就不支持了?那你们讨论还有啥意思啊,用到事务嵌套肯定只有 1 层了// 我在 Delphi 中要用到事务嵌套:直接用执行相关 SQL 语句,……呵呵
      

  8.   

    这种东东就像楼上说得
    在SQL中事务
      

  9.   

    有些提供者支持事务嵌套事务,但你所收的意思是事务并发,ado不支持事务并发。if ADOConnection1.InTransaction then
      showmessage('尚有未完成事务,请稍侯!')
    else
      ADOConnection1.BeginTrans;
      

  10.   

    to:budded(System is bussy!) 
    那我执行是什么,是嵌套吗?
      

  11.   

    BeginTrans; //(a);
      BeginTrans; //(b); // 这就嵌套了
      CommitTrans; //(b);
    CommitTrans; //(a);
      

  12.   

    我记得好像一个ADOConnection每次只能运行一个事务。如果你非要嵌套可以多用几个ADOConnection吗。规范的应该写成:
    try
      ADOConnection1.BeginTrans;
      ......
      ADOConnection1.CommitTrans;
    except
      ADOConnection1.RollBack;
    end;