Microsoft KB Archive/306385

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

Article ID: 306385

Article Last Modified on 6/30/2004

-

APPLIES TO


 * Microsoft ActiveX Data Objects 2.5
 * Microsoft ActiveX Data Objects 2.6
 * Microsoft ActiveX Data Objects 2.7
 * Microsoft SQL Server 7.0 Standard Edition
 * Microsoft SQL Server 7.0 Service Pack 1
 * Microsoft SQL Server 7.0 Service Pack 2
 * Microsoft SQL Server 7.0 Service Pack 3
 * Microsoft ODBC Driver for Microsoft SQL Server 3.7
 * Microsoft SQL Server 2000 Service Pack 3a
 * Microsoft SQL Server 2000 Service Pack 1
 * Microsoft Visual Basic 6.0 Enterprise Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 3
 * Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 4
 * Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 5

-



This article was previously published under Q306385



SYMPTOMS
When you use a Microsoft SQL Server stored procedure to request a dynamic recordset with the CursorLocation property set to adUseServer, the recordset is returned with a CursorType of adOpenStatic instead of adOpenDynamic.

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



STATUS
Microsoft is currently reviewing this issue and updates will be added to this article as they become available.



Steps to Reproduce Behavior
 Create a Data Source Name (DSN) named SQLPUBS that points to the SQL Server Pubs database. 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. Create a new Visual Basic Standard EXE project. From the Project menu, click References, and then select the Microsoft Data Access Objects 2.x Library check box.  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 = &quot;&quot; oCon.Open &quot;DSN=SQLPUBS;uid=XXX;password=YYY;&quot; Set comm = New ADODB.Command Set comm.ActiveConnection = oCon comm.CommandText = &quot;byroyalty&quot; Set prm = comm.CreateParameter(&quot;@percentage&quot;, adInteger, adParamInput,, 25) comm.Parameters.Append prm Set rs = New ADODB.Recordset 'rs.CursorLocation = adUseClient rs.CursorLocation = adUseServer rs.Open comm,, adOpenDynamic, adLockBatchOptimistic StrOut = &quot;rs.CursorType = &quot; & rs.CursorType Select Case rs.CursorType Case 0 Debug.Print StrOut & &quot; - adOpenForwardOnly&quot; Case 1 Debug.Print StrOut & &quot; - adOpenKeySet&quot; Case 2 Debug.Print StrOut & &quot; - adOpenDynamic&quot; Case 3 Debug.Print StrOut & &quot; - adOpenStatic&quot; End Select   Modify the following string to reflect your SQL Server UserID and password: oCon.Open &quot;DSN=SQLPUBS;uid=XXX;password=YYY;&quot; </li> Save and run the project. Notice that the following output appears in the local window:

<pre class="fixed_text">rs.CursorType = 3 - adOpenStatic

instead of:

<pre class="fixed_text">rs.CursorType = 2 - adOpenDynamic

</li></ol>

<div class="references_section">