【问题标题】:Recordcount returns value of -1Recordcount 返回值为 -1
【发布时间】:2016-02-12 23:25:30
【问题描述】:

我有以下代码可以正确检索数据,但始终为 rs.RecordCount 返回值 -1。请帮忙。

    Sub TEST()

        Dim rs As Object
        Set rs = CreateObject("ADODB.Recordset")

        Dim SQLSTR As String, MYVAL As String
        MYVAL = InputBox("Enter Query")
        SQLSTR = " " & MYVAL & ""
        CONNECT_TO_DWHS
        rs.Open SQLSTR, PERSONALDBCONT

        ActiveSheet.Cells(2, 1).CopyFromRecordset rs
        ActiveSheet.Cells(1, 1).Select

            Debug.Print rs.RecordCount

        CLOSE_CONNECTION_TO_SQL


    End Sub

【问题讨论】:

  • 在调用 rs.RecordCount 之前尝试 rs.MoveLast
  • 嗨@cboden,我收到“行集不支持向后获取”错误
  • 然后在调用 rs.open 方法时使用 adOpenStatic (3) 或 adOpenKeyset (1) 作为第三个参数。如果您在项目中设置了对 ADODB 的引用,那么您可以使用命名值...如果不是简单地使用括号中的数值或为其定义一个常量。

标签: sql excel record-count vba


【解决方案1】:

rs.CursorType = 3 似乎可以工作

【讨论】:

  • 嗨 Krishn,您应该将您的答案标记为已接受(在投票柜台下方查看)以明确表示该问题已得到答案。如果我的回答不是解决方案,但在某些方面有帮助/有用,那么投票支持它会非常好。在 SO 上给出答案的专业人士渴望获得声誉积分。 :-)
【解决方案2】:

ADO 记录集将永远显示这一点,直到它们第一次跳到末尾。所以只需使用 rs.Movelast,然后使用 rs.MoveFirst。

现在应该没问题了……

希望对你有帮助

【讨论】:

  • 嗨,当我使用 rs.Movelast 时,我收到“行集不支持向后获取”错误
  • 您确定有数据吗?检查 rs.EOF 和 rs.BOF。如果两者都为 TRUE,则记录集为空...
  • 您好,肯定有数据。我熟悉 rs.EOF 和 rs.BOF 但是我想确定总数而不是它是否为空。因此,在将来的情况下,我可以在计数 >= 1048576 时结束代码
  • @Krishn 您可以 - 只是为了看看会发生什么 - 使用 .MoveNext 作为唯一语句执行 while not .EOF 循环。我用 Recordsets 做了很多事情,而且在检索它们的行数时从来没有遇到过问题——如果有行的话……这就是我问的原因……
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多