前言:
眼前朋友们对“如何获取数据库”大约比较关切,朋友们都需要剖析一些“如何获取数据库”的相关文章。那么小编也在网上网罗了一些关于“如何获取数据库””的相关内容,希望兄弟们能喜欢,咱们快快来学习一下吧!【分享成果,随喜正能量】不管多难,都会成功渡过,困难过后,剩下的便都是好运,吉祥运,顺利运。
《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呢? 概括的说就是: 学习过程中要信、解、受、持,更要有回向的业力。无论您在学习的任何阶段,都要对照教程的知识点加持自己的实际工作,总会有丰厚的收获。
标签: #如何获取数据库