У меня есть 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
, я получу желаемый результат. Я не совсем понимаю, почему это так? Я пропустил какую-то библиотечную ссылку?