编程,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”。
答案 0 :(得分:1)
我认为这是因为您正在通过连接字符串的这一部分来调用旧版本库:
Provider=Microsoft.ACE.OLEDB.12.0
您应该尝试
Provider=Microsoft.ACE.OLEDB.16.0
更新:这里的答案Excel as database - query more than 65536 rows?很有趣。您不能提及行,否则会出错。