Сбой кода при попытке получить заголовки столбцов - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь получить заголовки столбцов, возвращаемые из хранимого в 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

1 Ответ

0 голосов
/ 01 мая 2018

полей на основе нуля

For i = 0 To RecordSet.Fields.Count-1
  Worksheets("Sheet1").Cells(i+1, 1).Value = RecordSet.Fields(i).Name
Next i

Но поставьте код перед .copyfromrecordset а не после.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...