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

论坛 期权论坛 期权     
VBA语言专家   2019-6-16 04:19   3854   0
点蓝字关注,回复“VBA”获取专业资料

《VBA代码解决方案》系列书作者
头条百家平台 VBA资深创作者
_______________________________

大家好,今天给继续讲解VBA数据库解决方案的第17讲:Recordset对象记录位置的定位方法。在上一讲中我们讲了MoveFirs,MoveLast,MoveNext,MovePrevious的精准定位方法,对于数据库的操作,大段的代码是很常见的,要记得我以前的建议,不要手工去录入,要利用资料去修正代码,今日我们讲解记录定位的其他常见的方法。
一 Move 方法:移动Recordset 对象中当前记录的位置。
语法:
recordset.MoveNumRecords, Start
参数:
a:  NumRecords   长整型,指定当前记录位置移动的记录数。
b:  Start   可选,字符串或变体型,指定从哪儿开始移动。也可为下值之一:
AdBookmarkCurrent(0) 默认。从当前记录开始。
AdBookmarkFirst(1) 从首记录开始。
AdBookmarkLast(2) 从尾记录开始。
实例讲解:我们还是用上一讲的数据,我们要从首行开始移动,移动的是2个记录,我们看看这个时候标签指向的是哪个记录:
代码截图:


代码:
Sub mynzRSJLJF_1() '测试数据
  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 = 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
   For i = 0 To rsADO.Fields.Count - 1
       Sheets("Sheet1").Cells(1, i + 1) = rsADO.Fields(i).Name
   Next i
   rsADO.MoveFirst
   rsADO.Move 2, 0   
   Sheets("Sheet1").Rows("2:2").Select
   Selection.ClearContents
   For j = 0 To rsADO.Fields.Count - 1
     Sheets("Sheet1").Cells(2, j + 1) = rsADO.Fields(j)
   Next j
   rsADO.Close
   cnADO.Close
   Set rsADO = Nothing
   Set cnADO = Nothing
End Sub
代码解读:
对于其他的地方,我在上一讲已经非常详细的讲过了,只对下面的代码做一下说明:
rsADO.MoveFirst
rsADO.Move 2, 0
我们首先要把代码移动到第一条记录,让后向下移动,从当前记录即第一个记录开始移动,每次移动两个记录,然后显示记录的内容,下面我们测试一下。
先看看整个的记录集:


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


结果显示和我们当初的预想是一致的。
二 在Recordset对象中定位游标位置,除了上面的Move方法外,常用的还有:
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呢?

_____________________________

觉得有启发,点个“在看”,转给朋友们
欢迎你“留言”,和作者直接交流

更多关联阅读








  





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:200
帖子:40
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP