AWS RDS (MySQL) не выводит все содержимое столбца в Excel через VBA - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть AWS экземпляр RDS, использующий MySQL. У входа в систему есть полное право администратора.

Я пытаюсь выполнить SELECT * FROM table и вывести все содержимое таблицы на лист Excel, используя VBA. Все еще новичок в этом, поэтому я начинаю с основ.

Я использую фрагмент кода ниже:

Sub test()
Dim Server_Name As String, DB_Name As String, User_ID As String, User_Pass As String
Dim Rs As Variant, Cn As Variant
Dim sqlStr As String
Dim includeField As Boolean
Dim tgtCell As Range
Dim col As Long


Server_Name = "arachnophobia.blabla.rds.amazonaws.com"
DB_Name = "Spidey"
User_ID = "Peter"
User_Pass = "Parker"

sqlStr = "SELECT * FROM crime"

Set Cn = CreateObject("ADODB.Connection")
Cn.Open "Driver={MySQL ODBC 8.0 Unicode Driver};" & _
                ";Server=" & Server_Name & _
                ";Database=" & DB_Name & _
                ";Uid=" & User_ID & _
                ";Pwd=" & User_Pass

Set Rs = CreateObject("ADODB.Recordset")
Set Rs = Cn.Execute(sqlStr)

Set tgtCell = Sheets("Main").Range("A1")
includeField = True
If includeField Then
    tgtCell.Offset(1, 0).CopyFromRecordset Rs
    For col = 0 To Rs.Fields.Count - 1
        Sheets(tgtCell.Parent.Name).Cells(1, col + 1).Value = Rs.Fields(col).Name
    Next
Else
    tgtCell.CopyFromRecordset Rs
End If

End Sub

Таблица crime состоит из 4 столбцов:

|S/N (PK) |DateID    |CrimeID    |Reason    |
|1        |01/02/19  |32155      |Fun       |
|2        |03/02/19  |32255      |Bored     |
|3        |06/02/19  |32555      |Meh       |
|4        |07/02/19  |32755      |Duh       |
|5        |09/02/19  |32855      |Null      |

Я выполнил приведенный выше код и вывод на листе Excel:

|S/N (PK) |DateID    |CrimeID    |Reason    |
|1        |          |           |          |
|2        |          |           |          |
|3        |          |           |          |
|4        |          |           |          |
|5        |          |           |          |

По сути, я получаю только имена полей и значения первичного ключа, но не что-нибудь еще.

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

Есть ли что-то, что я не учел в коде, который вызывает всю отсутствующую информацию столбца?

Обновление:

Я провел дополнительное тестирование. tgtCell.CopyFromRecordset Rs приводит к выводу выше. Тем не менее, если я попытаюсь пройтись по набору записей, используя это:

xlrow = 1
Do While Not Rs.EOF
    xlcol = 1
    For col = 1 To Rs.Fields.Count
        tgtCell.Offset(xlrow, xlcol - 1).Value = Rs(col - 1).Value
        xlcol = xlcol + 1
    Next
    Rs.movenext
    xlrow = xlrow + 1
Loop

, я получу желаемый результат. Я не совсем понимаю, почему это так? Я пропустил какую-то библиотечную ссылку?

1 Ответ

0 голосов
/ 26 февраля 2020

что произойдет, если вы удалите следующий код?

For col = 0 To Rs.Fields.Count - 1
    Sheets(tgtCell.Parent.Name).Cells(1, col + 1).Value = Rs.Fields(col).Name
Next

Мне ваша строка tgtCell.Offset(1, 0).CopyFromRecordset Rs должна просто скопировать данные прямо, поэтому мне интересно, перезаписывает ли ваш последующий код / ​​очищает данные.

...