+ -
当前位置:首页 → 问答吧 → Delphi XE +DBX+SQL Server2008 关于事务回滚问题

Delphi XE +DBX+SQL Server2008 关于事务回滚问题

时间:2011-11-27

来源:互联网

请问有没有人知道dbexpress + SQL Server 客户端提交数据如何处理事务?
我客户端用的TSQLConnection来连接,但是不知道怎么处理事务,在网上找了一些方法都不适用。
请告知 dbexpress + SQL Server 的事务回滚方法
我用过的方法

方法一:
var
  tran:TDBxTransaction;
begin
  try
  tran:= dm.SQL_Conn.BeginTransaction(TDBXIsolations.ReadCommitted);
  dm.cds_DBXQuery.Close;
  dm.cds_DBXQuery.CommandText:=xxx;
  dm.cds_DBXQuery.Execute;
  dm.SQL_Conn.CommitFreeAndNil(tran);//执行到这里报raised exception class 
  //EDatabaseError with message 'Invalid transaction Object'.
  except
  On e:Exception do
  begin
  dm.SQL_Conn.RollbackFreeAndNil(tran);
  raise;
  end;
  end;
end;

----------------

方法二: 虽然执行不抱错,但是并没有回滚

var
  tran:TTransactionDesc;
begin
  try
  tran.TransactionID:=1;
  tran.IsolationLevel:=xilREADCOMMITTED;
  dm.cds_DBXQuery.Close;
  dm.cds_DBXQuery.CommandText:=xxx;
  dm.cds_DBXQuery.Execute;
  dm.SQL_Conn.Commit(tran);//替换成 dm.SQL_Conn.Rollback(tran);测试回滚,但遗憾的是没有报错也没有回滚
  except
  On e:Exception do
  begin
  dm.SQL_Conn.Rollback(tran);
  raise;
  end;
  end;
end;

作者: userzhua   发布时间: 2011-11-27

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

作者: userzhua   发布时间: 2011-11-28

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

作者: userzhua   发布时间: 2011-11-28