Wrox Home  
Search P2P Archive for: Go

  Return to Index  

activex_data_objects thread: Disconnected Recordsets (ADO 2.0)


Message #1 by "Parimel" <selvarap@a...> on Wed, 23 May 2001 20:17:20
Hi

I have a very basic question on disconnected recordset.

What does it really mean?

Does it mean it is disconnected from the connection object, so that 

the "connection object" is available for other processes

OR

Does it mean it has no connection whatsoever to the database and 

the "connection" is available for other processes

(Note diff. in the quoted words)

Take the sample code of disconnected recordset



    Set mobjConn = New ADODB.Connection

    mobjConn.Open "DSN=mydsn"

        Set robjRS = New ADODB.Recordset

        robjRS.ActiveConnection = mobjConn

        robjRS.CursorLocation = adUseClient

        robjRS.CursorType = adOpenStatic

        robjRS.Open "Select * from something" , , , adLockReadOnly

        ***Set robjRS.ActiveConnection = Nothing**

        ''''mobjConn.Close

Now, If I close the connection after getting my recordset(uncomment the 

last line), then I lose all the records in the recordset, which means the 

recordset still has the knowledge of the database information and holds 

the connection in some form.



I use ADO 2.0 and I'm fairly confident that this holds good for higher 

versions as well.



Please correct me if I am going wrong on the understanding of disconnected 

recordset.



-Parimel
Message #2 by "Pete Davis" <pdavis@q...> on Wed, 23 May 2001 20:03:37 -0400
Basically, it means this: If you have a disconnected recordset, and you

close the connection, you still have the records in the recordset. They are

no longer "connected" to the underlying database. You can do whatever you

want with them. There are then issues regarding "reconnecting" the data to

the database if you want to then update it.



We use disconnected recordsets a great deal. Here's an example: We have a

COM+ system. All access to our database is done through COM+ components on

the server. The client application, itself, never deals directly with the

database. If the client wants to retrieve data from the database, it calls a

component, which retrieves the recordset, disconnected, and returns that

recordset to the caller.



The connection is freed by the COM+ component, and generally, the COM+

component is freed by the client. The COM+ component is, therefore,

stateless. This means, not only is the connection now available for another

user, but so is the COM+ component. If later, the user wants to make an

update, they would then re-instantiate the COM+ component, pass the updated

recordset, and that component would then re-connect it to the database and

perform the update.



Pain in the butt, but very efficient and scalable.



Pete



----- Original Message -----

From: "Parimel" <selvarap@a...>

To: "ActiveX_Data_Objects" <activex_data_objects@p...>

Sent: Wednesday, May 23, 2001 8:17 PM

Subject: [activex_data_objects] Disconnected Recordsets (ADO 2.0)





> Hi

> I have a very basic question on disconnected recordset.

> What does it really mean?

> Does it mean it is disconnected from the connection object, so that

> the "connection object" is available for other processes

> OR

> Does it mean it has no connection whatsoever to the database and

> the "connection" is available for other processes

> (Note diff. in the quoted words)

> Take the sample code of disconnected recordset

>

>     Set mobjConn = New ADODB.Connection

>     mobjConn.Open "DSN=mydsn"

>         Set robjRS = New ADODB.Recordset

>         robjRS.ActiveConnection = mobjConn

>         robjRS.CursorLocation = adUseClient

>         robjRS.CursorType = adOpenStatic

>         robjRS.Open "Select * from something" , , , adLockReadOnly

>         ***Set robjRS.ActiveConnection = Nothing**

>         ''''mobjConn.Close

> Now, If I close the connection after getting my recordset(uncomment the

> last line), then I lose all the records in the recordset, which means the

> recordset still has the knowledge of the database information and holds

> the connection in some form.

>

> I use ADO 2.0 and I'm fairly confident that this holds good for higher

> versions as well.

>

> Please correct me if I am going wrong on the understanding of disconnected

> recordset.

>

> -Parimel



Message #3 by "Selvaraju, Parimel" <selvarap@a...> on Thu, 24 May 2001 08:42:11 -0500
Well, the situation I'm trying to get disconnected recordset is using the

command object. I run a stored procedure which returns a recordset and I

disconnect from the database. This is where I lose my recordset.



    lobjComm.CommandType = adCmdStoredProc

    lobjComm.CommandText = vstrSPName

    Set lobjComm.ActiveConnection = mobjConn   

    Set lobjRS = New ADODB.Recordset

    lobjRS.CursorLocation = adUseClient

    lobjRS.CursorType = adOpenStatic

    lobjRS.Open lobjComm

Does this mean I can't have a disconnected recordset if I use the command

object? Is this realted to the OLE-DB provider?



Thanks,

-Parimel



-----Original Message-----

From: Pete Davis [mailto:pdavis@q...]

Sent: Wednesday, May 23, 2001 7:04 PM

To: ActiveX_Data_Objects

Subject: [activex_data_objects] Re: Disconnected Recordsets (ADO 2.0)





Basically, it means this: If you have a disconnected recordset, and you

close the connection, you still have the records in the recordset. They are

no longer "connected" to the underlying database. You can do whatever you

want with them. There are then issues regarding "reconnecting" the data to

the database if you want to then update it.



We use disconnected recordsets a great deal. Here's an example: We have a

COM+ system. All access to our database is done through COM+ components on

the server. The client application, itself, never deals directly with the

database. If the client wants to retrieve data from the database, it calls a

component, which retrieves the recordset, disconnected, and returns that

recordset to the caller.



The connection is freed by the COM+ component, and generally, the COM+

component is freed by the client. The COM+ component is, therefore,

stateless. This means, not only is the connection now available for another

user, but so is the COM+ component. If later, the user wants to make an

update, they would then re-instantiate the COM+ component, pass the updated

recordset, and that component would then re-connect it to the database and

perform the update.



Pain in the butt, but very efficient and scalable.



Pete



----- Original Message -----

From: "Parimel" <selvarap@a...>

To: "ActiveX_Data_Objects" <activex_data_objects@p...>

Sent: Wednesday, May 23, 2001 8:17 PM

Subject: [activex_data_objects] Disconnected Recordsets (ADO 2.0)





> Hi

> I have a very basic question on disconnected recordset.

> What does it really mean?

> Does it mean it is disconnected from the connection object, so that

> the "connection object" is available for other processes

> OR

> Does it mean it has no connection whatsoever to the database and

> the "connection" is available for other processes

> (Note diff. in the quoted words)

> Take the sample code of disconnected recordset

>

>     Set mobjConn = New ADODB.Connection

>     mobjConn.Open "DSN=mydsn"

>         Set robjRS = New ADODB.Recordset

>         robjRS.ActiveConnection = mobjConn

>         robjRS.CursorLocation = adUseClient

>         robjRS.CursorType = adOpenStatic

>         robjRS.Open "Select * from something" , , , adLockReadOnly

>         ***Set robjRS.ActiveConnection = Nothing**

>         ''''mobjConn.Close

> Now, If I close the connection after getting my recordset(uncomment the

> last line), then I lose all the records in the recordset, which means the

> recordset still has the knowledge of the database information and holds

> the connection in some form.

>

> I use ADO 2.0 and I'm fairly confident that this holds good for higher

> versions as well.

>

> Please correct me if I am going wrong on the understanding of disconnected

> recordset.

>

> -Parimel








$subst('Email.Unsub')

Message #4 by "Polsky, Eva" <EPolsky@s...> on Thu, 24 May 2001 10:05:03 -0400
I've just encountered the same problem and fortunately found a very neat

solution on the Web.

'***************************************************************************

********************

   'Disconnected ADO recordset.

   'A disconnected recordset is created by

   '  -  specify the CursorLocation property as adUseClient.

   '  -  then create the recordset as usual

   '  -  set the ActiveConnection to Nothing, which disconnects it from the

server.

   '  about maintaining the connection.

'***************************************************************************

********************

This is function that I created and it works.

Add some errors checking 





Public Function ExecDisconnectedRS(a_SQL As String) As ADODB.Recordset

'***************************************************************************

********************

   'Disconnected ADO recordset.

   'A disconnected recordset is created by

   '  -  specify the CursorLocation property as adUseClient.

   '  -  then create the recordset as usual

   '  -  set the ActiveConnection to Nothing, which disconnects it from the

server.

   '  You can then pass the whole recordset to the destination application

without having to worry

   '  about maintaining the connection.

'***************************************************************************

********************



      Dim lRs As New ADODB.Recordset

      With lRs

            .CursorLocation = adUseClient

            .CursorType = adOpenStatic

            .LockType = adLockOptimistic

            .ActiveConnection = myConnectStr

            .Source = a_SQL

            .Open

            .ActiveConnection = Nothing

      End With



      Set ExecDisconnectedRS = lRs

      Set lRs = Nothing

End Function



create a string to execute your store procedure like:



 lStrSql = "exec dbo.vstrSPName " & a_Parameter

set yourRS = ExecDisconnectedRS(lStrSql)



-----Original Message-----

From: Selvaraju, Parimel [mailto:selvarap@a...]

Sent: Thursday, May 24, 2001 9:42 AM

To: ActiveX_Data_Objects

Subject: [activex_data_objects] Re: Disconnected Recordsets (ADO 2.0)





Well, the situation I'm trying to get disconnected recordset is using the

command object. I run a stored procedure which returns a recordset and I

disconnect from the database. This is where I lose my recordset.



    lobjComm.CommandType = adCmdStoredProc

    lobjComm.CommandText = vstrSPName

    Set lobjComm.ActiveConnection = mobjConn   

    Set lobjRS = New ADODB.Recordset

    lobjRS.CursorLocation = adUseClient

    lobjRS.CursorType = adOpenStatic

    lobjRS.Open lobjComm

Does this mean I can't have a disconnected recordset if I use the command

object? Is this realted to the OLE-DB provider?



Thanks,

-Parimel



-----Original Message-----

From: Pete Davis [mailto:pdavis@q...]

Sent: Wednesday, May 23, 2001 7:04 PM

To: ActiveX_Data_Objects

Subject: [activex_data_objects] Re: Disconnected Recordsets (ADO 2.0)





Basically, it means this: If you have a disconnected recordset, and you

close the connection, you still have the records in the recordset. They are

no longer "connected" to the underlying database. You can do whatever you

want with them. There are then issues regarding "reconnecting" the data to

the database if you want to then update it.



We use disconnected recordsets a great deal. Here's an example: We have a

COM+ system. All access to our database is done through COM+ components on

the server. The client application, itself, never deals directly with the

database. If the client wants to retrieve data from the database, it calls a

component, which retrieves the recordset, disconnected, and returns that

recordset to the caller.



The connection is freed by the COM+ component, and generally, the COM+

component is freed by the client. The COM+ component is, therefore,

stateless. This means, not only is the connection now available for another

user, but so is the COM+ component. If later, the user wants to make an

update, they would then re-instantiate the COM+ component, pass the updated

recordset, and that component would then re-connect it to the database and

perform the update.



Pain in the butt, but very efficient and scalable.



Pete



----- Original Message -----

From: "Parimel" <selvarap@a...>

To: "ActiveX_Data_Objects" <activex_data_objects@p...>

Sent: Wednesday, May 23, 2001 8:17 PM

Subject: [activex_data_objects] Disconnected Recordsets (ADO 2.0)





> Hi

> I have a very basic question on disconnected recordset.

> What does it really mean?

> Does it mean it is disconnected from the connection object, so that

> the "connection object" is available for other processes

> OR

> Does it mean it has no connection whatsoever to the database and

> the "connection" is available for other processes

> (Note diff. in the quoted words)

> Take the sample code of disconnected recordset

>

>     Set mobjConn = New ADODB.Connection

>     mobjConn.Open "DSN=mydsn"

>         Set robjRS = New ADODB.Recordset

>         robjRS.ActiveConnection = mobjConn

>         robjRS.CursorLocation = adUseClient

>         robjRS.CursorType = adOpenStatic

>         robjRS.Open "Select * from something" , , , adLockReadOnly

>         ***Set robjRS.ActiveConnection = Nothing**

>         ''''mobjConn.Close

> Now, If I close the connection after getting my recordset(uncomment the

> last line), then I lose all the records in the recordset, which means the

> recordset still has the knowledge of the database information and holds

> the connection in some form.

>

> I use ADO 2.0 and I'm fairly confident that this holds good for higher

> versions as well.

>

> Please correct me if I am going wrong on the understanding of disconnected

> recordset.

>

> -Parimel






  Return to Index