当前位置:首页 > 问答 > 正文

学VBA连接数据库那些字符串怎么用,搞定多种数据源其实没那么难

ExcelHome论坛《VBA连接数据库字符串详解》

学VBA连接数据库,最让人头疼的可能就是那一长串像天书一样的连接字符串了,别怕,这东西说白了就是个“地址条”,你告诉VBA要去哪家、找谁、用什么钥匙开门,只要拆开看,一点都不神秘,今天咱们就把它掰开揉碎,让你能轻松搞定几种最常见的数据源。

连接字符串的核心“配方”

不管连什么数据库,连接字符串都包含几个基本部分,像搭积木一样拼起来就行,最关键的是这三个:

  1. 提供者: 就是驱动程序,可以理解成你要用哪种“翻译官”去和数据库说话,比如连Access、连Excel、连SQL Server,用的“翻译官”都不一样。
  2. 数据源位置: 数据库文件放在哪里,或者数据库服务器的名字和地址,这是你要去的“具体门牌号”。
  3. 安全信息: 怎么证明你有权限进去,通常是用户名和密码,但有时候也可以不用,比如Access数据库可能就没设密码。

把这几个核心要素记在心里,我们再来看具体例子就好懂了。

实战1:连接Access数据库(.mdb或.accdb文件)

这是最常遇到的情况,你的数据库就是一个.accdb或.mdb文件,可能就在你电脑的某个文件夹里。

  • 使用旧版Provider(适合.mdb和.accdb): "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\我的文件夹\数据库.mdb;" 这里,Microsoft.Jet.OLEDB.4.0是老牌的“翻译官”,既能连旧的.mdb,也能连比较新的.accdb。Data Source后面就是文件在电脑上的完整路径。

  • 使用新版Provider(推荐用于.accdb): "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\我的文件夹\数据库.accdb;" Microsoft.ACE.OLEDB.12.0是更新的“翻译官”,对accdb文件支持更好,如果你的电脑上同时有旧版Access和新版Access,用这个通常更稳妥。

  • 如果数据库有密码怎么办? 就在后面追加密码信息: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\我的文件夹\数据库.accdb;Jet OLEDB:Database Password=你的密码;"

    学VBA连接数据库那些字符串怎么用,搞定多种数据源其实没那么难

VBA代码怎么写?

光有字符串还不行,得在VBA里用起来,套路非常固定,就像你打电话要先拿起听筒、拨号、说话、再挂断一样。

Sub 连接Access示例()
    Dim conn As Object ' 定义一个连接对象
    Set conn = CreateObject("ADODB.Connection") ' 创建这个连接对象
    ' 这就是我们上面说的连接字符串,以Access为例
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\我的数据库.accdb;"
    conn.Open ' “拨号”连接,门就打开了
    ' ... 这里写你连接成功后要做的操作,比如查询数据 ...
    conn.Close ' 做完事记得“挂电话”,关闭连接
    Set conn = Nothing ' 把这个对象清空
End Sub

实战2:连接Excel文件(把Excel当数据库查)

很多人不知道,Excel文件本身也能被VBA当作数据库来查询,特别适合处理大量数据,这时候,一个.xlsx文件就是一个“数据库”,里面的每个工作表(Sheet)就是一张“表”。

  • 连接字符串: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\我的数据.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES"";" 这里的关键是Extended Properties(扩展属性)。Excel 12.0 Xml告诉“翻译官”这是个新版本的Excel文件。HDR=YES非常重要,意思是“第一行是列标题”,这样你查询时才能用列名,如果是HDR=NO,系统会默认第一行也是数据,列名会变成F1, F2这样的。

实战3:连接SQL Server数据库

学VBA连接数据库那些字符串怎么用,搞定多种数据源其实没那么难

如果要连接公司服务器上的SQL Server,字符串稍微复杂点,但核心要素不变。

  • 标准写法(使用用户名密码登录): "Provider=SQLOLEDB;Data Source=你的服务器名或IP地址;Initial Catalog=数据库名;User ID=用户名;Password=密码;" 这里,Data Source填的是服务器的名字(比如公司内部服务器名)或者IP地址(比如192.168.1.100)。Initial Catalog指的是这个服务器上你要具体连接的那个数据库叫啥名。

  • 信任连接(Windows身份验证): 如果你的电脑登录权限可以直接访问数据库,可以用更简单的方式: "Provider=SQLOLEDB;Data Source=你的服务器名;Initial Catalog=数据库名;Integrated Security=SSPI;" Integrated Security=SSPI的意思就是“用我当前登录Windows的账号去验证”,这样就不用显式地写用户名和密码了。

怎么测试连接是否成功?

一个非常实用的技巧是,在你写复杂的SQL查询之前,先用最简单的conn.Open方法测试一下,如果密码错了或者文件路径不对,VBA会报错,如果能顺利执行到conn.Open这一句之后没有报错,那就说明你的连接字符串写对了,门已经打开了!接下来再进行数据操作就放心多了。

总结一下

连接字符串就是“翻译官+地址+钥匙”的组合,你可以先找一个正确的例子,然后像改填空题一样,根据你的实际情况修改文件路径、服务器名、用户名和密码这几个关键地方,多试几次,熟悉了之后就会发现,搞定各种数据源真的没那么难,下次遇到新的数据库类型,上网搜一下“VBA连接 [数据库名] 连接字符串”,基本上都能找到现成的模板,照着改就行。