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

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值