用ADO SQL查询Excel表只能取到65535行数据

作者: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、指定工作表查询区域。

 

你可能感兴趣的:(VBA_Excel,Excel应用)