VBA代码引用ADO的连接用法

使用数据库的优势与好处就不多讲了。我们如何利用EXCEL的VBA代码,有效地与SQL SERVER数据库结合起来,实现菜鸟水平也可以达到高效利用数据库呢?这关键的第一步就是,如果使EXCEL的VBA代码,顺利访问SQL SERVER数据库,然后就可以用普通的SQL语句读写数据库中的数据了。现在就我的编写调试的实践经验,谈谈我的个人体会。当然由于水平关系,存在表述错误也是在所难免的。

在连接数据库前,首先要在菜单中“工程”—“引用”中选择Microsoft ActiveX Data Objects 2.6 Library 和Microsoft ActiveX Data Objects Recordset 2.6 Library这两个组件。 运用ADO对象模型的主要元素:Connection(连接)中的ConnectionString属性进行连接, ConnectionString为可读写string类型,指定一个连接字符串,告诉ADO 如何连接数据库。关于ADO的前期绑定和后期绑定,我这里就不多说了(以下举例皆以cnn为连接对像表述)。

以下我们就以ConnectionString的写法总结下可以很快掌握的连接方法:

第一种数据库引擎表达式的写法:

cnn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=用户名;Password =密码;Data Source=服务器名或IP地址;Initial Catalog=数据库名;Connection Timeout=5;"

上面的中文描述就是需要修改的地方,一般SQL SERVER的用户名是sa,密码就是在数据库安装时以sql server身份验证时所设置的密码,服务器名称就是数据库名称,可以是ip地址,本机可以用127.0.0.1表示,局域网其他计算机可以用其ip地址填写,然后改好数据库的名称,最后的Connection Timeout表示等待时间。一般只要端口号正常,局域网内计算机,应该在零点几秒内就顺利连接上了。

如果上面这种方法连接不上,很可能你的服务器端口号设置不正常,除了修改服务器的端口号设置以外,我们还有第二种方法:

cnn.ConnectionString = "Provider=SQL server native client 10.0;Server=服务器名或IP地址;Uid=用户名;Pwd=密码;Database=数据库名;Connection Timeout=5;"

这中间的文字描述就不重复了,参数的表达式略有区别,最大的区别就在于使用了不同的连接引擎Provider=SQL server native client 10.0,经过测试,就算检查不到端口号,也能连上服务器中的数据库。

现在说说第三种方法,建立无源数据库连接:

conn.ConnectionString="driver=;server=服务器名或IP地址;uid=用户名;pwd=密码;Database=数据库名"

conn.ConnectionTimeout = 50

这其中的唯一不同的地方也是数据库引擎的改变driver=,其他参数的引用与第二种方法相似。也是经过测试能正常使用的字符串表达式。无源数据库连接则不用配置ODBC环境,可以省去手工设置DSN的麻烦,这种方法所编写的软件适应性广,又符合专业软件的要求。

当然,网上还有一种与此不同的方法,有源数据库连接。有源连接就需要配置ODBC环境又要设置DSN,所以我也没有哪个时间去测试了。好方法,有效的方法只要有一个就够了。你说是不?做一个窗体,试着编写一段代码,就能顺利测试了,附一段测试连接数据库的代码:

Public Sub ServerTest()

Dim cnn As Object

On Error GoTo Err1

'建立与SQL Server数据库服务器的连接

Set cnn = CreateObject("ADODB.Connection")

'建立无源数据库连接

cnn.ConnectionString = "driver=;server=127.0.0.1;uid=sa;pwd=6799;Database=管理系统2018"

cnn.ConnectionTimeout = 50

cnn.Open

'判断数据库服务器连接是否成功

If cnn.State = 1 Then MsgBox "连接ok啦……"

Err1:

Set cnn = Nothing

End Sub

最后我补充二个关于ADO连接ACCESS数据库的连接引擎写法:

cnn.provider="Microsoft.Jet.OLEDB.4.0" '访问2003版的用这个驱动

cnn.provider="Microsoft.ACE.OLEDB.12.0" '访问2007版以上的用这个驱动

cnn.open ";Data Source=C:\test.mdb;Jet OLEDB:Database Password="

这其中的哪些应改为什么,哪些是参数,相信你一看就能明白吧?如有表述不当的地方,也请高抬贵手海涵。

如果本文对你有所帮助,或者你有什么使用疑问,可以关注本人QQ或微信讨论。

知识并不是我创造的,我只是知识的搬运工。

本文来自企鹅号 - 无品办公媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java达人

使用Redis做MyBatis的二级缓存

使用Redis做MyBatis的二级缓存  通常为了减轻数据库的压力,我们会引入缓存。在Dao查询数据库之前,先去缓存中找是否有要找的数据,如果有则用缓存中的数...

49650
来自专栏DeveWork

(2013.09更新)最新W3School 离线完整版CHM 电子书下载

最近一直很忙,有网友在《(2013.07)最新W3School 离线完整版CHM 电子书下载》一文评论说W3School 已经有更新了,叫我也更新电子书。忙到现...

23270
来自专栏程序员宝库

我所理解的接口设计

前言 自己做接口开发的时间也算不短了(三年),想写这篇文章其实差不多已经有一年多的时间了。我将从下面的方向来对我所理解的接口设计做个总结: 接口参数定义 -> ...

33270
来自专栏Android 研究

OKHttp源码解析(四)--中阶之拦截器及调用链

那我们书接上文。上篇文章已经说明了OKHttp有两种调用方式,一种是阻塞的同步请求,一种是异步的非阻塞的请求。但是无论同步还是异步都会调用下RealCall的 ...

42650
来自专栏AI2ML人工智能to机器学习

TF Boy 之初筵 - 会话封装

在“TF Boy 之初筵 - 分布十三式”里面我们给了一个分布式MNIST训练的例子, 然后在“TF Boy 之初筵 - 机器簇” 我们对第四式: Cluste...

14030
来自专栏张善友的专栏

Net Framework 2.0 事务处理

事务 处理事务是构建许多业务逻辑的一个重要方面。 .NET Framework 2.0 中的事务 在 .NET Framework 2...

19180
来自专栏程序员阿凯

哥哥面前一条弯弯的河 --「JDBC」连接数据库

17530
来自专栏orientlu

BLE 广播格式定义

低功耗蓝牙两类报文 : 广播报文 和 数据报文。 本文讨论广播报文数据段,不包括完整报文其他部分,比如前导,接入地址等

96820
来自专栏cs

linux 学习笔记七

来自实验楼的学习笔记,文字基本复制,粘贴。 ? 下载了一个录制gif图的软件,还不错 参考与:在Linux(Ubuntu)下超好用的录屏gif软件!!...

36650
来自专栏友弟技术工作室

MongoDB简易教程mongo简介及应用场景安装和使用mongodbPHP中操作mongo数据库python中操作mongo数据库

传统数据库中,我们要操作数据库数据都要书写大量的sql语句,而且在进行无规则数据的存储时,传统关系型数据库建表时对不同字段的处理也显得有些乏力,mongo应运而...

48860

扫码关注云+社区

领取腾讯云代金券