手机建站永久免费软件,私人接vi设计一套大概多少钱,做战袍网站,诚信快捷小企业网站建设《VBA数据库解决方案》教程#xff08;版权10090845#xff09;是我推出的第二套教程#xff0c;目前已经是第二版修订了。这套教程定位于中级#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法… 《VBA数据库解决方案》教程版权10090845是我推出的第二套教程目前已经是第二版修订了。这套教程定位于中级是学完字典后的另一个专题讲解。数据库是数据处理的利器教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册八十四讲今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是VBA数据库解决方案第十五讲Recordset集合中的单个数据的精确处理
【分享成果随喜正能量】 你有你的立场我有我的底气。各自修行各自好各自因果各自了。成年人最大的清醒就是管好自己不渡他人。
第十五讲 Recordset集合中的单个数据的精确处理
大家好今天给继续讲解VBA数据库解决方案的第15讲Recordset集合的单个数据精确处理在前几讲中我们讲了Table对象的添加和删除。今天我们要讲的内容是Recordset集合的处理方案这个处理和Table的处理是关系紧密的在第10讲中我们讲了利用下面的语句实现Recordset集合内容的可视化导出Range(A2).CopyFromRecordset rsADO那么是否还有其他的办法能精确的控制导出的内容呢
比如我只需要其中几个字段的记录该如何处理呢这时我们需要对Recordset集合的详细的数据处理了也就是说要通过循环语句把每一个数据都要遍历到。
1 记录集的MoveFirsMoveLastMoveNextMovePrevious方法
MoveFirst方法
作用是将记录指针移动到记录集中的第一条记录。它以第一条记录作为当前记录。
当记录集为空时请求MoveFirst或MoveLast将产生一个错误。MoveLast方法
作用是将记录指针移动到记录集中的最后一条记录。它以最后一条记录作为当前记录。
当记录集为空时请求MoveFirst或MoveLast将产生一个错误。如果记录集对象不支持书签或不能向后移动指针那么将产生错误。MoveNext方法
作用是将记录指针移动到记录集中的下一条记录。它以下一条记录作为当前记录。
当当前记录指针位于最后一条记录时如果你请求这个方法将产生错误。MovePrevious 方法
作用是将记录指针移动到记录集中的上一条记录。它以上一条记录作为当前记录。
如果记录集对象不支持书签或不能向后移动指针那么将产生错误。.当当前记录为记录集中第一条记录时如果你请求该方法那么它将产生一个错误。
由此我们还要判断记录集是否为首位还要判断这时是通过般需要通过Recordset对象的EOF属性先进行判断游标是否到了记录尾。当游标到了记录尾时EOF属性会被设置为True。
同理可以通过Recordset对象的BOF属性先进行判断游标是否到了记录首。当游标到了记录首时BOF属性会被设置为True。
2 精准控制记录集的导出
如下面的数据库的数据我们要导出部门为“一厂”的职工目录该如何做到呢
代码如下
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 ProviderMicrosoft.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
代码截图 代码解析
1Set cnADO CreateObject(ADODB.Connection) Set rsADO CreateObject(ADODB.RecordSet) strPath ThisWorkbook.Path \mydata2.accdb
cnADO.Open ProviderMicrosoft.ACE.OLEDB.12.0;Data Source strPath
上述代码先建立ADO 和RS 对象并打开
2strSQL SELECT * FROM 员工信息 WHERE 部门一厂
rsADO.Open strSQL, cnADO, 1, 3
上述语句建立一个SQL语句并打开
3For 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 移动记录。
5rsADO.Close cnADO.Close Set rsADO Nothing Set cnADO Nothing
关闭连接释放内存。
看下面的输出结果 通过记录集的精准控制可以完成具体到每个数据的判断应用是非常灵活的
今日内容回向
1 MoveFirsMoveLastMoveNextMovePrevious 方法的意义是否理解呢
2 如何实现记录的精确控制
本讲内容参考程序文件VBA与数据库操作第一册.xlsm 我20多年的VBA实践经验全部浓缩在下面的各个教程中