vbaexcelexcel-2003

Pulling Column Names into Excel from SQL query


I'm using Excel to pull data from an SQL db. I used the code from another SO question and it works fine. Now I want to pull in the column names from a table in addition to the actual table. I figured out that I could get the names using the For Each fld loop. However there's still the issue of populating them horizontally in a row in Excel as the number of columns might change - so I'm thinking I would need another For each loop also or something similar.

Sub GetDataFromADO()

'Declare variables'
    Set objMyConn = New ADODB.Connection
    Set objMyCmd = New ADODB.Command
    Set objMyRecordset = New ADODB.Recordset

'Open Connection'
    objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;"
    objMyConn.Open

'Set and Excecute SQL Command'
    Set objMyCmd.ActiveConnection = objMyConn
    objMyCmd.CommandText = "select * from myTable"
    objMyCmd.CommandType = adCmdText
    objMyCmd.Execute

'Loop Names'
    ' WHAT TO DO HERE????'

'Open Recordset'
    Set objMyRecordset.ActiveConnection = objMyConn
    objMyRecordset.Open objMyCmd

'Copy Data to Excel'
    ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)

End Sub

Solution

  • Ok so I figured it out after 4 attempts, here's the code for the loop.

     'Loop'
     Dim FieldRange As Range
     Set FieldRange = Range("A4")
     Set TableColumns = Range("A4:H4")
     x = 1
    
     Range("A4").Select
    
     For Each fld in objMyRecordset.Fields
          ActiveCell.Value = fld.Name
          ActiveCell.Offset(0, x).Select
          x = x + 1 'tick iterator
     Next
    
     ActiveSheet.Range("A5").CopyFromRecordset objMyRecordset
     Range("A4").Select