热情软件屋

 

错误信息:不能在 firehose 方式下启动事务


编号:QA002237
建立日期: 1999年12月13日 最后修改日期:1999年12月15日
所属类别:

wxh:
    操作系统:win98
    编程工具:vb6.0
    问题:我在ado建立的RecorderSet上作事务处理,如果想把处理记录集的每一条记录作为一个完整的事务处理,如何实现?我写下如下代码出错,如何改?
    Sub main()
     Set Rst = New ADODB.Recordset
     strSql = "select * from table "
     Rst.Open strSql, adoCnn
     Do Until Rst.EOF
    
     adoCnnMid.BeginTrans
     ''''''此处出错!(错误信息:不能在 firehose 方式下启动事务)
     proc
    
     If ok Then
     adoCnnMid.CommitTrans
     Else
     adoCnnMid.RollbackTrans
     End If
     Rst.MoveNext
     Loop
    End sub

回答:

    只有用SQL语句执行数据库操作才能使用事务处理。请参阅以下MSDN帮助,另外,只有用SQL语句执行数据库操作才能使用事务处理。
    Tips for Working with Cursors
    Some providers, such as SQL Server, implement a forward-scrolling, read-only (or 'firehose') cursor mode, meaning that they can efficiently retrieve data by keeping a connection open. When working with such providers, the connection could be blocked by another user's transaction. The following examples demonstrate scenarios
    that result in errors.
    dbConn.Open "DSN=SQLForum;UID=sa;PWD=;" 'Example 1
    dbConn.BeginTrans
    RS.Open "SELECT * FROM Message", dbConn
    Set dbCmd.ActiveConnection = dbConn
    Example 1: The problem is that the command object's ActiveConnection is being set to a connection that is forward-scrolling and in 'firehose' mode. This is the same connection involved in the batch mode. The error from the provider will only appear in the Err object, and it will return as unspecified. For example, with the ODBC
    Provider, you will get "Unspecified error".
    dbConn.Open "DSN=SQLForum;UID=sa;PWD=;" 'Example 2
    RS.Open "SELECT * FROM Message", dbConn
    dbConn.BeginTrans
    Example 2: The problem here is that the connection is forward-scrolling and in firehose mode, so it cannot be put into transaction mode. The error returned in the Errors collection from the provider will indicate that it is operating in firehose mode, and can't work in transaction mode. For example, with the ODBC Provider against
    Microsoft SQL Server, you will get the error "Cannot start transaction while in firehose mode".
    dbConn.Open "DSN=SQLForum;UID=sa;PWD=;" 'Example 3
    RS.Open "SELECT * FROM Message", dbConn
    Set dbCmd.ActiveConnection = dbConn
    dbConn.BeginTrans
    Example 3: The problem here is that the connection is in forward-scrolling firehose mode, so it cannot also be involved in a batch mode. The error returned in the Errors collection from the provider will indicate that the transaction could not be started. For example, with the ODBC Provider against Microsoft SQL Server, you will get the error "Cannot start transaction because more than one hdbc is in use".

此问题由Xie回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio