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

谢谢

【问题讨论】:

  • 您是否有可能查询两个不同的数据库?

标签: ms-access vba


【解决方案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 属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        相关资源
        最近更新 更多