• Excel、VBA与Mysql交互


    转载自 https://www.cnblogs.com/wuzhiblog/p/VBA_Excel_Mysql.html,感谢原博主

    本文主要涉及:

    1. VBA中的MySQL环境配置
    2. VBA连接MySQL数据库
    3. VBA读写MySQL数据
    4. 在Excel中连接MySQL数据库及数据读写

    系统环境:

    • Windows 10
    • Excel 2010

    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 连接服务

    下载地址:Download Connector/ODBC

    选择操作系统及系统版本,下载对应的MSI文件安装即可。
    这里应当注意的是,在下载安装ODBC连接器时,要选择和你的数据库相同位数的版本,而不是系统位数,否则安装完后依然会提示找不到数据库驱动。(查看mysql版本位数,mysql --version,https://www.cnblogs.com/kzwrcom/p/6014544.html
    (我试过在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.Recordsetrs.OpenADODB.Recordset用于执行SQL语句并接收查询语句返回的结果集。

    这里需要提一下的是,在VBA中执行SQL语句有两种方式,其一是使用连接对象执行:conn.Execute,其第一个参数就是SQL语句;另一种则使用结果集对象执行:rs.Open,这种方式有两个必要参数,分别是SQL语句和连接对象,如上例中的rs.Open "select * from `test`", conn

    接下来的两行Range是用于把查询结果复制到Excel表格中的。

    3.2 写入数据到MySQL

    其实写入数据,只需要把上例中的SQL语句改成UPDATE或者INSERT即可,就不多说了。

  • 相关阅读:
    hdu 2546 饭卡
    poj 2262 Goldbach's Conjecture
    poj 1287 Networking
    poj 2377 Bad Cowtractors
    poj 1789 Truck History
    poj 2349 Arctic Network
    poj 1258 Agri-Net
    acdream 20140730 D题
    hdu 1012 素数判定
    hdu 2098 分拆素数和
  • 原文地址:https://www.cnblogs.com/lybstudy/p/10762379.html
Copyright © 2020-2023  润新知