错误信息:不能在 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回答。
| |
|
|
| |
|
|