当前位置: 首页 > article >正文

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

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

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

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

第十七讲 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

代码截图:

9fdaa7a0c8e08574815262dccd6aca46.jpeg

代码解读:

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

rsADO.MoveFirst

rsADO.Move 2, 0

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

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

6e9394541f5f2cfa22ef413efbef088b.jpeg

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

cc3488661b1a1efb2ae8fc05500fb449.jpeg

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

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属性时,往往不知道或不关心记录所处的实际位置。

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

c4dcae2d6ca3051a6be80354091fc6a8.jpeg

今日内容回向:

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

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

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

6f9d555b21d6dcf44d63057e85f56b37.jpeg

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

ec49cd9f1468f4d3ef9967ed23a30c96.jpeg

6b2097dff870e9ecaba4d10cf7e0c9b1.jpeg




http://www.kler.cn/a/420423.html

相关文章:

  • Ubuntu 20.04中的文件移动操作:详解与实用示例
  • 如何把阿里云ECS里的文件下载到本地(免登录免配置)
  • 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  • UEFI Spec 学习笔记---3 - Boot Manager(3)
  • 30分钟学会正则表达式
  • 洛谷二刷P4715 【深基16.例1】淘汰赛(c嘎嘎)
  • 你还没有将 Siri 接入GPT对话功能吗?
  • 在线影视播放网站PHP电影网站源码自动采集MKCMS升级版米酷模板含WAP手机版附三套模板
  • Y20030017php+mysql小型宠物服务平台的设计与实现 源码 文档 PPT
  • java单例设计
  • 在树莓派上使用自带的摄像头采集视频
  • 深度探索Spring Context:框架式的Bean访问与企业级功能
  • Day2 生信新手笔记: Linux基础
  • 鸿蒙与Linux内核的关系
  • java Stream 详解
  • 嵌入式Linux无窗口系统下搭建 Qt 开发环境
  • redis针对hash的命令 及 使用场景
  • 电机驱动MCU介绍
  • 理解 Python PIL库中的 convert(‘RGB‘) 方法:为何及如何将图像转换为RGB模式
  • 广东省计算机学会40周年暨2024年庆典活动 粤港澳数字人的生产与驱动技术论坛、第五届人工智能与信息系统国际学术会议
  • 【大数据学习 | 面经】Spark为什么比MR计算更快
  • 解析生成对抗网络(GAN):原理与应用
  • Linux C/C++编程之静态库
  • C语言——宏、预处理、多文件
  • 【WRF-Urban】WPS中有关Urban的变量设置
  • 【大语言模型】ACL2024论文-23 检索增强的多语言知识编辑