Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 441
Default ADO cloned recordset doesn't return field names

I am using Windows XP with Office 2003; Microsoft ActiveX Data Objects 2.8
Library;

I am using the following function to execute an ADO query. It works great,
but it doesn't return the field names. How can I get it to do that?

Public Function ADOReturnDisconnectedRecordset(argConnection As String,
argSQL As String) As ADODB.Recordset
'RETURNS A DISCONNECTED ADO RECORDSET TO THE CALLING SUBROUTINE OR FUNCTION
Dim cnADO As ADODB.Connection
Dim rsADO As ADODB.Recordset
Set cnADO = New ADODB.Connection
cnADO.CursorLocation = adUseClient
cnADO.ConnectionString = argConnection
cnADO.CommandTimeout = 0 'NO TIMEOUT
cnADO.Open
Set rsADO = New ADODB.Recordset
rsADO.MaxRecords = 0 '0 = ALL RECORDS
Set rsADO = cnADO.Execute(argSQL)
Set rsADO.ActiveConnection = Nothing 'SEVER CONNECTION
Set ADOReturnDisconnectedRecordset = rsADO.Clone(adLockReadOnly) 'RETURN
CLONE
If rsADO.State = adStateOpen Then rsADO.Close
Set rsADO = Nothing
cnADO.Close
Set cnADO = Nothing
End Function

Please include the correcting line(s). Thanks much in advance.
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 860
Default ADO cloned recordset doesn't return field names

Hi quartz,

I'm not sure what you mean by this:

I am using the following function to execute an ADO query. It works
great, but it doesn't return the field names. How can I get it to do
that?


Are you using the CopyFromRecordset method to copy the resulting recordset
to a worksheet? Or are you stepping through the records and writing them to
a range that way?

This, in conjunction with your function, worked fine for me (includes the
headers above the data):

Sub test()
Dim rs As ADODB.Recordset
Dim nCol As Integer

Set rs = ADOReturnDisconnectedRecordset("DSN=MyDSN", "SELECT * FROM
[MyTable]")

For nCol = 1 To rs.Fields.Count
Sheets("Sheet1").Cells(1, nCol).Value = rs.Fields(nCol - 1).Name
Next nCol
Sheets("Sheet1").Cells(2, 1).CopyFromRecordset rs
Set rs = Nothing
End Sub


BTW, you shouldn't need this line:

Set rsADO = New ADODB.Recordset


as the Execute method of the Connection object returns a reference to a
Recordset, you don't need to create a new one first.

--
Regards,

Jake Marx
MS MVP - Excel
www.longhead.com

[please keep replies in the newsgroup - email address unmonitored]


quartz wrote:
I am using Windows XP with Office 2003; Microsoft ActiveX Data
Objects 2.8 Library;

I am using the following function to execute an ADO query. It works
great, but it doesn't return the field names. How can I get it to do
that?

Public Function ADOReturnDisconnectedRecordset(argConnection As
String, argSQL As String) As ADODB.Recordset
'RETURNS A DISCONNECTED ADO RECORDSET TO THE CALLING SUBROUTINE OR
FUNCTION Dim cnADO As ADODB.Connection
Dim rsADO As ADODB.Recordset
Set cnADO = New ADODB.Connection
cnADO.CursorLocation = adUseClient
cnADO.ConnectionString = argConnection
cnADO.CommandTimeout = 0 'NO TIMEOUT
cnADO.Open
Set rsADO = New ADODB.Recordset
rsADO.MaxRecords = 0 '0 = ALL RECORDS
Set rsADO = cnADO.Execute(argSQL)
Set rsADO.ActiveConnection = Nothing 'SEVER CONNECTION
Set ADOReturnDisconnectedRecordset = rsADO.Clone(adLockReadOnly)
'RETURN CLONE
If rsADO.State = adStateOpen Then rsADO.Close
Set rsADO = Nothing
cnADO.Close
Set cnADO = Nothing
End Function

Please include the correcting line(s). Thanks much in advance.


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 441
Default ADO cloned recordset doesn't return field names

Hi Jake,

You are right. It had been awhile since I worked with ADO. I forgot that you
need to specifically loop through the recordset and use ".Name" to get at the
field names. I was thinking that the fields would just be there using
CopyFromRecordset.

I inserted the following portion of your code and it worked fine:

For nCol = 1 To rs.Fields.Count
Sheets("Sheet1").Cells(1, nCol).Value = rs.Fields(nCol - 1).Name
Next nCol

Thanks so much for your help.
"Jake Marx" wrote:

Hi quartz,

I'm not sure what you mean by this:

I am using the following function to execute an ADO query. It works
great, but it doesn't return the field names. How can I get it to do
that?


Are you using the CopyFromRecordset method to copy the resulting recordset
to a worksheet? Or are you stepping through the records and writing them to
a range that way?

This, in conjunction with your function, worked fine for me (includes the
headers above the data):

Sub test()
Dim rs As ADODB.Recordset
Dim nCol As Integer

Set rs = ADOReturnDisconnectedRecordset("DSN=MyDSN", "SELECT * FROM
[MyTable]")

For nCol = 1 To rs.Fields.Count
Sheets("Sheet1").Cells(1, nCol).Value = rs.Fields(nCol - 1).Name
Next nCol
Sheets("Sheet1").Cells(2, 1).CopyFromRecordset rs
Set rs = Nothing
End Sub


BTW, you shouldn't need this line:

Set rsADO = New ADODB.Recordset


as the Execute method of the Connection object returns a reference to a
Recordset, you don't need to create a new one first.

--
Regards,

Jake Marx
MS MVP - Excel
www.longhead.com

[please keep replies in the newsgroup - email address unmonitored]


quartz wrote:
I am using Windows XP with Office 2003; Microsoft ActiveX Data
Objects 2.8 Library;

I am using the following function to execute an ADO query. It works
great, but it doesn't return the field names. How can I get it to do
that?

Public Function ADOReturnDisconnectedRecordset(argConnection As
String, argSQL As String) As ADODB.Recordset
'RETURNS A DISCONNECTED ADO RECORDSET TO THE CALLING SUBROUTINE OR
FUNCTION Dim cnADO As ADODB.Connection
Dim rsADO As ADODB.Recordset
Set cnADO = New ADODB.Connection
cnADO.CursorLocation = adUseClient
cnADO.ConnectionString = argConnection
cnADO.CommandTimeout = 0 'NO TIMEOUT
cnADO.Open
Set rsADO = New ADODB.Recordset
rsADO.MaxRecords = 0 '0 = ALL RECORDS
Set rsADO = cnADO.Execute(argSQL)
Set rsADO.ActiveConnection = Nothing 'SEVER CONNECTION
Set ADOReturnDisconnectedRecordset = rsADO.Clone(adLockReadOnly)
'RETURN CLONE
If rsADO.State = adStateOpen Then rsADO.Close
Set rsADO = Nothing
cnADO.Close
Set cnADO = Nothing
End Function

Please include the correcting line(s). Thanks much in advance.



  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 860
Default ADO cloned recordset doesn't return field names

quartz wrote:
You are right. It had been awhile since I worked with ADO. I forgot
that you need to specifically loop through the recordset and use
".Name" to get at the field names. I was thinking that the fields
would just be there using CopyFromRecordset.

I inserted the following portion of your code and it worked fine:

For nCol = 1 To rs.Fields.Count
Sheets("Sheet1").Cells(1, nCol).Value = rs.Fields(nCol -
1).Name Next nCol


Great - glad to hear it worked for you.

Thanks so much for your help.


No problem!

--
Regards,

Jake Marx
MS MVP - Excel
www.longhead.com

[please keep replies in the newsgroup - email address unmonitored]
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
return recordset Laurent M Excel Discussion (Misc queries) 4 January 26th 05 09:43 AM
ActiveX CommandButton gets renamed when Sheet is cloned running Excel97 JimP Excel Programming 1 December 28th 04 02:32 PM
UserForm problem when Worksheet is cloned JimP Excel Programming 1 November 18th 04 02:52 AM
return all worksheet tab names and chart sheet tab names in report - an example DataFreakFromUtah Excel Programming 2 October 6th 04 08:09 PM
DAO query/recordset returns with field names Seth[_4_] Excel Programming 0 August 18th 03 08:36 PM


All times are GMT +1. The time now is 11:22 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"