为啥这个记录计数返回 1?

Posted

技术标签:

【中文标题】为啥这个记录计数返回 1?【英文标题】:Why is this record count returning 1?为什么这个记录计数返回 1? 【发布时间】:2013-03-10 11:48:16 【问题描述】:

在我的 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 语句或表返回的所有记录吗?我在这里做错了什么?

谢谢

【问题讨论】:

您是否有可能查询两个不同的数据库? 【参考方案1】:

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

【讨论】:

【参考方案2】:

对于记录计数属性,您需要将光标类型设置为

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

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

【讨论】:

【参考方案3】:

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

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

注意

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

【讨论】:

以上是关于为啥这个记录计数返回 1?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用“.count”返回 Swift 下标计数时收到不正确的数组计数?

为啥 JVM Monitor 显示错误的调用计数?

为啥我的 SQL 数据集总是返回 0 计数?

为啥 SQL 计数(*)与 SQL 计数(数字)存在行为差异

为啥 python 在数据框中计算时返回科学计数法?

为啥这个计数查询这么慢?