2012-11-26 27 views
10
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代码中,我失败了。 出现错误。 (见代码,其中存在错误)VBA如何在Excel中连接到MySQL数据库?

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

mysql_select_db("myTable",$connect); 

回答

4

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

+1

非常感谢你真正用于测试很久很久以前发布的代码!!! –

8

这片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 
+0

感谢您的代码。但是我一直陷在其中,我不知道服务器应该是什么。我使用的是Xtreemhost的MySQL,我一直在使用“sql100.xtreemhost.com”。 Xtreemhost支持表示这是服务器的名称。那我该怎么办? –

+0

您是否曾尝试将您的服务器名称放入Excel表单b2中? –

+0

是的,我做到了,按说该服务器名称为“sql100.xtreemhost.com”,但对于司机,我写了这样的代码:“驱动程序= {MySQL的ODBC驱动程序5.1.11}”,根据对我的版本机。我被卡在“Cn.Open”和错误是一样的:“运行时错误-2147467259(80004005)自动化错误未指定的错误” –

1

启用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/

+1

已启用数据对象库。 我不知道SERVER = localhost,应用程序如何知道我的SQL服务器在xtreemhost SQL上? 仍然有同样的错误: “运行时错误-2147467259(80004005)自动化错误未指定的错误” –

+0

我尝试这样做,得到了错误:“数据源名称未找到和指定默认驱动程序” – hammythepig

4

只是一个侧面说明了任何人绊倒此相同的查询...我的操作系统是64位 - 所以当然我下载了64位MySQL驱动程序......然而,我的Office应用程序都是32位...一旦我下载了32位版本,错误消失了,我可以继续前进。

+1

什么驱动程序?你从哪里下载它?我很抱歉,但我很想尝试让excel与MySQL交谈。我的设置与64位机器和32位Office相同,因此我怀疑我的问题可能与您的问题类似。 – lukehawk