VBA数据库解决方案第十七讲:Recordset对象记录位置的定位方法

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

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA数据库解决方案第十七讲:Recordset对象记录位置的定位方法

【分享成果,随喜正能量】 人生有四苦:一是看不透。看不透人际中纠结,争斗后隐伤,看不透喧嚣中平淡,繁华后的宁静。二是舍不得。舍不得曾经的精彩,不逮的岁月,舍不得居高时的虚荣,得意处的掌声。三是输不起。输不起一段情感之失,输不起一截人生之败。四是放不下。放不下已经走远的人与事,放不下早已尘封的是与非。。

第十七讲 Recordset对象记录位置的定位方法

大家好,今天继续讲解VBA数据库解决方案的第17讲:Recordset对象记录位置的定位方法。在上一讲中我们讲了MoveFirs,MoveLast,MoveNext,MovePrevious的精准定位方法,对于数据库的操作,大段的代码是很常见的,要记得我以前的建议,不要手工去录入,要利用资料去修正代码,今日我们讲解记录定位的其他常见的方法。

1 Move方法

Move方法可以移动Recordset 对象中当前记录的位置。

语法;recordset.Move NumRecords, Start

参数:

A): NumRecords 长整型,指定当前记录位置移动的记录数。

B): Start 可选,字符串或变体型,指定从哪儿开始移动。也可为下值之一:

AdBookmarkCurrent(0) 默认。从当前记录开始。

AdBookmarkFirst(1) 从首记录开始。

AdBookmarkLast(2) 从尾记录开始。

实例讲解:我们还是用上一讲的数据,我们要从首行开始移动,移动的是2个记录,我们看看这个时候标签指向的是哪个记录,代码:

Sub mynz_17() '测试数据 第17讲: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("17").Select

Cells.ClearContents

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

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

Next i

rsADO.MoveFirst

rsADO.Move 2, 0

Sheets("17").Rows("2:2").Select

Selection.ClearContents

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

Sheets("17").Cells(2, j + 1) = rsADO.Fields(j)

Next j

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

MsgBox "ok!"

End Sub

代码截图:

代码解读:

对于其他的地方,我在上一讲已经非常详细地讲过了,只对下面的代码做一下说明:

rsADO.MoveFirst

rsADO.Move 2, 0

我们首先要把代码移动到第一条记录,然后向下移动,从当前记录即第一个记录开始移动,每次移动两个记录,然后显示记录的内容。

下面我们测试一下,先看看整个的记录集:

那么经过记录的移动后,应该为绿色框的数据,是不是呢?我们看看本程序的运行结果:

结果显示和我们当初的预想是一致的。

2 在Recordset对象中定位游标位置的其他办法

1) 使用Recordset 对象的AbsolutePosition 属性。

AbsolutePosition属性可以设置或返回游标当前的记录位置。下面代码将游标当前位置保存在变量myc中,然后设置为第10条记录:

myc = rst.AbsolutePosition

rst.AbsolutePosition = 10

2) 使用Recordset 对象的Bookmark属性。

Bookmark属性可以设置或返回游标当前当前记录的书签。Recordset 对象的每一条记录都有唯一的"书签"值。下面代码先将游标当前位置设置为第10条记录,然后将当前记录的书签保存到变量myc中,然后移动到下一条记录(实际使用时一般是进行其它的处理操作),最后在通过设置Bookmark属性将记录定位到原来的第10条记录。

rst.AbsolutePosition = 10

myc = rst.Bookmark

rst.MoveNext

rst.Bookmark =myc

与使用AbsolutePosition 属性的区别是,使用Bookmark属性时,往往不知道或不关心记录所处的实际位置。

后两种方法的实例就不再演示了,以后如果有用到的再说明。

今日内容回向:

1 Recordset对象的定位都有哪些方法?本讲重点讲了什么方法?

2 如何理解recordset.Move的参数NumRecords, Start呢?

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

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

相关推荐
丑八怪大丑4 分钟前
JDK8-17新特性
java·开发语言
书源丶16 分钟前
三十五、Java 泛型——类型安全的「万能模板」
java·开发语言·安全
EF@蛐蛐堂28 分钟前
【js】浏览器滚动条优化组件OverlayScrollbars
开发语言·javascript·ecmascript
代码中介商1 小时前
C++ 仿函数(Functor)深度解析:从基础到应用
开发语言·c++
小杍随笔1 小时前
Rust桌面GUI框架:性能优化与实战避坑指南
开发语言·性能优化·rust
二哈赛车手1 小时前
新人笔记---项目中简易版的RAG检索后评测指标(@Recall ,Mrr..)实现
java·开发语言·笔记·spring·ai
格林威1 小时前
3D相机视觉检测:环境光太强,结构光点云全是噪点怎么办?
开发语言·人工智能·数码相机·计算机视觉·3d·视觉检测·工业相机
Rust语言中文社区1 小时前
【Rust日报】2026-05-02 Temper - 用 Rust 编写的 Minecraft 服务器项目发布 0.1.0 版
运维·服务器·开发语言·后端·rust
爱滑雪的码农2 小时前
Java基础十一 流(Stream)、文件(File)和IO
java·开发语言·python
叶小鸡2 小时前
Java 篇-项目实战-天机学堂(从0到1)-day11
java·开发语言