8

在我的 MS Access DB 中,我在 VB 中运行一个查询,它应该返回两条记录。当我在 SQL 中运行它时,我得到两条记录,但从 VBA 运行时,我得到两条。这是获取两条记录的 SQL 视图中的代码:

SELECT *
FROM tblWebMeetingData
WHERE [Last Name] LIKE 'Marx';

当我像这样在 VBA 中调用它时:

SQL = "SELECT * FROM tblWebMeetingData WHERE [Last Name] LIKE 'Marx';"
Set rst = CurrentDb.OpenRecordset(SQL)  
MsgBox ("Number of records: " & rst.RecordCount)

我得到一条记录的记录数。记录计数不应该计算从 SQL 语句或表返回的所有记录吗?我在这里做错了什么?

谢谢

4

3 回答 3

25

除了最简单的查询(性能优化)之外,DAO 不会一次检索整个结果集。rst.MoveLast在打开记录集之后和检索之前强制使用完整的检索和有效 的记录计数rst.RecordCOunt

于 2013-03-10T12:05:14.760 回答
1

对于 recordcount 属性,您需要将游标类型设置为

RS.Open SQL、MyConn、adOpenStatic、adLockReadOnly、adCmdText

如果它无法执行,那么您需要使用 ADOVBS.INC 作为页面顶部的包含文件,您可以从 Internet 下载并使用它

于 2018-08-26T08:57:30.733 回答
0

以上答案都很好。微软关于 RecordCount 的文档有这样的:

使用 RecordCount 属性可以查明 Recordset 或 TableDef 对象中有多少条记录已被访问。在访问所有记录之前,RecordCount 属性不会指示动态集、快照或仅转发类型的 Recordset 对象中包含多少记录。访问最后一条记录后,RecordCount 属性指示 Recordset 或 TableDef 对象中未删除记录的总数。要强制访问最后一条记录,请在 Recordset 对象上使用 MoveLast 方法。您还可以使用 SQL Count 函数来确定查询将返回的大致记录数。

笔记

使用 MoveLast 方法填充新打开的 Recordset 会对性能产生负面影响。除非在打开 Recordset 后必须立即获得准确的 RecordCount,否则最好等到使用其他代码部分填充 Recordset 后再检查 RecordCount 属性。

于 2022-01-08T18:22:36.870 回答