ADODB 记录集 recordcount 始终返回 -1

vba

1个回答

写回答

wangchenye

2025-07-10 06:13

+ 关注

移动
移动

使用ADODB记录集时,我们经常会使用RecordCount属性来获取记录集中的记录数量。然而,有时候我们会遇到一个问题,无论记录集中有多少条记录,RecordCount始终返回-1。这个问题困扰着很多开发人员,本文将探讨这个问题的原因,并提供解决方案。

首先,让我们来看一下为什么RecordCount会返回-1。ADODB记录集是一种基于游标的数据结构,它允许我们在记录集中移动光标,并访问当前记录的数据。当我们打开记录集时,光标通常位于第一条记录之前,此时RecordCount返回-1。只有在光标移动到第一条记录之后,RecordCount才能返回正确的记录数量。

那么,如何将光标移动到第一条记录之后呢?我们可以使用MoveNext方法来实现。MoveNext方法将光标移动到下一条记录,如果成功移动,则返回True;如果已经到达最后一条记录,返回False。通过在循环中使用MoveNext方法,我们可以将光标移动到最后一条记录,并计算出记录集的记录数量。

下面是一个简单的示例代码,演示了如何使用MoveNext方法来获取记录集的记录数量:

VBA

Dim conn As New ADODB.Connection

Dim rs As New ADODB.Recordset

' 连接数据库

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\myDatabase.mdb"

' 执行查询语句

rs.Open "SELECT * FROM Customers", conn

' 将光标移动到第一条记录之后

rs.MoveFirst

' 计算记录数量

Dim count As Integer

count = 0

Do While Not rs.EOF

count = count + 1

rs.MoveNext

Loop

' 输出记录数量

MsgBox "记录数量为:" & count

' 关闭记录集和数据库连接

rs.Close

conn.Close

在上面的代码中,我们首先创建了一个ADODB连接对象和一个记录集对象。然后,我们使用Open方法打开数据库连接,并执行查询语句,将结果保存在记录集中。

接下来,我们使用MoveFirst方法将光标移动到第一条记录之后。然后,我们使用一个循环来遍历记录集,每次循环中,我们将记录数量加一,并使用MoveNext方法将光标移动到下一条记录。当循环结束时,我们可以得到记录集的记录数量。

最后,我们使用MsgBox函数输出记录数量,并使用Close方法关闭记录集和数据库连接。

解决ADODB记录集RecordCount返回-1的问题

虽然上面的示例代码可以解决RecordCount返回-1的问题,但是它需要遍历整个记录集,当记录数量较大时,可能会影响性能。因此,我们可以使用另一种方法来解决这个问题。

我们可以使用GetRows方法将记录集保存在一个二维数组中,并使用UBound函数获取数组的上界,从而得到记录数量。GetRows方法将记录集保存在一个二维数组中,其中第一维表示字段,第二维表示记录。通过获取数组的第二维的上界,我们可以得到记录数量。

下面是使用GetRows方法获取记录集记录数量的示例代码:

VBA

Dim conn As New ADODB.Connection

Dim rs As New ADODB.Recordset

' 连接数据库

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\myDatabase.mdb"

' 执行查询语句

rs.Open "SELECT * FROM Customers", conn

' 将记录集保存在数组中

Dim data As Variant

data = rs.GetRows

' 获取记录数量

Dim count As Integer

count = UBound(data, 2) + 1

' 输出记录数量

MsgBox "记录数量为:" & count

' 关闭记录集和数据库连接

rs.Close

conn.Close

在上面的代码中,我们首先创建了一个ADODB连接对象和一个记录集对象。然后,我们使用Open方法打开数据库连接,并执行查询语句,将结果保存在记录集中。

接下来,我们使用GetRows方法将记录集保存在一个二维数组中。然后,我们使用UBound函数获取数组的第二维的上界,从而得到记录数量。

最后,我们使用MsgBox函数输出记录数量,并使用Close方法关闭记录集和数据库连接。

通过使用GetRows方法,我们可以更高效地获取记录集的记录数量,而不需要遍历整个记录集。这样可以提高代码的性能,并减少对数据库的访问次数。

在使用ADODB记录集时,RecordCount属性始终返回-1的问题是一个常见的困扰开发人员的问题。本文介绍了两种解决这个问题的方法:使用MoveNext方法和使用GetRows方法。MoveNext方法需要遍历整个记录集,可能影响性能,而GetRows方法可以更高效地获取记录数量。根据实际情况选择合适的方法,可以提高代码的性能,并解决RecordCount返回-1的问题。

希望本文对您理解和解决ADODB记录集RecordCount返回-1的问题有所帮助!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号