Я пытаюсь получить заголовки столбцов, возвращаемые из хранимого в SQL процесса, который я назвал нормально, и данные возвращаются, однако, когда я пытаюсь получить доступ к заголовкам столбцов, происходит сбой, поэтому это не так.
Private Sub Refresh_Click()
Dim Conn As ADODB.Connection, RecordSet As ADODB.RecordSet
Dim Command As ADODB.Command
Dim ConnectionString As String, StoredProcName As String
Dim StartDate As ADODB.Parameter, EndDate As ADODB.Parameter
Application.ScreenUpdating = False
Set Conn = New ADODB.Connection
Set RecordSet = New ADODB.RecordSet
Set Command = New ADODB.Command
ConnectionString = "PROVIDER=SQLOLEDB;DATA SOURCE=DB;INITIAL CATALOG=DB; User Id=****;Password=****;"
On Error GoTo CloseConnection
Conn.Open ConnectionString
SellStartDate = Format(Sheets("Sheet1").Range("B2").Value2, "yyyy-mm-dd")
SellEndDate = Format(Sheets("Sheet1").Range("B3").Value2, "yyyy-mm-dd")
StoredProcName = "fsp_PLReportByDates"
With Command
.ActiveConnection = Conn
.CommandType = adCmdStoredProc
.CommandText = StoredProcName
End With
Set StartDate = Command.CreateParameter("@DateFrom", adDBDate, adParamInput, , SellStartDate)
Set EndDate = Command.CreateParameter("@DateTo", adDBDate, adParamInput, , SellEndDate)
Command.Parameters.Append StartDate
Command.Parameters.Append EndDate
Set RecordSet = Command.Execute
Sheets("Sheet1").Range("A7").CopyFromRecordset RecordSet
Именно здесь происходит сбой в том месте, где он пытается получить заголовки столбцов. Все, что я возвращаю, является процедурой, потерпевшей неудачу, но когда я удаляю код ниже, который получает заголовки столбцов, это работает.
Также могу я спросить, есть ли способ автоматически добавить фильтрацию к возвращаемым данным.
For i = 1 To RecordSet.Fields.Count
Worksheets("Sheet1").Cells(i, 1).Value = RecordSet.Fields(i).Name
Next i
Если я уберу три вышеупомянутые строки, это сработает и вернет ожидаемые данные, а не заголовки.
RecordSet.Close
Conn.Close
On Error GoTo 0
Application.ScreenUpdating = True
Exit Sub
CloseConnection:
Application.ScreenUpdating = True
MsgBox "SQL Stored Procedure Did Not Execute Sucessfully!", vbCritical, "SQL Error"
Conn.Close
End Sub