用ADO SQL查詢Excel表只能取到65535行資料
阿新 • • 發佈:2018-12-03
作者: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、指定工作表查詢區域。