2011-08-22 40 views
3

我已经创建了一个模块,使用存储过程从SQL数据库中读取数据,并且获取所有必需的数据,但是我的要求是我也需要所有列名称/标题。而且我无法对名称进行硬编码,因为我正在将数据行转换为存储过程中的列。如何获取VBA中的列名?

这是我写的代码:

ConnStr = "PROVIDER=SQLOLEDB.1;" 
ConnStr = ConnStr & "DATA SOURCE=" & dataSrc & "; INITIAL CATALOG=" & iCatalog & "; " 
ConnStr = ConnStr & "User ID = " & dbUserId & "; Password = " & dbPassword 

On Error GoTo ErrHandler 

DBConn.Open ConnStr 

' Create a recordset object. 
Dim rsCounter As ADODB.Recordset 
Set rsCounter = New ADODB.Recordset 
Dim startDate As String, endDate As String, query As String 

query = "Exec ReadCntrs 0, '12/01/2011', '12/30/2011'" 

With rsCounter 
    ' Assign the Connection object. 
    .ActiveConnection = DBConn 

    .Open query 
    ' Copy the records into cell A1 on Sheet1. 
    Sheet1.Range("A1").CopyFromRecordset rsCounter 

    ' Tidy up 
    .Close 
End With 

DBConn.Close 
Set rsCounter = Nothing 
Set DBConn = Nothing 

ExitHere: 
    On Error Resume Next 
    DBConn.Close: Set DBConn = Nothing 
    Err.Clear 
    Exit Sub 

ErrHandler: 
    MsgBox Err.Number & Err.Description, vbExclamation 
    Resume ExitHere 

End Sub 

回答

6
With rsCounter 
    ' Assign the Connection object. 
    .ActiveConnection = DBConn 

    .Open query 

    ' Write the column names into cell A1 on Sheet1. 
    Dim counter As Long 
    For counter = 0 To rsCounter.Fields.Count - 1 
     Sheet1.Range("A1").Offset(, counter).Value = rsCounter.Fields(counter).Name 
    Next 

    ' Copy the records into cell A2 on Sheet1. 
    Sheet1.Range("A2").CopyFromRecordset rsCounter 

    ' Tidy up 
    .Close 
End With 
4

rsCounter.Fields(i).Name - 其中i为表示场地number--整数是如何正常访问的字段名称。

编辑 - 也得到场总数将使用rsCounter.Fields.Count