ODBC对象连接问题-对65k行的开放限制

时间:2019-05-03 18:03:07

标签: sql excel vba adodb

编程,SQL和VBA的新手。我经常使用体面大小的数据表,并认为添加SQL查询执行功能以应用于现有excel表会有所帮助。研究使我了解到ADODB的连接,并找到了一个很棒的基本代码片段:https://blog.learningtree.com/excel-as-a-database-how-to-query-economic-data-with-sql/

尽管在下一行代码运行之前可以访问多少行,但我似乎遇到了限制。在我的SQL语句源中,在定义源表大小时,我可以返回65k行,并且得到“对象不存在”错误。您是否可以异步运行ADODB recordset.Open以确保对象完全返回? -任何帮助将不胜感激。 谢谢!

试图插入一个WAIT内联: rs.Open strSQL, Application.Wait (Now + TimeValue("0:00:30")), cn 但仍然出错。参见下面的代码

Sub ExcelTbl_SQL()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset

    strFile = ThisWorkbook.FullName
    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
                & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    cn.Open strCon

    strSQL = "SELECT * FROM [Sheet1$A1:AI146103] WHERE GROUP = 'HIX'"

    rs.Open strSQL, cn

    Dim ws As Worksheet

    Set ws = Application.Sheets.Add    
    ws.Range("A1").CopyFromRecordset rs

    rs.Close    
    cn.Close
    'Debug.Print rs.GetString    
End Sub

这些是我得到的结果:

  • 作品:strSQL = "SELECT * FROM [Sheet1$A1:AI65000] WHERE GROUP = 'HIX'"

  • 错误:strSQL = "SELECT * FROM [Sheet1$A1:AI65437] WHERE GROUP = 'HIX'"

  

运行时错误'-2147217865(80040e37)':Microsoft Access数据库   引擎找不到对象“ Sheet1 $ A1:AI65437”。

1 个答案:

答案 0 :(得分:1)

我认为这是因为您正在通过连接字符串的这一部分来调用旧版本库:

Provider=Microsoft.ACE.OLEDB.12.0

您应该尝试

Provider=Microsoft.ACE.OLEDB.16.0

更新:这里的答案Excel as database - query more than 65536 rows?很有趣。您不能提及行,否则会出错。