最近在做一个系统,用存储过程实现插入数据,不过要插入主表和明细表两个表,所以当插入主表成功,而明细表失败的时候,就要遇到事务回滚的问题,怎么实现呢??希望高手指教一二,必送高分!以次答谢!

解决方案 »

  1.   

    我是在插入主细表的时候分别调用了同一个存储过程,但是输入了不同的参数,所以同一个存储过程应该可以控制他什么时候commit,想在delphi里面实现,不想在存储过程里实现。比如proc.autocommmit:=false;如果成功手动提交,但是好像不成功,各位能不能提供一下成功的例子,最好有源码啊!!多谢多谢
      

  2.   

    把这个批处理的前面
    BEGIN TRAN
    COMMIT TRAN使用事务执行失败的话事物会回滚,不过最好在存储过程的开始启用一个选项
    set xact_abort on
      

  3.   

    在D的程序中控制也好办的,
    你可以在添加主表内容从表内容的操作时用异常处理try
    except 这样在操作失败的时候,可以抛出异常,当然也可以人为判断程序执行的结果
      

  4.   

    try
        DM.ADOConnection1.BeginTrans;
        query.Close;
        query.SQL.Clear;
        query.SQL.Add('delete from table_ls');
        query.ExecSQL;
        
        DM.ADOConnection1.CommitTrans;
    except
        MessageBox(handle,'系统发生错误,请重试或关闭系统!','提示信息',MB_OK+MB_ICONEXCLAMATION);
        DM.ADOConnection1.RollbackTrans;
    end;//end try
      

  5.   

    直接用事务包起操作就行了
    begin tran  //开始事务
    commit tran //没错,提交事务rollback tran  //有错,回滚事务
      

  6.   

    纯接分..
    支持 Tensionli() 的答案!
      

  7.   

    事务处理分3种SQL SERVER (T-SQL) 的      -----最底层COM ADO 的     ---------中间层DELPHI ADO 组件的      -------最后的 DELPHI 开发应用层方法都不一样,而且级别也不同。
      

  8.   

    以下是 JET SQL  ADO SQLSERVER 3种的底层事务处理方法关于此主题请参考:
        《查询》什么是事务处理?怎么进行事务处理?
        http://access911.net/index.asp?u1=a&u2=71FABE1E13DC
    关于此主题请参考:
        关于事务处理《查询》
        http://access911.net/index.asp?u1=a&u2=73FABF1E14DC