AWS RDS(MySQL)不会通过VBA将所有列内容输出到Excel
我有一个使用MySQL的AWS RDS实例。该登录名具有完全管理员权限 我正在尝试执行AWS RDS(MySQL)不会通过VBA将所有列内容输出到Excel,mysql,excel,vba,amazon-rds,Mysql,Excel,Vba,Amazon Rds,我有一个使用MySQL的AWS RDS实例。该登录名具有完全管理员权限 我正在尝试执行SELECT*fromtable并使用VBA将表格的所有内容输出到Excel工作表中。这还是一种新的,所以我从基础开始 我正在使用下面的代码块: 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 s
SELECT*fromtable
并使用VBA将表格的所有内容输出到Excel工作表中。这还是一种新的,所以我从基础开始
我正在使用下面的代码块:
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
犯罪
表由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
我将以我想要的输出结束。我不太明白为什么会这样?我是否缺少某种库引用?如果删除以下代码会发生什么
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
应该直接复制数据,所以我想知道您的后续代码是否覆盖/清除了数据。谢谢您的输入。我已经删除了建议的代码块,但仍然不起作用:(我做了更多的测试,并在问题中进行了更新:)