【VBAPlanet】VBA+ADO+SQL,这样取数真香

您所在的位置:网站首页 使用vba打开引用窗口的方法 【VBAPlanet】VBA+ADO+SQL,这样取数真香

【VBAPlanet】VBA+ADO+SQL,这样取数真香

2024-07-12 10:30| 来源: 网络整理| 查看: 265

ADO是什么

首先,我们要介绍下ADO。 ADO (ActiveX Data Objects,ActiveX数据对象)是微软提出的应用程序接口,用以实现访问关系或非关系数据库中的数据……更多概念信息可以自行搜索。

之所以要学习ADO,一个原因是ADO自身的一些属性和方法对于数据处理是极其有益的;更重要的原因是,在EXCEL VBA中,一般只有通过ADO,才可以使用强大的SQL查询语言访问外部数据源,进而查、改、增、删相关数据源中的数据。

延伸在具体编程操作上,就形成了四步走发展战略:

VBA引用ADO类库。ADO建立对数据源的链接。ADO执行SQL语言。VBA处理SQL查询结果。 如何引用ADO

VBA中引用ADO类库一般有两种方式。

一种是前期绑定。

所谓前期绑定,是指在VBE中手工勾选引用Microsoft ADO相关类库。

在Excel中,按快捷键打开VBA编辑窗口,依次单击【工具】→【引用】,打开【引用-VBAProject】对话框。在【可使用的引用】列表框中,勾选“Microsoft ActiveX Data Objects 2.8 Library”库,或“Microsoft ActiveX Data Objects 6.1 Library”库,单击【确定】按钮关闭对话框。

在这里插入图片描述

另一种是使用代码后期绑定。 Sub 后期绑定() Dim cnn As Object Set cnn = CreateObject("adodb.connection") End Sub

两种方式的主要区别是,前期绑定后,在代码编辑过程中,VBE的“自动列出成员”功能,可以提供ADO的属性和方法,这便于代码快捷、准确的编写。但当他人的Excel工作簿并没有手工前期绑定ADO类库时,相关代码将无法运行。因此后期代码绑定ADO的通用性会更强些,它不需要手工绑定相关类库。

比较好的用法是,代码编写及调试时,使用前期绑定,代码编写完善后,再修改为后期绑定发布使用。

不论我们使用SQL语言对数据源作何操作,都得首先使用ADO创建并打开一个到数据源的链接;这就好比得先修路,才能使用汽车运输货物。

在VBA中,我们通常使用ADO的Connection.Open语句来显式建立一个到数据源的链接。

Connection.Open语法如下:

connection.Open ConnectionString, UserID, Password, Options ConnectionString可选,字符串,包含连接信息。UserID可选,字符串,包含建立连接时所使用用户名。Password可选,字符串,包含建立连接时所使用密码。Options可选,决定该方法是在连接建立之后(异步)还是连接建立之前(同步)返回,默认是同步,adAsyncConnect是异步。

虽然不同的数据库或文件有不同的连接字符串,但常用的数据库或文件的连接字符串均是固定的。

举个例子,如果将代码所在的Excel(2019版)作为一个外部数据源建立链接,代码如下:

Sub Testcnn() Dim cnn As Object ' 定义变量 Set cnn = CreateObject("adodb.connection") ' 后期绑定ADO cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes;IMEX=0';Data Source=" & ThisWorkbook.FullName ' 建立链接 cnn.Close ' 关闭链接 Set cnn = Nothing ' 释放内存 End Sub

简单说下上面代码连接字符串中各关键字(第4行代码)的意思。

Provider是Connection 对象提供者名称的字符串值,03版Excel是“Microsoft.jet.OLEDB.4.0”,其它版本可以使用“Microsoft.ACE.OLEDB.12.0”;Extended Properties是Excel版本号及其它相关信息,03版本是Excel 8.0,其它版本可以使用Excel 12.0。其中HDR项是引用工作表是否有标题行,默认值HDR=Yes,意思是引用表的第一行是标题行。标题只能一行,不能多行,亦不能存在合并单元格。HDR=no,意思是引用表不存在标题行,也就是说第一行开始就是数据记录了;此时,相关字段名在SQL语句中可以使用f加序列号表示,第1列字段名是f1,第2列字段名是f2,其余以此类推,f是英文field(字段)的缩写。IMEX项是汇入模式,默认为0(只读模式),1是只写,2是可读写。当参数设置为1时,除了只写,还有默认全部记录数据类型为文本的用途,关于这一点及其限制前提我们以后再谈。Data Source是数据来源工作薄的完整路径。

VBA代码Application.Version可以获取计算机的Excel版本号,因此以下代码兼顾了03及各高级版本Excel的情况:

Sub Testcnn2() Dim cnn As Object Dim strPath As String Dim str_cnn As String Set cnn = CreateObject("adodb.connection") strPath = ThisWorkbook.FullName '当前工作簿的完整路径 If Application.Version


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3