【问题标题】:How can VBA connect to MySQL database in Excel?VBA 如何在 Excel 中连接 MySQL 数据库?
【发布时间】:2012-11-26 05:03:46
【问题描述】:
Dim oConn As ADODB.Connection
Private Sub ConnectDB()
Set oConn = New ADODB.Connection
Dim str As String
str = "DRIVER={MySQL ODBC 5.2.2 Driver};" & _
                                            "SERVER=sql100.xtreemhost.com;" & _
                                            "PORT=3306" & _
                                            "DATABASE=xth_9595110_MyNotes;" & _
                                            "UID=xth_9595110;" & _
                                            "PWD=myPassword;" & _
                                            "Option=3"
''' error '''
oConn.Open str
End Sub

Private Sub InsertData()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
ConnectDB
sql = "SELECT * FROM ComputingNotesTable"
rs.Open sql, oConn, adOpenDynamic, adLockOptimistic
Do Until rs.EOF
    Range("A1").Select
    ActiveCell = rs.Fields("Headings")
    rs.MoveNext
Loop
rs.Close
oConn.Close
Set oConn = Nothing
Set rs = Nothing
End Sub

在PHP中做类似的事情,我可以成功登录到MySQL服务器。 我已经安装了 ODBC 连接器。 但是在上面的 VBA 代码中,我失败了。 出现错误。 (查看存在错误的代码)

$connect = mysql_connect("sql100.xtreemhost.com","xth_9595110","myPassword") or die(mysql_error());

mysql_select_db("myTable",$connect);

【问题讨论】:

    标签: mysql excel vba


    【解决方案1】:

    这段 vba 对我有用:

    Sub connect()
        Dim Password As String
        Dim SQLStr As String
        'OMIT Dim Cn statement
        Dim Server_Name As String
        Dim User_ID As String
        Dim Database_Name As String
        'OMIT Dim rs statement
    
        Set rs = CreateObject("ADODB.Recordset") 'EBGen-Daily
        Server_Name = Range("b2").Value
        Database_name = Range("b3").Value ' Name of database
        User_ID = Range("b4").Value 'id user or username
        Password = Range("b5").Value 'Password
    
        SQLStr = "SELECT * FROM ComputingNotesTable"
    
        Set Cn = CreateObject("ADODB.Connection") 'NEW STATEMENT
        Cn.Open "Driver={MySQL ODBC 5.2.2 Driver};Server=" & _ 
                Server_Name & ";Database=" & Database_Name & _
                ";Uid=" & User_ID & ";Pwd=" & Password & ";"
    
        rs.Open SQLStr, Cn, adOpenStatic
    
        Dim myArray()
    
        myArray = rs.GetRows()
    
        kolumner = UBound(myArray, 1)
        rader = UBound(myArray, 2)
    
        For K = 0 To kolumner ' Using For loop data are displayed
            Range("a5").Offset(0, K).Value = rs.Fields(K).Name
            For R = 0 To rader
               Range("A5").Offset(R + 1, K).Value = myArray(K, R)
            Next
        Next
    
        rs.Close
        Set rs = Nothing
        Cn.Close
        Set Cn = Nothing
    End Sub
    

    【讨论】:

    • 感谢您的代码。但是我一直被困在我不知道服务器应该是什么的地方。我正在使用 Xtreemhost 的 MySQL,并且一直在使用“sql100.xtreemhost.com”。 Xtreemhost Support 说这是服务器的名称。那我该怎么办?
    • 您是否尝试将您的服务器名称放在您的 Excel 工作表的单元格 b2 中??
    • 是的,我做到了,据说服务器名称是“sql100.xtreemhost.com”,但对于驱动程序,我写了这样的代码:“Driver={MySQL ODBC 5.1.11 Driver}” ,根据我机器上的版本。我卡在“Cn.Open”中,错误是一样的:“运行时错误-2147467259(80004005)自动化错误未指定错误”
    • cn.open 表示连接错误,有时字符将不被接受!在 excel 表单元格 b2 = sql100.xtreemhost.com 中输入您的服务器名称后,编辑宏代码 - 在服务器名称之前添加一个代码 --->Server='" & Server_Name & "'
    • 你创建了 odbc 数据源吗?并检查了测试连接??
    【解决方案2】:

    使用更新的答案更新此主题,该解决方案适用于 MySQL 连接器/ODBC 版本 8.0(在 https://downloads.mysql.com/archives/c-odbc/ 下载):

    Public oConn As ADODB.Connection
    Sub MySqlInit()
        If oConn Is Nothing Then
            Dim str As String
            str = "Driver={MySQL ODBC 8.0 Unicode Driver};SERVER=xxxxx;DATABASE=xxxxx;PORT=3306;UID=xxxxx;PWD=xxxxx;"
            Set oConn = New ADODB.Connection
            oConn.Open str
        End If
    End Sub
    

    在这件事上最重要的是检查已安装驱动程序的正确名称和版本: HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC 驱动程序\

    【讨论】:

      【解决方案3】:

      Ranjit 的代码导致了与 Tin 报告的相同错误消息,但在使用我正在运行的 ODBC 驱动程序更新 Cn.open 后工作。检查 ODBC 数据源管理器中的驱动程序选项卡。我说“MySQL ODBC 5.3 Unicode 驱动程序”所以我相应地更新了。

      【讨论】:

      • 即使我更新了正在运行的驱动程序,但在我激活 Microsoft ActiveX Data Objects 6.1 Library 之前这对我不起作用。为此,在 VBE 中,您需要转到 Tools/References 并检查 Microsoft Active X Data Objects x library
      【解决方案4】:

      对于偶然发现相同问题的任何人来说,只是一个旁注...我的操作系统是 64 位的 - 所以我当然下载了 64 位的 MySQL 驱动程序...但是,我的 Office 应用程序是 32 位的...曾经我下载了 32 位版本,错误消失了,我可以继续前进。

      【讨论】:

      • 什么驱动?你是从哪里下载的?我很抱歉,但我是新手,试图让 excel 与 MySQL 对话。我有相同的设置,64 位机器和 32 位 Office,所以我怀疑我的问题可能与您的问题相似。
      • 驱动程序可以在MySQL Community Downloads page找到。
      【解决方案5】:

      启用 Microsoft ActiveX 数据对象 2.8 库

      Dim oConn As ADODB.Connection 
      Private Sub ConnectDB()     
      Set oConn = New ADODB.Connection    
      oConn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _        
      "SERVER=localhost;" & _         
      "DATABASE=yourdatabase;" & _        
      "USER=yourdbusername;" & _      
      "PASSWORD=yourdbpassword;" & _      
      "Option=3" 
      End Sub
      

      这里有休息:http://www.heritage-tech.net/908/inserting-data-into-mysql-from-excel-using-vba/

      【讨论】:

      • 已启用数据对象库。我想知道如果 SERVER=localhost,应用程序如何知道我的 SQL 服务器在 xtreemhost SQL 上?仍然有同样的错误:“运行时错误-2147467259(80004005)自动化错误未指定错误”
      • 我试过这个并得到错误:“找不到数据源名称并且没有指定默认驱动程序”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多