• VBA数据库解决方案第九讲:把数据库的内容在工作表中显示


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

    这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA数据库解决方案第九讲:把数据库的内容在工作表中显示d05adcd6f82d78326444402e39b95fd8.jpeg

    【分享成果,随喜正能量】凡是经不起时光沉淀的生命喧嚣,都不算伤痛,更不算创伤,它就是像浮云片片,来了去了,如果你心大点,它既不是来也不是去,它就是一片风景。。

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

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

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

    代码讲解:

    ① 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

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

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

    7af7e884e7b75eed81d1498d53ec0846.jpeg

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

    今日内容回向:

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

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

    本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm

    dca01a1780afa55848567d2abe6f6dd2.jpeg

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

    44ea19cb8d3b3d401f01ecc09cb6bde9.jpeg


  • 相关阅读:
    zabbix触发器与动作
    MybatisPlus使用
    【最新版】ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端(支持分享朋友圈)
    传输层协议-UDP协议
    零售超市商家怎么做微信小程序
    这是什么牛马机器视觉公司
    14 Python使用网络
    定位器追踪器怎么连接手机
    ASP.NET基于Web Mail收发系统设计与开发
    pbootcms模板标签序数从2开始
  • 原文地址:https://blog.csdn.net/VBA6337/article/details/137283313