本帖最后由 userzhua 于 2011-11-27 23:21:46 编辑

解决方案 »

  1.   

    自己顶一下,跟踪发现得到的tran不管是方法一还是方法二都是nil,我就想问问 如何创建事务
      

  2.   

    再注明一下。提交的是SQL语句。
      

  3.   

    最好写在存储过程里面  在存储过程去回滚... 
    本来回滚就是因为数据连接有问题,你还在Delphi 里面回滚貌似不太好吧.
      

  4.   

    有可能BeginTransaction无效,
    或者上个事务还没执行完,开始新事务前,最好先判断一下事务的状态
      

  5.   

    我的也是XE + sql2008,没有问题var
    Transaction: TDBXTransaction;
    OwnsTransaction: Boolean;OwnsTransaction := not Connection.InTransaction;
    if OwnsTransaction then
      Transaction := Connection.BeginTransaction;try  ...
       
      if OwnsTransaction then
        Connection.CommitFreeAndNil(Transaction);
    except
      if OwnsTransaction then
        Connection.RollbackFreeAndNill(Transaction);
    end;
      

  6.   

    楼主第一种方法报错。是因为客户端dm.SQL_Conn用的是DATASNAP连接服务端程序,所以报错,客户端直接连接数据库不会报错。请高手解决,我也不知道应该用什么办法,客户端使用事务。
      

  7.   

    客户端回滚,如楼上的楼上onlyou13(流浪哥哥)提供的处理代码,
    服务器存储过程回滚:
    Create procedure [dbo].[XXXX]
    (...)
    AS
     BEGIN TRAN
     if (...) 
     begin
       ROLLBACK TRAN
       select 'Error!'
       RETURN 1
     end
     ...... SELECT '保存完成!'
     COMMIT TRAN
     RETURN 0