目的:
我正在尝试通过VBA连接到数据库(例如与goDaddy托管的网站相关联);使用MS Word。我想通过word模板分发VBA代码,以便其他人也可以连接到我的数据库。
当前理解 - 是否正确?
为了连接到远程mySQL数据库,我必须使用(例如)mySQL Connector / ODBC(available here)配置ODBC数据源?
似乎有一种方法可以在不使用DSN as suggested here的情况下进行连接。
问题:
我一直在尝试使用mySQL Connector工具,并尝试使用我手边的信息对其进行配置。采取的步骤:
我得到的印象是我使用了错误的凭据...如果连接成功,我找到了some documentation that said a list of DataBases would be displayed。这告诉我,我应该为主用户使用凭据 - 用户会是什么?
声明
我打算通过VBA连接到在线数据库,但怀疑可能更好地通过php网页间接连接。
如果有人对此有所了解(安全性,易部署性,其他),请告诉我,这可能是一个新问题。其他免责声明,我非常熟悉数据库,但很想学习 - 慢慢地; - )
答案 0 :(得分:2)
如何使用ODBC将VBA连接到远程mySQL数据库
感谢@EVilliger& @tobifasc对此有所帮助,有许多'如何配置mySQL问题'浮动但没有解决我(更大)的问题。
基本问题 - 我的主机不允许远程连接到数据库,除了来自单个白名单的IP(这看起来相当普遍)。
已回答的问题:
事实证明,您不需要使用连接器配置mySQL连接,但是您需要安装适当的ODBC驱动程序。可在此处找到连接器(带驱动程序):https://dev.mysql.com/downloads/connector/odbc/
我卸载了mySQL Connector,一切似乎都继续工作,直到它没有。结论不要卸载mySQL Connector,除非你有什么要替换它。
要使用的凭据可以是数据库用户,而不是某些提升用户。
对于有兴趣在VBA中设置和试验mySQL的人来说,这是一条前进的道路:
接受回答的代码:
sum_temp
再次感谢:)
答案 1 :(得分:1)
我目前正在使用Excel进行项目,我已成功连接到远程MySQL数据库。
我正在使用无DSN方法,这也可能适合您:
Set remoteCon = New ADODB.Connection
conStr = "DRIVER={MySQL ODBC 5.3 Unicode Driver};" & _
"SERVER=myhomepage.com;PORT=3306;DATABASE=mydb;" & _
"UID=username;PWD=secret"
remoteCon.Open conStr
remoteCon.Execute ("USE mydb;")
为了使其正常工作,您还必须添加引用(在VBA后端):工具>参考文献>检查" Microsoft ActiveX数据对象x.x库"。
您还需要在计算机上安装MySQL ODBC驱动程序(在我的情况下" MySQL ODBC 5.3 Unicode驱动程序")。
然后可以像这样执行查询:
Dim rs As ADODB.Recordset
Set rs = remoteCon.Execute("SELECT * FROM table")
If Not rs.BOF And Not rs.EOF Then
result = rs.GetRows
End If
答案 2 :(得分:0)
以下解决方案对我有用
先决条件:
在Developer->工具->参考下添加相关的Oracle插件
为您正在使用的Oracle下载并安装ODBC驱动程序版本(32位/ 64位)
Windows搜索-> ODBC数据源->在用户DSN和系统DSN下添加Oracle驱动程序
复制以下我用于MySQL的代码并根据您的要求更改参数
Sub ConnectToDB()
dbName = InputBox("Enter DB Name")
'Connection To MySQL
Dim oConn As ADODB.Connection
Dim str As String
str = "DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=localhost;DATABASE=Employeeportal;PORT=3306;UID=root;PWD=root;"
Set oConn = New ADODB.Connection
oConn.Open str
MsgBox "Connected to MySQL DB"
'Exporting result set to Excel
Dim query As String
query = "select * from " & dbName
Dim recordSet As New ADODB.recordSet
recordSet.Open query, oConn
Sheet1.Range("A1:D1").CopyFromRecordset recordSet
oConn.Close
End Sub