sql - 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
这些是我得到的结果:
作品:
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”。
解决方案
我认为这是因为您通过这部分连接字符串调用旧版本库:
Provider=Microsoft.ACE.OLEDB.12.0
你应该试试
Provider=Microsoft.ACE.OLEDB.16.0
更新:答案是Excel 作为数据库 - 查询超过 65536 行?有趣的。不能提及行,否则会出错。
推荐阅读
- python - 如何根据 2 个数组的条件创建一个新数组?
- ms-access - 在 Access 表字段中使用 VBA 变量
- javascript - Highcharts:如何为条形图指定对数刻度
- python - 如何修复尝试在 Python 中查找用户文件的错误?
- java - 错误:在 Java 上找不到符号;如何声明数组
- ios - 启动屏幕图像未显示在设备上的我的 ios 应用程序上
- java - 如何在一行上打印数组值,而不是按顺序打印
- java - 有没有更好/更短的方法来写“如果字符串是单个数字”?
- javascript - 如何清除 h1 标签的 innerHTML
- r - 生存分析以获得辍学率