调用MS SQL SERVER 2008 R2时在delphi中使用事务时出现问题?

调用MS SQL SERVER 2008 R2时在delphi中使用事务时出现问题?,delphi,transactions,delphi-2010,ado,sql-server-2008-r2,Delphi,Transactions,Delphi 2010,Ado,Sql Server 2008 R2,我需要从Delphi调用一些存储过程,因为它们是相关的,所以我必须使用事务。 但调用时,它总是返回一个错误: '事务不能有多个具有此游标类型的记录集。更改游标类型、提交事务或关闭其中一个记录集。' 此错误仅在MS SQL SERVER 2008中出现,当我使用MS Access时,它工作正常。 有什么问题吗 提前谢谢 更新: procedure TForm1.Button2Click(Sender: TObject); begin if not DM.ADOConnection.

我需要从Delphi调用一些存储过程,因为它们是相关的,所以我必须使用事务。
但调用时,它总是返回一个错误:

'事务不能有多个具有此游标类型的记录集。更改游标类型、提交事务或关闭其中一个记录集。'

此错误仅在MS SQL SERVER 2008中出现,当我使用MS Access时,它工作正常。
有什么问题吗

提前谢谢

更新:

procedure TForm1.Button2Click(Sender: TObject);  
begin  
    if not DM.ADOConnection.InTransaction then  
        dm.ADOConnection.BeginTrans;  
    ADOQuery.LockType := ltBatchOptimistic;  
    ADOQuery.CursorType := ctUnspecified;  
    Try  
        with ADOQuery do  
        begin  
            Close;  
            SQL.Clear;  
            SQL.Text := 'INSERT INTO [UserAction] (UAct_Frm_ID,UAct_Type,UAct_Description'  
              +',UAct_Date,UAct_Time,UAct_Usr_ID)'
              +'VALUES(:UAct_Frm_ID'
              +',:UAct_Type,:UAct_Description,:UAct_Date,:UAct_Time'
              +',:UAct_Usr_ID)';
  Parameters.ParamByName('UAct_Frm_ID').Value := 1;
  Parameters.ParamByName('UAct_Type').Value := 1;
  Parameters.ParamByName('UAct_Description').Value := 'test by Q1';
  Parameters.ParamByName('UAct_Date').Value := completdate(datenow);
  Parameters.ParamByName('UAct_Time').Value := TimeToStr(Now);
  Parameters.ParamByName('UAct_Usr_ID').Value := 1;
  ExecSQL;
  end;
  Except
    DM.ADOConnection.RollbackTrans;
    ShowMessage('RollBack');
    Exit;
  End;
  dm.ADOConnection.CommitTrans;
  ShowMessage('Commite');
end; 
发件人:

分辨率

使用不同的光标类型,更改 指向adUseClient或adUseClient的光标位置 关闭之前的第一个记录集 在同一台计算机上打开另一台计算机 连接/事务

原因

SQL Server只能打开一个 一次只向前移动一个光标 连接,因为SQL Server可以 一次只处理一条活动语句 每次连接的时间

当您尝试打开多个 一次仅转发ADO记录集 单个连接,仅第一个连接 ADO记录集实际上是在上打开的 连接对象。新的,分开的 将为后续操作创建连接 只有游标

一个交易是在一个单独的平台上进行的 联系当你试图打开 多个ForwardOnly记录集 在单个事务中,ADO 尝试打开多个 服务器上的ForwardOnly记录集 交易的连接。一 发生错误的原因是仅SQL Server 在一个磁盘上允许一个ForwardOnly记录集 单连接。因为错误 在手动事务中,您 可能会看到上面的错误。微软 数据访问对象2.1 Service Pack 2 MDAC的更高版本包含 更多信息性错误消息。对于 因此,你可能会看到更多 第二个或第三个错误 留言,上面


尝试使用include-into。

您能发布有问题的代码吗?我使用了所有游标类型,但没有一种有效:未指定、OpenForwardOnly、Keyset、Dynamic、Static