ODBC 对象连接问题 - 打开限制为 65k 行
Issue with ODBC Object connection - Open limitation to 65k rows
编程新手,SQL 和 VBA。我经常处理体面大小的数据 tables,并认为添加 SQL 查询执行功能以应用于现有的 excel table 会很有帮助。研究使我找到了 ADODB 连接,并找到了一个很好的基本代码段:https://blog.learningtree.com/excel-as-a-database-how-to-query-economic-data-with-sql/
我似乎 运行 限制了在下一行代码 运行 之前可以访问多少行。在我的 SQL 语句源中,我可以 return 65k 行,在定义源 table 大小时,我得到一个 Object does not exist 错误。您可以 运行 ADODB recordset.Open
异步确保对象的完整 return 吗? - 非常感谢任何帮助。
谢谢!
试图插入 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'"
Run-time error '-2147217865 (80040e37)': The Microsoft Access database
engine could not find the object 'Sheet1$A1:AI65437'.
我认为这是因为您正在通过这部分连接字符串调用旧版本库:
Provider=Microsoft.ACE.OLEDB.12.0
你应该试试
Provider=Microsoft.ACE.OLEDB.16.0
更新:答案在这里 Excel as database - query more than 65536 rows? 很有趣。您不能提及行,否则会出错。
编程新手,SQL 和 VBA。我经常处理体面大小的数据 tables,并认为添加 SQL 查询执行功能以应用于现有的 excel table 会很有帮助。研究使我找到了 ADODB 连接,并找到了一个很好的基本代码段:https://blog.learningtree.com/excel-as-a-database-how-to-query-economic-data-with-sql/
我似乎 运行 限制了在下一行代码 运行 之前可以访问多少行。在我的 SQL 语句源中,我可以 return 65k 行,在定义源 table 大小时,我得到一个 Object does not exist 错误。您可以 运行 ADODB recordset.Open
异步确保对象的完整 return 吗? - 非常感谢任何帮助。
谢谢!
试图插入 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'"
Run-time error '-2147217865 (80040e37)': The Microsoft Access database engine could not find the object 'Sheet1$A1:AI65437'.
我认为这是因为您正在通过这部分连接字符串调用旧版本库:
Provider=Microsoft.ACE.OLEDB.12.0
你应该试试
Provider=Microsoft.ACE.OLEDB.16.0
更新:答案在这里 Excel as database - query more than 65536 rows? 很有趣。您不能提及行,否则会出错。