Microsoft KB Archive/224424

= How To Implement Visual Basic COM Objects Returning Recordsets =

Article ID: 224424

Article Last Modified on 7/1/2004

-

APPLIES TO


 * Microsoft Active Server Pages 4.0
 * Microsoft ActiveX Data Objects 1.5
 * Microsoft ActiveX Data Objects 2.0
 * Microsoft ActiveX Data Objects 2.1 Service Pack 2
 * Microsoft ActiveX Data Objects 2.5
 * Microsoft ActiveX Data Objects 2.6
 * Microsoft ActiveX Data Objects 2.7
 * Microsoft Visual Basic 5.0 Learning Edition
 * Microsoft Visual Basic 6.0 Learning Edition
 * Microsoft Visual Basic 5.0 Professional Edition
 * Microsoft Visual Basic 6.0 Professional Edition
 * Microsoft Visual Basic 5.0 Enterprise Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition
 * Microsoft Internet Information Server 4.0
 * Microsoft Internet Information Services 5.0
 * Microsoft Data Access Components 2.5
 * Microsoft Data Access Components 2.6
 * Microsoft Data Access Components 2.7

-



This article was previously published under Q224424



SUMMARY
This article describes, by example, how to implement a Visual Basic Component Object Model (COM) Object that returns a recordset to Active Server Pages (ASP).

Implementing this incorrectly can result in memory leaks or one of the following errors:

The operation requested by the application is not allowed if the object is closed.

-or-

Type Mismatch

-or-

error 'ASP 0115' - A trappable error occured in an external object



MORE INFORMATION
Use the following steps to implement a method that returns a recordset from a Visual Basic COM Object to Active Server Pages:  Create a Visual Basic ActiveX DLL project called PassRsPrj. Add a class module and change its name to PassRsObj.  Implement the following method:

Note You must change the UID and the PWD values to the ones that are used on your system.

Public Function TestRs as ADODB.Recordset Dim rsObj As ADODB.Recordset Dim cnObj As ADODB.Connection

set rsObj = New ADODB.Recordset set cnObj = New ADODB.Connection

'Open connection to database cnObj.Open("DSN=pubs;uid= ;pwd= ") 'To use disconnected Recordset you must use client side cursors rsObj.CursorLocation = adUseClient

rsObj.Open "select * from authors", cnObj, adOpenKeyset, _ adLockOptimistic, adCmdText 'Disconnected recordset Set rsObj.ActiveConnection = Nothing

'Set return value Set Testrs = rsObj 'Clean up resources cnObj.Close Set cnObj = Nothing End Function   Create an ASP page with the following code: <%  Dim rsTest, oTestPassRs

Set oTestPassRs = Server.CreateObject("PassRsPrj.PassRsObj") Set rsTest = oTestPassRs.TestRs

Do      Response.Write ( "Value in Record = " & rsTest(1) & "" ) rsTest.MoveNext Loop until rsTest.EOF

rsTest.Close Set rsTest = Nothing Set oTestPassRs = Nothing %>                   

