VBA数据库解决方案第十五讲:Recordset集合中单个数据的精确处理

news/2024/12/22 14:32:06/

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

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA数据库解决方案第十五讲:Recordset集合中的单个数据的精确处理665d63e5b42f9e3f8b782019881810ed.jpeg

【分享成果,随喜正能量】 你有你的立场,我有我的底气。各自修行,各自好;各自因果,各自了。成年人最大的清醒,就是管好自己,不渡他人,。

第十五讲 Recordset集合中的单个数据的精确处理

大家好,今天给继续讲解VBA数据库解决方案的第15讲:Recordset集合的单个数据精确处理,在前几讲中,我们讲了Table对象的添加和删除。今天我们要讲的内容是Recordset集合的处理方案,这个处理和Table的处理是关系紧密的,在第10讲中我们讲了利用下面的语句实现Recordset集合内容的可视化导出:Range("A2").CopyFromRecordset rsADO,那么是否还有其他的办法能精确的控制导出的内容呢?

比如我只需要其中几个字段的记录,该如何处理呢?这时我们需要对Recordset集合的详细的数据处理了,也就是说要通过循环语句把每一个数据都要遍历到。

1 记录集的MoveFirs,MoveLast,MoveNext,MovePrevious方法

  • MoveFirst方法

作用是:将记录指针移动到记录集中的第一条记录。它以第一条记录作为当前记录。

  • 当记录集为空时,请求MoveFirst或MoveLast将产生一个错误。
  • MoveLast方法

作用是:将记录指针移动到记录集中的最后一条记录。它以最后一条记录作为当前记录。

  • 当记录集为空时,请求MoveFirst或MoveLast将产生一个错误。
  • 如果记录集对象不支持书签或不能向后移动指针,那么将产生错误。
  • MoveNext方法

作用是:将记录指针移动到记录集中的下一条记录。它以下一条记录作为当前记录。

  • 当当前记录指针位于最后一条记录时,如果你请求这个方法,将产生错误。
  • MovePrevious 方法

作用是:将记录指针移动到记录集中的上一条记录。它以上一条记录作为当前记录。

  • 如果记录集对象不支持书签或不能向后移动指针,那么将产生错误。.
  • 当当前记录为记录集中第一条记录时,如果你请求该方法,那么它将产生一个错误。

由此我们还要判断记录集是否为首位还要判断,这时是通过般需要通过Recordset对象的EOF属性先进行判断游标是否到了记录尾。当游标到了记录尾时,EOF属性会被设置为True。

同理可以通过Recordset对象的BOF属性先进行判断游标是否到了记录首。当游标到了记录首时,BOF属性会被设置为True。

2 精准控制记录集的导出

如下面的数据库的数据,我们要导出部门为“一厂”的职工目录,该如何做到呢?5f739552830075d932c2d2271c80a909.jpeg

代码如下:

Sub mynz_15() '第15讲:Recordset集合的单个数据精确处理

Dim cnADO As Object, rsADO As Object

Dim strPath As String, strSQL As String

Dim i As Integer

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.RecordSet")

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

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

strSQL = "SELECT * FROM 员工信息 WHERE 部门='一厂'"

rsADO.Open strSQL, cnADO, 1, 3

Sheets("15").Select

Cells.ClearContents

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

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

Next i

For i = 1 To rsADO.RecordCount

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

Sheets("15").Cells(i + 1, j + 1) = rsADO.Fields(j)

Next j

rsADO.MoveNext

Next i

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

MsgBox "ok!"

End Sub

代码截图:

e30df04b4703b66cb99b059966bdab69.jpeg

代码解析:

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

Set rsADO = CreateObject("ADODB.RecordSet")

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

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

上述代码先建立ADO 和RS 对象并打开

2)strSQL = "SELECT * FROM 员工信息 WHERE 部门='一厂'"

rsADO.Open strSQL, cnADO, 1, 3

上述语句,建立一个SQL语句并打开

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

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

Next i

表头计入

4) For i = 1 To rsADO.RecordCount

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

Sheets("Sheet1").Cells(i + 1, j + 1) = rsADO.Fields(j)

Next j

rsADO.MoveNext

Next i

数据内容计入,这个是今日内容的重点,这种方法的操作数据是一个一个计入的。对于记录集的指针转到下一个记录一定要用rsADO.MoveNext 移动记录。

5)rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

关闭连接,释放内存。

看下面的输出结果:

b6e457f70f0ea53305344cb4a4dfdc7f.jpeg

通过记录集的精准控制,可以完成具体到每个数据的判断,应用是非常灵活的,

今日内容回向:

1 MoveFirs,MoveLast,MoveNext,MovePrevious 方法的意义是否理解呢?

2 如何实现记录的精确控制?

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

4e488de4620fa6c49e9aec375b051411.jpeg

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

0d1a0bd09c28176818aa692dc5fbe030.jpeg

2e938765eeacb3dee512b3ba6cdef594.jpeg




http://www.ppmy.cn/news/1536144.html

相关文章

C(十一)scanf、getchar(第三弹)

问题引入:如何实现输入一串密码,如:“123 xxxx” ,然后读取并确认,是 -- Y;否 -- N。 自然的,我们想到用scanf,但是在使用过程中你是否遇到跟我一样的困惑呢?如下&…

Qt_QSS介绍与使用

目录 1、QSS的语法介绍 2、QSS的基本使用 3、QSS的全局设置 4、样式的叠加特性 5、样式的优先级 6、使用Qt Designer设置样式 7、选择器种类介绍 7.1 类选择器 7.2 ID选择器 7.3 并集选择器 8、子控件选择器 9、伪类选择器 10、盒子模型 10.1 设置边框和内…

汽车生产四大工厂简单介绍

一、冲压工厂 这一工艺通过压力机和模具对板材施加外力,使之产生塑性变形或分离,从而获得所需形状和尺寸的工件。 二、焊接工厂 将各个冲压成型的部件通过加热或加压的方式连接在一起,形成白车身。焊接技术直接影响着汽车的使用性能&#…

28 基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过ADC0808获取两路电压,通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行仿真,全部资源在页尾,提供…

计算机毕业设计 基于深度学习的短视频内容理解与推荐系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

软件设计师(软考学习)

数据库技术 数据库基础知识 1. 数据库中的简单属性、多值属性、复合属性、派生属性简单属性:指不能够再分解成更小部分的属性,通常是数据表中的一个列。例如学生表中的“学号”、“姓名”等均为简单属性。 多值属性:指一个属性可以有多个值…

前端的全栈混合之路Meteor篇(二):RPC方法注册及调用

在Meteor 3.0中,RPC(远程过程调用)机制是实现前后端数据交互的重要特性。通过RPC,前端可以轻松调用后端方法(Methods)并获取数据,而后端的逻辑也可以同步或异步执行并返回结果。本文将详细介绍M…

Ubuntu 中 Redis ,MySQL 基本使用

1、Redis (1)启动Redis 服务端客户端命令 服务端 ps aux | grep redis 查看redis服务器进程 sudo kill -9 pid 杀死redis服务器 sudo redis-server /etc/redis/redis.conf 指定加载的配置文件客户端 连接redis: redis-cli运⾏测试命令&am…