PRB: CursorType Returns adOpenStatic from Server-Side Recordset and Behaves Like a Forward-Only Recordset (306388)



The information in this article applies to:

  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft SQL Server 7.0
  • ActiveX Data Objects (ADO) 2.6
  • ActiveX Data Objects (ADO) 2.7
  • Microsoft SQL Server 2000 (all editions) 8.0
  • Microsoft SQL Server 2000 (all editions) SP1

This article was previously published under Q306388

SYMPTOMS

If you request a static, server-side cursor from a SQL stored procedure, you cannot use MovePrevious or MoveFirst to move backward through the recordset. The cursor exhibits the behavior of a forward-only cursor.

NOTE: This problem only occurs if there are user-defined variables in the stored procedure or SQL commands such as SET NOCOUNT ON.

After you run MovePrevious or MoveFirst, you receive the following error message:
Run-time error '-2147217884(80040e24)';
Rowset does not support fetching backward.

MORE INFORMATION

Steps to Reproduce Behavior

  1. Create a Data Source Name (DSN) named SQLPUBS that points to the SQL Server Pubs database.
  2. In the SQL Server Enterprise Manager, modify the ByRoyalty stored procedure. Add SET NOCOUNT ON immediately following the AS portion of the stored procedure, and save the changes.

    NOTE: This step is important to reproduce the problem.
  3. Create a new Visual Basic Standard EXE project.
  4. From the Project menu, click References, and then select the Microsoft Data Access Objects 2.x Library check box.
  5. Paste the following code in the form load event:
    Dim rs As ADODB.Recordset
        Dim comm As ADODB.Command
        Dim oCon As New ADODB.Connection
        Dim prm As ADODB.Parameter
        Dim StrOut As String
            
        StrOut = ""
        oCon.Open "DSN=SQLPUBS;uid=sa;password=Password1;"
        Set comm = New ADODB.Command
        Set comm.ActiveConnection = oCon
        comm.CommandText = "byroyalty"
        Set prm = comm.CreateParameter("@percentage", adInteger, adParamInput, , 25)
        comm.Parameters.Append prm
        Set rs = New ADODB.Recordset
        
        'rs.CursorLocation = adUseClient
        rs.CursorLocation = adUseServer
          
        rs.Open comm, , adOpenStatic, adLockBatchOptimistic
       'rs.Open "Select * from authors", oCon, adOpenKeyset, adLockBatchOptimistic
           
        Debug.Print "rs.CursorType = " & rs.CursorType
        
        rs.MoveNext
        rs.MovePrevious ' ERROR OCCURS HERE.
    					

REFERENCES

For additional information, click the article numbers below to view the articles in the Microsoft Knowledge Base:

123008 HOWTO: Set Up ODBC Data Sources When Distributing Apps

171146 HOWTO: Create and Remove a DSN in Visual Basic

306385 PRB: CursorType Returns adOpenStatic When You Request adOpenDynamic from a Server-Side Recordset


Modification Type:MajorLast Reviewed:5/8/2003
Keywords:kbpending kbprb KB306388