Не уверен, почему результаты транспонируются из RecordSet в Excel Sheet - PullRequest
0 голосов
/ 20 февраля 2019

Я новичок в использовании Recordsets и мне нужна некоторая помощь, чтобы выяснить, почему данные переносятся из базы данных в Excel.Я верю в следующий код, но не уверен.

For iRow = 0 To intNumReturned - 1
    For iCol = 0 To intNumColumns - 1
        Debug.Print rsRecords(iCol, iRow)
    Next iCol
Next iRow

Результат из строки SQL, что ожидается:

PROCESSOR | ACCOUNT NUMBER | LOAN AMOUNT | ORIGNATION DATE
ZJE         xxxxxxx          XXXXXX.XX      2018-01-01
ZJE         xxxxxxx          XXXXXX.XX      2018-02-06

Как данные помещаются в лист Excel:

PROCESSOR | ACCOUNT NUMBER | LOAN AMOUNT | ORIGNATION DATE
ZJE         ZJE              ZJE           ZJE
acct no     acct no          acct no       acct no
loan amt    loan amt         loan amt      loan amt                               
Org Date    Org Date         Org Date      org date

Ниже приведен код, который я сейчас использую, за исключением строк подключения и SQL:

Sub RunSearch()
    Dim conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim connStr As String, strSQL As String
    Dim begQ1 As String, endQ1 As String, begQ2 As String, endQ2 As String, begQ3 As String, endQ3 As String, begQ4 As String, endQ4 As String
    Dim ctrl As Control
    Dim rsRecords As Variant
    Dim intNumReturned As Long, intNumColumns As Long, iCol As Long, iRow As Long, fldCount As Long, i As Long, rsCount As Long

    Set wb = ThisWorkbook
    Set wsVol = wb.Sheets("Volume By Processor")
    Set wsDE = wb.Sheets("DE")
    Set quarterYear = wsDE.Range("Quarter_Year")
    Set Q = wsDE.Range("Quarter")
    Set fDate = wsDE.Range("From_Date")
    Set tDate = wsDE.Range("To_Date")

Do While Not rs.EOF
    rs.MoveNext
    rsRecords = rs.GetRows
    intNumReturned = UBound(rsRecords, 2) + 1
    intNumColumns = UBound(rsRecords, 1) + 1
Loop

    For iRow = 0 To intNumReturned - 1
        For iCol = 0 To intNumColumns - 1
            Debug.Print rsRecords(iCol, iRow)
        Next iCol
    Next iRow


'\\\NEED TO FIGURE OUT NUMBER OF RECORDS TO
'\\\DEFINE LAST ROW/COLUMN OF RANGE????  PROBABLY A
'\\\SEPARATE QUESTION ON SO
    wsVol.Range("B3:E1800") = rsRecords

    rs.Close
    Set rs = Nothing
    conn.Close
    Set conn = Nothing

Я ожидаю, что результат в листе Excel будет соответствовать выводу строки SQLлюбая помощь очень ценится.

1 Ответ

0 голосов
/ 20 февраля 2019

Если вы хотите перейти к другой «записи» набора записей, вы можете использовать метод «.MoveNext».

Это будет примерно так:

rsRecords.MoveFirst 'In this line you will back for the first entry
For iRow = 0 To intNumReturned - 1
     For iCol = 0 To intNumColumns - 1
         Debug.Print rsRecords(iCol)
     Next iCol
rsRecords.MoveNext 'In this line you move to the next "row" as you want
Next iRow
...