VBA数据库解决方案第9讲:如何打开数据库记录集合,并把所得的数据显示到工作表文件中

您所在的位置:网站首页 vba数据库解决方案pdf下载 VBA数据库解决方案第9讲:如何打开数据库记录集合,并把所得的数据显示到工作表文件中

VBA数据库解决方案第9讲:如何打开数据库记录集合,并把所得的数据显示到工作表文件中

2023-11-17 23:56| 来源: 网络整理| 查看: 265

点蓝字关注,回复“VBA”获取专业资料

 《VBA代码解决方案》系列书作者

头条百家平台 VBA资深创作者

_______________________________

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

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

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

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

Sub mynzRS1()

   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

   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

End Sub

代码截图:

代码讲解:

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 TorsADO.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或 DAORecordset 对象的内容复制到工作表中,复制的起始位置以指定区域为左上角。

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

参数:

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

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

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

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

⑨  rsADO.Close

    cnADO.Close

    Set rsADO = Nothing

    Set cnADO = Nothing

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

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

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

今日内容回向:

1  如何把数据库的内容在工作表中显示?

2  今天的代码采用了一种方式的处理,下一讲还有一种方案的处理,请结合上一讲的内容,看看今日的代码用的是那种处理方法?

 

_____________________________

觉得有启发,点个“在看”,转给朋友们

欢迎你“留言”,和作者直接交流

 

更多关联阅读

  



【本文地址】


今日新闻


推荐新闻


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