首页 > 解决方案 > ODBC 对象连接问题 - 对 65k 行的开放限制

问题描述

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

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

试图插入 WAIT inline: 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

这些是我得到的结果:

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

标签: sqlexcelvbaadodb

解决方案


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

Provider=Microsoft.ACE.OLEDB.12.0

你应该试试

Provider=Microsoft.ACE.OLEDB.16.0

更新:答案是Excel 作为数据库 - 查询超过 65536 行?有趣的。不能提及行,否则会出错。


推荐阅读