作者:iamlaosong
同事在用ADO连接Excel用SQL查询工作表的时候,发现只能查询65535行数据,超过这个行数的数据就取不到了,其SQL语句如下:
select [单位] from [汇总$E:E]
开始以为是连接串的驱动不对,因为不同03和07版驱动是不一样的,但连接串没有问题,下面代码可测试数据只能取65535行:
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=YES';Data Source="
strConn = strConn & ThisWorkbook.FullName
Conn.Open strConn '打开数据库链接
strSQL = "select distinct [单位] from [汇总$E:E]"
Set Rst = Conn.Execute(strSQL) '执行查询,并将结果输出到记录集对象
k = 0
Do While Not Rst.EOF()
Debug.Print Rst(0) & k
Rst.movenext
k = k + 1
If k >= 65535 Then
Debug.Print Rst(0)
End If
Loop
造成这种问题原因原来是BUG,Excel2007或2010ADO自连接有一个BUG,指定区域行数不能大于65536,否则会出错,如果仅指定起始行,则默认65536行
解决方法:
1、不用自连接,数据源放在其他工作簿中
或
2、不指定区域,即标题行在第一行。
将SQL语句改成如下,问题解决:
select [单位] from [汇总$]
就本例来说,其实也不用指定查询区域,因为工作表第一行已经包含了字段名。
最后再强调一下产生这个问题的条件:1、自连接,且 2、指定工作表查询区域。