Excel、VBA与MySQL交互
本文主要涉及:
- VBA中的MySQL环境配置
- VBA连接MySQL数据库
- VBA读写MySQL数据
- 在Excel中连接MySQL数据库及数据读写
系统环境:
- Windows 10
- Excel 2013
- XAMPP。其中集成的数据库是MariaDB 10.1.13(如果不懂MariaDB为何物,可把它当成是MySQL。事实上它的使用和MySQL也几乎完全一致)
1. VBA连接MySQL前的环境配置
系统中必须先安装有MySQL服务,这个就不多说了。可以选择使用官方安装包,或者使用PHP集成环境中的数据库都可以。
1.1 启用脚本支持
在使用前,需要先在VBE中启动数据库连接支持。按下Alt+F11打开VBE,在菜单栏选择“工具”-“引用”,在弹出的引用窗口中,找到"Microsoft ActiveX Data Objects 6.1 Library"和"Microsoft ActiveX Data Objects Recordset 6.0 Library",把前面的框勾选上,点击确定即可。
1.2 安装MySQL ODBC 连接服务
选择操作系统及系统版本,下载对应的MSI文件安装即可。
这里应当注意的是,在下载安装ODBC连接器时,要选择和你的数据库相同位数的版本,而不是系统位数,否则安装完后依然会提示找不到数据库驱动。
(我试过在64bit的系统上装的64bit的connector,装完后连接提示找不到驱动,然后装上32bit的connector才成功)
1.3 添加ODBC数据源
打开“控制面板”-“管理工具”-“ODBC 数据源”,在弹出的窗口中的“用户DSN”选项卡右侧,选择“添加”,在新数据库源中会出现两个MySQL驱动,分别为“MySQL ODBC 5.3 ANSI Driver”及"MySQL ODBC 5.3 Unicode Driver",很明显两者的区别在于编码标准。我选择的是Unicode版本。选中其中一个,点完成即可
1.1和1.2的配置顺序可以随意,但1.3必须在1.2之后,否则在ODBC数据源中添加新数据源时,是找不到MySQL选项的。
2. VBA连接MySQL
在按照1.1步骤配置了环境支持后,就可以在VBA中使用代码连接MySQL了。
先定义连接对象
Dim conn as ADODB.Connection
Set conn = new ADODB.Connection
连接数据库
conn.ConnectionString = "Driver={MySQL ODBC 5.3 Unicode Driver};Server=localhost;DB=test;UID=root;PWD=root;OPTION=3;"
conn.Open
连接字符串ConnectionString中的各个参数应该很明了,就不一一解释了。最后一个OPTION,按MySQL官方的说法是用于指定ODBC Connector的工作方式的,但是我在他们官方文档中并没有找到有哪个选项是的值对应是3的。所以这里只有照写了。
这里可以看到,Driver变量的值是必须要和数据源中添加的新数据源一致的,否则会提示找不到数据源。
致此,数据库连接成功!
可以使用连接对象的State属性和Version属性查看数据库状态和版本(检查是否连接成功)
MsgBox("数据库状态:" & conn.State & vbCrLf & "数据库版本:" & conn.Version)
最后关闭数据库连接
conn.Close
Set conn = Nothing
3. VBA读写MySQL数据表
3.1 读取MySQL数据到Excel
代码如下:
Sub db()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "Driver={MySQL ODBC 5.3 Unicode Driver};Server=localhost;DB=test;UID=root;PWD=root;OPTION=3;"
conn.Open
rs.Open "select * from `test`", conn
Range("a1:b1").Value = Array("ID", "Name")
Range("A2").CopyFromRecordset rs
rs.Close: Set rs = Nothing
conn.Close: Set conn = Nothing
End Sub
相比前面的代码,以上代码多了ADODB.Recordset和rs.Open,ADODB.Recordset用于执行SQL语句并接收查询语句返回的结果集。
这里需要提一下的是,在VBA中执行SQL语句有两种方式,其一是使用连接对象执行:conn.Execute,其第一个参数就是SQL语句;另一种则使用结果集对象执行:rs.Open,这种方式有两个必要参数,分别是SQL语句和连接对象,如上例中的rs.Open "select * from `test`", conn。
接下来的两行Range是用于把查询结果复制到Excel表格中的。
3.2 写入数据到MySQL
其实写入数据,只需要把上例中的SQL语句改成UPDATE或者INSERT即可,就不多说了。
4. 在Excel中直接操作MySQL
MySQL推出了一个Excel插件,用于直接在Excel操作MySQL数据库。
首先需要下载:Download MySQL for Excel
下载完运行安装即可。
然后打开(重启)Excel,打开时可能会询问是否添加该插件。打开后,在菜单栏点开“数据”,即可在右侧看到有个MySQL for Excel的东西。点开它,就会出现本地的MySQL数据库。

可以右键单击其中的数据库,编辑连接信息:

或者双击打开数据库目录,依然打开数据表目录,再选中其中一个数据表时,在下方会出现三个选项,分别是导入MySQL数据、编辑MySQL数据、添加MySQL数据。如果选中导入或编辑,都会在Excel中新增一个工作表用于操作数据,如果是选择添加,则不会。至于具体的操作,就都是傻瓜式的了,这里就不再多讲了。

Excel、VBA与MySQL交互的更多相关文章
- Excel VBA连接MySql 数据库获取数据
编写Excel VBA工具,连接并操作Mysql 数据库. 系统环境: OS:Win7 64位 英文版 Office 2010 32位 英文版 1.VBA连接MySql前的准备 Tools---> ...
- Excel VBA 连接各种数据库(一) VBA连接MySQL数据库
本文参考[东围居士]的cnblog博文 Excel.VBA与MySQL交互 在自己机器上调试成功,把调试中遇到的问题一并写出了. 本文主要涉及: VBA中的MySQL环境配置 VBA连接MySQL ...
- Excel VBA 连接各种数据库(二) VBA连接Oracle数据库
本文主要内容: Oracle环境配置 ODBC驱动设置.第三方驱动下载 VBA连接Oracle连接方法 Oracle10g官方免账号下载地址 系统环境: Windows 7 64bit Excel 2 ...
- Excel VBA入门(十)用户窗体开发
VBA 中的用户窗体就是指带 UI 的用户界面,在运行的时候会单独弹出一个窗口,类似于在 windows 系统中运行的一个可执行程序一样(这个说法不太严谨,因为可执行程序也可能是只有命令窗口而没有 U ...
- Excel VBA 连接各种数据库(三) VBA连接SQL Server数据库
本文主要涉及: VBA中的SQL Server环境配置 VBA连接SQL Server数据库 VBA读写SQL Server数据 如何安装SQL Client 系统环境: Windows 7 64bi ...
- mysql交互协议解析——mysql包基础数据、mysql包基本格式
mysql交互协议是开发mysql周边组件常用的协议,如JDBC,libmysql等等. 在此我们要认识到mysql交互协议其实是半双工的交互协议,至于为什么,这里就先挖个小坑,以后再填. 在探讨my ...
- 来吧!带你玩转 Excel VBA
来吧!带你玩转 Excel VBA 从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学…… 我是罗刚君,来自四川的一个小县 ...
- PHP导入excel数据到MYSQL
这里介绍一个直接将excel文件导入mysql的例子.我花了一晚上的时间测试,无论导入简繁体都不会出现乱码,非常好用.PHP-ExcelReader,下载地址: http://sourceforge. ...
- Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)
目录 简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据 ...
随机推荐
- js空数组
首先我们定义一个空的数组: var a = [ ]; 数组a里面是空的没有值,接下来我们打印: console.log(!!a); 因为数组是空的,此处应该为false. 恰好相反,!!a为true. ...
- Docker跨主机link
user case:一个app container向一个oracle container跨主机传输数据. 思路一:将oracle对外暴露端口,将hostA的IP添加入app上/ect/hosts上.这 ...
- Linux下修改Jenkins默认端口
我是自动安装的Jenkins,默认目录为 jenkins安装目录:/var/lib/jenkins jenkins日志目录:/var/log/jenkins/jenkins.logjenkins默认配 ...
- NN 激活函数 待修改
Softmax 函数/算法 https://www.zhihu.com/question/23765351 RELU 激活函数及其他相关的函数 http://blog.csdn.net/u013146 ...
- 使用deb 打包开发的postgres extension
昨天写过一个使用rpm 打包分发pg 扩展的demo,今天使用deb 进行打包分发,同时使用checkinstall 生成我们的deb包 安装deb 依赖 sudo apt-get install c ...
- Java高级特性 第6节 注解初识
一.注解概述 Java注解也就是Annotation,是Java代码里的特殊标记,它为Java程序代码提供了一种形式化的方法,用来表达额外的某些信息,这些信息是代码本身无法表示的. 注解以标签的形式存 ...
- ueditor的简单用法
先粘贴未使用ueditor之前的代码: <body> <label for="input_content">作答区:</label> <t ...
- pyhton3.5将汉字转成二进制的方法
直接上代码:name = "你好,中国人"byteName = bytes(name.encode("utf-8"))print(byteName)for b ...
- Windows不要使用记事本编辑文本文件
摘自:廖雪峰 千万不要使用Windows自带的记事本编辑任何文本文件.原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0x ...
- ECMAScript 6 学习总结
1.什么是ES6? 简单的说 ES6 的第一个版本,在2015年6月发布了,正式名称就是<ECMAScript 2015标准>(简称 ES2015)在2016年6月,小幅修订的<EC ...