[分享成果,喜悦和正能量]人生的一切不是计算,而是善。不是救,是修好的。
胸襟的宽窄,决定命运的格局,你能包容多少,就能拥有多少。凡事看得开、想得透、拿得起、放得下,学会隐忍性情,懂得克制欲望,退却时理智,谦让时大度,除却杂念私心,少些攀比计较,才会随缘自适。《VBA数据库解决方案》教程是我推出第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第17讲:Recordset对象记录的位置移动。
第十七讲 Recordset对象记录位置的定位方法
大家好,今天给继续讲解VBA数据库解决方案的第17讲:Recordset对象记录位置的定位方法。在上一讲中我们讲了MoveFirs,MoveLast,MoveNext,MovePrevious的精准定位方法,对于数据库的操作,大段的代码是很常见的,要记得我以前的建议,不要手工去录入,要利用资料去修正代码,今日我们讲解记录定位的其他常见的方法。
1 Move方法
Move方法可以移动Recordset 对象中当前记录的位置。
语法;record NumRecords, Start
参数:
a: NumRecords 长整型,指定当前记录位置移动的记录数。
b: Start 可选,字符串或变体型,指定从哪儿开始移动。也可为下值之一:
AdBookmarkCurrent(0) 默认。从当前记录开始。
AdBookmarkFirst(1) 从首记录开始。
AdBookmarkLast(2) 从尾记录开始。
- 实例讲解:我们还是用上一讲的数据,我们要从首行开始移动,移动的是2个记录,我们看看这个时候标签指向的是哪个记录,代码:
Sub mynz_17() '测试数据 第17讲:Recordset对象记录位置的定位方法。
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 = T & "\myda;
cnADO.Open "Provider=Micro;Data Source=" & strPath
strSQL = "SELECT * FROM 员工信息 WHERE 部门='一厂'"
r strSQL, cnADO, 1, 3
Sheets("17").Select
Cells.ClearContents
For i = 0 To r - 1
Sheets("17").Cells(1, i + 1) = r(i).Name
Next i
r
r 2, 0
Sheets("17").Rows("2:2").Select
Selec
For j = 0 To r - 1
Sheets("17").Cells(2, j + 1) = r(j)
Next j
r
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
MsgBox "ok!"
End Sub
代码截图:
代码解读:
对于其他的地方,我在上一讲已经非常详细的讲过了,只对下面的代码做一下说明:
r
r 2, 0
我们首先要把代码移动到第一条记录,让后向下移动,从当前记录即第一个记录开始移动,每次移动两个记录,然后显示记录的内容。
下面我们测试一下,先看看整个的记录集:
那么经过记录的移动后,应该为绿色框的数据,是不是呢?我们看看本程序的运行结果:
结果显示和我们当初的预想是一致的。
2 在Recordset对象中定位游标位置的其他办法
1) 使用Recordset 对象的AbsolutePosition 属性。
AbsolutePosition属性可以设置或返回游标当前的记录位置。下面代码将游标当前位置保存在变量myc中,然后设置为第10条记录:
myc = r
r = 10
2) 使用Recordset 对象的Bookmark属性。
Bookmark属性可以设置或返回游标当前当前记录的书签。Recordset 对象的每一条记录都有唯一的“书签”值。下面代码先将游标当前位置设置为第10条记录,然后将当前记录的书签保存到变量myc中,然后移动到下一条记录(实际使用时一般是进行其它的处理操作),最后在通过设置Bookmark属性将记录定位到原来的第10条记录。
r = 10
myc = r
r
r =myc
与使用AbsolutePosition 属性的区别是,使用Bookmark属性时,往往不知道或不关心记录所处的实际位置。
后两种方法的实例就不再演示了,以后如果有用到的再说明。
今日内容回向:
1 Recordset对象的定位都有哪些方法?本讲重点讲了什么方法?
2 如何理解record的参数NumRecords, Start呢?
本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解
第1套教程(共三册):《VBA代码解决方案》:是入门后的提高教程
第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)
第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解
第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解
第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用
第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解
第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用
上述教程的学习顺序:
① 7→1→3→2→6→5或者7→4→3→2→6→5。
② 7→8