使用VBA将mySQL数据库中的值提取到Excel中

使用VBA将mySQL数据库中的值提取到Excel中,mysql,excel,vba,Mysql,Excel,Vba,我已经在我的计算机上安装了mySQL服务器,并创建了名为Sales的数据库,其中包含一个名为Orders的表。您还可以在SQL FIDLE中找到该表: 然后我创建了一个Excel文件并激活了Microsoft ActiveX Data Objects 2.8库 现在我想连接到上面的数据库,并使用以下VBA脚本从中提取数据: Sub ConnectDB() Set conn = New ADODB.Connection conn.ConnectionString = "DRIVER={MySQL

我已经在我的计算机上安装了mySQL服务器,并创建了名为
Sales
的数据库,其中包含一个名为
Orders
的表。您还可以在
SQL FIDLE
中找到该表:

然后我创建了一个Excel文件并激活了Microsoft ActiveX Data Objects 2.8库
现在我想连接到上面的数据库,并使用以下
VBA
脚本从中提取数据:

Sub ConnectDB()
Set conn = New ADODB.Connection
conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=Sales; UID=root; PWD=mypassword; OPTION=3"

Set rs = New ADODB.Recordset
Set rs = conn.Execute("SELECT * FROM sales.orders;")
Sheet1.Range("A1").Value = rs

End Sub
然而,当我运行这个VBA时,我得到运行时错误3704。据我所知,这个错误可能是由以下几行引起的:

Set rs = New ADODB.Recordset
Set rs = conn.Execute("SELECT * FROM sales.orders;")
因为如果我删除它们,VBA运行时不会出现错误


要从mySQL数据库中提取数据,我需要在代码中更改什么?

您的连接未打开

试试这个

    Sub ConnectDB()
Set conn = New ADODB.Connection
conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=Sales; UID=root; PWD=mypassword; OPTION=3"
conn.open
Set rs = New ADODB.Recordset
Set rs = conn.Execute("SELECT * FROM sales.orders;")
Sheet1.Range("A1").Value = rs

End Sub

不要使用
Execute
——这是用于在数据库上运行命令,而不是用于返回记录集

Sub ConnectDB()
    Set conn = New ADODB.Connection
    conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=Sales; UID=root; PWD=mypassword; OPTION=3"
    conn.Open

    Set rs = New ADODB.Recordset
    rs.Open "SELECT * FROM sales.orders;", conn
    Sheet1.Range("A1").Value = rs
End Sub
如果字符串字段返回的内容看起来像垃圾,那么您还需要做更多的工作。

像这样尝试一下

Dim oConn As ADODB.Connection
然后

最后

    Sub InsertData()

Dim Rs As ADODB.Recordset

Dim Requete As String

    Set Rs = New ADODB.Recordset
    Call ConnectDB
    Requete = "SELECT * FROM sales.orders;" 
    Rs.Open Requete, oConnect, adOpenDynamic, adLockOptimistic


    End With
    oConnect.Close
    Set Rs = Nothing
End Sub

非常感谢您的回答。当我尝试它时,我得到运行时错误-2147467259(80004005)
Execute
用于更新数据库,而不是返回记录集。@braX,此代码“conn.open+conn.Execute”在我这方面工作得非常好(我有另一个数据库,因此有另一个连接字符串)。谢谢你的回答。我试图运行它,但也得到运行时错误-2147467259(80004005)。当我检查代码时,此错误出现在conn.Open行。是否有一些设置需要更改以使conn.Open正常工作?我使用的是Office 2007。是否需要一个特定的(旧的)字符串连接?如果您甚至无法用它打开到数据库的连接,那么连接字符串可能就是问题所在,因此您使用的Office版本无关紧要。
    Private Sub ConnectDB()
Set oConn = New ADODB.Connection
Dim str As String

str = "DRIVER={MySQL ODBC 5.1 Driver};" & _
      "SERVER=XXX.XXX.XXX.XXX replace with your IP address" & ";" & _
      "PORT=replace with the port you are using, usually 3306" & ";" & _
      "DATABASE=replace with the name of your databese" & ";" & _
      "USER=replace with the username you are using to connetc yourself to the databes" & ";" & _
      "PASSWORD=replace with password you are using to connect to the databse" & ";" & _
      "Option=3"


oConn.Open str
End Sub
    Sub InsertData()

Dim Rs As ADODB.Recordset

Dim Requete As String

    Set Rs = New ADODB.Recordset
    Call ConnectDB
    Requete = "SELECT * FROM sales.orders;" 
    Rs.Open Requete, oConnect, adOpenDynamic, adLockOptimistic


    End With
    oConnect.Close
    Set Rs = Nothing
End Sub