从 DAO Recordset 的记录中提取数据
时 间:2022-12-31 08:07:47
作 者:杨雪 ID:42182 城市:南京
摘 要:从 DAO Recordset 的记录中提取数据
正 文:
本文内容
复制单个字段
将整个记录复制到数组
找到特定记录之后,您可能希望提取数据,以便在不修改基础源表的情况下在应用程序中使用。
复制单个字段
可以将单个字段的记录复制到适当数据类型的变量。 下面的示例从 Recordset 对象的第一条记录中提取三个字段。
Dim dbsNorthwind As DAO.Database Dim rstEmployees As DAO.Recordset Dim strFirstName As String Dim strLastName As String Dim strTitle As String Set dbsNorthwind = CurrentDb Set rstEmployees = dbsNorthwind.OpenRecordset("Employees") rstEmployees.MoveFirst strFirstName = rstEmployees!FirstName strLastName = rstEmployees!LastName strTitle = rstEmployees!Title
将整个记录复制到数组
若要复制一条或多条记录,您可以创建一个二维数组,并一次复制一条记录。 您将为每个字段增加第一个下标,并为每个字段增加第二个下标。
快速执行此操作的方法是使用 GetRows 方法,该方法将返回一个二维数组。 第一个下标标识字段,第二个下标标识行号,如下所示。
varRecords(intField, intRecord)
下面的代码示例使用 SQL 语句从名为“Employees”的表中检索三个字段,放入 Recordset 对象中。 然后,它使用 GetRows 方法检索 Recordset 的前三条记录,并将所选的记录存储在一个二维数组中。 然后,它通过使用两个数组索引来选择特定字段和记录,从而输出每条记录(一次一个字段)。
为了显示数组索引的使用方式,以下示例使用一个单独的语句来标识和输出每条记录的每个字段。 在实践中,更加可靠的做法是:使用两个相互嵌套的循环,并为逐步执行数组的两个维度的索引提供整数变量。
Sub GetRowsTest() Dim dbsNorthwind As DAO.Database Dim rstEmployees As DAO.Recordset Dim varRecords As Variant Dim intNumReturned As Integer Dim intNumColumns As Integer Dim intColumn As Integer Dim intRow As Integer Dim strSQL As String On Error GoTo ErrorHandler Set dbsNorthwind = CurrentDb strSQL = "Select FirstName, LastName, Title FROM Employees" Set rstEmployees = dbsNorthwind.OpenRecordset(strSQL, dbOpenSnapshot) varRecords = rstEmployees.GetRows(3) intNumReturned = UBound(varRecords, 2) + 1 intNumColumns = UBound(varRecords, 1) + 1 For intRow = 0 To intNumReturned - 1 For intColumn = 0 To intNumColumns - 1 Debug.Print varRecords(intColumn, intRow) Next intColumn Next intRow rstEmployees.Close dbsNorthwind.Close Set rstEmployees = Nothing Set dbsNorthwind = Nothing Exit Sub ErrorHandler: MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description End Sub
如果有更多记录可用,请使用 对 GetRows 方法的 后续调用。 由于一旦调用 GetRows 方法,数组就会填满,因此您可以看到该方法为什么比一次复制一个字段要快得多。
另请注意,你不必将 Variant 声明为数组,因为当 GetRows 方法返回记录时,这会自动完成。 这样,您就可以在不知道将返回多少记录或字段的情况下使用固定长度数组维度,而不是使用占用更多内存的可变长度维度。
如果尝试使用多个 GetRows 调用检索所有行,请使用 EOF 属性,以确保位于 Recordset 的末尾。 GetRows 方法返回的行数可能比您请求的行数少。 举例来说,如果请求的行数超过 Recordset 中的剩余行数,则 GetRows 方法将只返回剩余的行。 同样,如果它无法检索所请求范围中的某行,则不会返回该行。
举例来说,如果无法检索您尝试检索的一组 10 条记录中的第五条记录,则 GetRows 方法将返回四条记录,并将当前记录位置保留在导致问题的记录上,且不会生成运行时错误。 如果另一个用户删除了动态集中的某个记录,则可能出现这种情况。 如果它返回的记录数比请求的数量少,并且您不在文件末尾,则需要阅读当前记录中的每个字段来确定 GetRows 方法遇到了什么错误。
由于 GetRows 方法始终返回 Recordset 对象中的所有字段,因此您可能想要创建一个仅返回所需字段的查询。 这对于“OLE 对象”和“备注”字段尤其重要。
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)