龙空技术网

数据库中数据的获得

VBA语言専攻 275

前言:

眼前朋友们对“如何获取数据库”大约比较关切,朋友们都需要剖析一些“如何获取数据库”的相关文章。那么小编也在网上网罗了一些关于“如何获取数据库””的相关内容,希望兄弟们能喜欢,咱们快快来学习一下吧!

【分享成果,随喜正能量】不管多难,都会成功渡过,困难过后,剩下的便都是好运,吉祥运,顺利运。

《VBA数据库解决方案》教程是我推出第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第9讲:数据库中数据的获得。

第九讲 打开数据库记录集,把所得的数据回填到工作表

大家好,今日继续讲解VBA数据库解决方案的第9讲内容,打开一个数据库记录集,并把数据放到工作表文件中。

数据库的讲解开始进入到实际操作阶段,数据库的内容涉及到知识较多,还是之前强调的,这是VBA中级及以上水平的范畴,对于基础没有牢固的朋友,一定要下功夫把基础打牢,才可以逐渐过渡到数据库的学习。一定要对照我的第一套教程《VBA代码解决方案》,把各个知识点要弄通,然后再学习这套教程,可以收到事半功倍的效果。

1 应用场景的具体分析

回到我们的话题,实例,有一个数据库文件名为mydata,里面记录了某公司员工的情况,我命名为“职员表”,如下面的截图,我只是给出了两个数据,如何把数据库中的数据中符合部门为总务的数据导出到EXCEL文件中,以利于查看呢?

2 打开数据库,把所得的数据回填到工作表中的代码及代码分析

下面我们看看代码将如何书写:

Sub mynz_9() '第9讲内容,打开一个数据库记录集,并把数据放到工作表文件中

Dim cnADO, rsADO As Object

Dim strPath, strSQL As String

Dim i As Integer

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.RecordSet")

strPath = ThisWorkbook.Path & "\mydata.accdb"

cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath

strSQL = "SELECT * FROM 职员表 WHERE 部门='总务'"

rsADO.Open strSQL, cnADO, 1, 3

Sheets("9").Select

Cells.ClearContents

For i = 0 To rsADO.Fields.Count - 1

Cells(1, i + 1) = rsADO.Fields(i).Name

Next i

Range("A2").CopyFromRecordset rsADO

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

代码截图:

代码讲解:

① Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.RecordSet")

上述代码中新创建了一个连接,一个记录集,大家要清楚的是,这是利用创建的方法产生的连接,

② strPath = ThisWorkbook.Path & "\mydata.accdb"

给出了数据库的路径

③ cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath

这里是打开了cnADO这个连接

④ strSQL = "SELECT * FROM 职员表 WHERE 部门='总务'"

这是一个SQL语句,这个语句的作用就是,在数据库的“职员表”中查询部门为“总务”的人员

⑤ rsADO.Open strSQL, cnADO, 1, 3

这个命令是打开上述的符合SQL查询的记录集,其中strSQL 是代表"SELECT * FROM 职员表 WHERE 部门='总务'",cnADO是我们建立起来的ADO连接,后面的1和3的意义在上一讲我们刚刚见过;

1代表;AdOpenForwardOnly (默认值)打开仅向前类型游标。

3代表: AdLockOptimistic 开放式锁定(逐个) — 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。

⑥ Cells.ClearContents 为了存放数据,在工作表中先清理一下,清空数据

⑦ For i = 0 To rsADO.Fields.Count - 1

Cells(1, i + 1) = rsADO.Fields(i).Name

Next i

为了理解上述语句的意义,我们先来看看记录集的一些属性:

rsADO.Fields.Count 是记录结果集中的字段数,

Fields是字段集对象,由单个的Field字段组成,表示Recordset对象的列的集合。Fields成员的下标从0开始,0表示第一个字段。

上面代码的意思是将需要将字段名写入,也就是说在EXCEL中先写入表头。

⑧ Range("A2").CopyFromRecordset rsADO

为了理解上述代码的意义,先讲一下CopyFromRecordset方法。

CopyFromRecordset方法是将一个ADO或 DAO Recordset 对象的内容复制到工作表中,复制的起始位置以指定区域为左上角。

句法:Rng.CopyFromRecordset(Data, MaxRows, MaxColumns)

参数:

a Data:Void 类型,必选。复制到指定区域的 Recordset 对象。

b MaxRows:Variant 类型,可选。复制到工作表的记录个数上限。如果省略该参数,将复制 Recordset 对象的所有记录。

c MaxColumns:Variant 类型,可选。复制到工作表的字段个数上限。如果省略该参数,将复制 Recordset 对象的所有字段。

那么,Range("A2").CopyFromRecordset rsADO的意义就是讲所得到的记录集合,复制到A2单元格为左上角的一个适应的区域内。

⑨ rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

着几条代码的意义就是记录集关闭,连接关闭,释放内存。

下面看我们运行后的结果:

到此开篇提到的问题我们的问题就圆满解决了。

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解

第1套教程(共三册):《VBA代码解决方案》是入门后的提高教程

第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)

第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解

第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解

第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用

第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解

第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用

上述教程的学习顺序:

① 7→1→3→2→6→5或者7→4→3→2→6→5。

② 7→8

如何学习VBA呢? 概括的说就是: 学习过程中要信、解、受、持,更要有回向的业力。无论您在学习的任何阶段,都要对照教程的知识点加持自己的实际工作,总会有丰厚的收获。

标签: #如何获取数据库