【问题标题】:Incomplete Recordset from ADODB Connection来自 ADODB 连接的不完整记录集
【发布时间】:2015-04-24 07:27:15
【问题描述】:

我正在尝试从包含 80,000 多行的工作表中检索数据并将这些值打印到工作表中,但是当我创建记录集并查看其记录数时,它仅包含 16,492 条记录。

我是 ADODB 连接的新手,所以我不知道问题出在哪里。

这是我的代码:

Sub testing()
    On Error Resume Next

    Const adOpenStatic = 3
    Const adLockOptimistic = 3
    Const adCmdText = &H1

    Dim objCon As New ADODB.Connection
    Dim recSet As ADODB.Recordset

    Set objCon = CreateObject("ADODB.Connection")
    Set recSet = CreateObject("ADODB.Recordset")

    objCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\Users\nschneider\Desktop\Data Pulls_FY08 to Present_Companies 10, 20, 30, 40.xlsx;" & _
        "Extended Properties=""Excel 8.0;HDR=Yes;"";"

    recSet.Open "Select * FROM [Data$]", _
        objCon, adOpenStatic, adLockOptimistic, adCmdText

    If Not recSet.EOF Then
        Sheets(2).Range("A2").CopyFromRecordset recSet
    End If

    '    Do Until objRecordset.EOF
    '        Wscript.Echo objRecordset.Fields.Item("Name"), _
    '            objRecordset.Fields.Item("Number")
    '        objRecordset.MoveNext
    '
    '    Loop
End Sub

我已将 Loop 注释掉,因为这是我在之前的论坛中看到的。不知道这是否是我需要的。

【问题讨论】:

  • 在您使用该连接/sql 语句查询的工作表中,第 16492 行周围是否有空白记录?我想知道 Jet 是不是因为这样的事情而停下来。
  • @JNevill 不,数据中没有空格。并且该行上没有任何奇数字符不在前面的行中。
  • 在你输出你的记录集之前,试着把这段代码放在那里: IF recSet.RecordCount > 0 THEN recSet.MoveLast recSet.MoveFirst END IF
  • @MarekStejskal 感谢您的建议,但仍然得到相同的结果。我在“If Not recSet.EOF”块之前添加了这个块。
  • 过去我也遇到过这种情况。尝试关闭 Excel 和其他可能占用内存 (pc) 的应用程序并重新运行您的代码。另外,请尝试在源文件打开时运行它。还有一件事,删除代码最顶部的On Error Resume Next。我们可能在某处忽略了一些停止查询的错误?

标签: vba excel adodb excel-2013 recordset


【解决方案1】:

您正在使用 Excel 97-2003 .xls 文件的连接字符串(特别是“Excel 8.0”部分)。那时,Excel 工作表仅限于 65K 行。然后将连接字符串应用于 Excel 2007 及更高版本的 .xlsx 文件,其中每个工作表的最大行数超过 100 万。

较旧的连接字符串适用于较新的 .xlsx 文件,但当工作表上的行数超过旧的 65K 最大值时,我遇到了问题。将连接字符串更新为 .xlsx 文件的正确连接字符串,看看是否有帮助:

objCon.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=C:\Users\nschneider\Desktop\Data Pulls_FY08 to Present_Companies 10, 20, 30, 40.xlsx;" & _
        "Extended Properties=""Excel 12.0 Xml;HDR=Yes"";"

(我还删除了一个不必要的 ; 在“HDR=Yes”之后)

【讨论】:

  • 精酿啤酒箱要寄到哪里?这非常有效!谢谢你。我想了一会儿那个旧版本,但我预计会有 65k 行而不是我得到的 16k 行。但也许还有其他元素在那里发挥作用。无论如何,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
相关资源
最近更新 更多