今天主要说说VBA连接mysql数据库
如果连接其他数据库,可以在打开EXCEL后,点击数据选项卡——获取外部数据即可。
因为excel自带没有mysql数据库,所以呢,今天主要是利用ADO操作mysql数据。
mysql安装后的基本设置可以参考昨天mysql的内容。
下面开始vba连接mysql啦
一、ADO是啥
ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据。
大概意思ADO就是一个工具,可以连接数据库,可以处理数据。
二、VBA连接mysql
(1)准备工作
①使用前咱们先导入ADO对象库。
打开VBE工作环境——选择“工具”——“引用”——找到最新版本的Microsoft ActiveX Data Objects勾选上,不清楚哪个就多勾几个,也不碍事~
②安装mysql Connector/ODBC
以为勾选了对象库就完事了?想多啦,还要安装mysql Connector/ODBC ,安装完了才可以用(注意要和自己的EXCEL位数一样,都是32位或都是64位才行,这里埋个伏笔,待会我没注意,就给翻车了)下载地址:
https://dev.mysql.com/downloads/connector/odbc
下载完傻瓜式安装~
安装完后,如果不是win10系统的话,需要在“控制面板”-“管理工具”-“ODBC 数据源”进行配置,我用的win10,在C:\Windows\system32\odbcad32.exe(64位)或者C:\Windows\SysWOW64\odbcad32.exe(32位)进行配置。
③ ODBC配置
Unicode driver 版本提供了更多字符集的支持,也就是提供了多语言的支持。而ANSI driver 版本是只针对有限的字符集的范围。所以选择Unicode看起来更好哟~
最后把自己设置的mysql信息填上去,点一下右下角的test,弹出连接成功,完成咯!
odbc其他具体操作可以到下面的链接下载文档进行查看
https://dev.mysql.com/doc/
(2)连接mysql
Sub mysql_conn()
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Port=3306;Database=demo;Uid=yxq;Pwd=123456;OPTION=3;"
conn.Open
End Sub
反正记住这么配置就可以啦~也简单易懂。
Driver就是ODBC刚设置的,Server=127.0.0.1;Port=3306;Database=demo;Uid=yxq;Pwd=123456都是自己的mysql的信息,至于OPTION=3,反正默认3就是。
然后以为一帆风顺,还是报错了(就是前面提到的,EXCEL是32位的,但是呢ODBC又是安装的64位的):
三、VBA获取mysql数据
经过一顿操作,重新安装32位的ODBC,总算连接成功
①获取数据库demo中表user里面的所有信信息
Sub mysql_conn()
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
conn.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Port=3306;Database=demo;Uid=yxq;Pwd=123456;OPTION=3;"
conn.Open
Sql = "SELECT * FROM `user`"
rs.Open Sql, conn
Sheets(1).range("C3").CopyFromRecordset rs
End Sub
通过rs将查找到的数据直接在sheet1的A1列中进行粘贴,搞定!
② 同理,把上面第10行的代码改一下就可以获取所有数据库名
Sql = "SELECT SCHEMA_NAME AS `Database` FROM INFORMATION_SCHEMA.SCHEMATA;"
获取数据库demo下的所有表:
Sql = "show tables from demo;"
最后:VBA读取mysql相对来说还是简单,但是前期的配置工作需要特别仔细,一不小心出错了蛮费时间和精力。
今天就到这里啦~再下去就是mysql的内容咯