1. 程式人生 > >用ADO SQL查詢Excel表只能取到65535行資料

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