返回列表 上一主題 發帖

[發問] ADO Select問題

[發問] ADO Select問題

大家好,小弟最近在接觸VBA內使用ADO來取得資料。

這邊有個疑問,在我的標題欄為日期,取得會有問題...

資料來源:
01.jpg
2019-11-4 22:59


寫法如下:
  1. Sub ado_test()

  2. Dim cnn As Object, rst As Object
  3. Dim Mypath As String, Str_cnn As String
  4. Dim sql As String, i As Long

  5. Set cnn = CreateObject("adodb.connection")
  6. Mypath = ThisWorkbook.FullName

  7. If Application.Version < 12 Then
  8.     Str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath
  9. Else
  10.     Str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Mypath
  11. End If

  12. cnn.Open Str_cnn

  13. '---------------------------------'
  14. sql = "select 項次,機台名稱,2019/1/1 from [工作表2$] where 機台名稱='A01'"

  15. Set rst = cnn.Execute(sql)

  16. Range("A1").CurrentRegion.ClearContents

  17. For i = 0 To rst.Fields.Count - 1
  18.     Cells(1, i + 1) = rst.Fields(i).Name
  19. Next i

  20. [A2].CopyFromRecordset rst


  21. cnn.Close

  22. Set cnn = Nothing
  23. Set rst = Nothing

  24. End Sub
複製代碼
執行結果:
02.jpg
2019-11-4 23:01


標題欄的日期部分,不能正確列出,且下方數值帶出錯誤。

若是使用 select * from [工作表2$] where 機台名稱='A01'

可以正確列出
,但由於我的標題欄為日期,一年日期365加上一些前置的標題約有375。

而語法中的Execute(sql),標題欄Fields.Count最多只有255。

有辦法解決嗎?

回復 1# 蒼雪
將2019/1/1前後加上[ ]試試
EX:[2019/1/1]

TOP

回復 2# jcchiang

經過嘗試,他會顯示一個錯誤訊息。

無值提供給一或多個必要參數。

異常訊息

異常訊息.png
7 天前 09:06

異常部分.png
7 天前 09:06
   

看來是增加 [ ],所造成的。

TOP

回復 3# 蒼雪

Execl欄位類別請改成文字

TOP

回復 4# jcchiang


    有,我有嘗試過將標題欄的日期修改成文字過。

    但是,只要將 [ ] 加上,他就會跳出上面所顯示的錯誤訊息。

TOP

回復 5# 蒼雪

SQL欄位名稱為日期.zip (17.49 KB)

TOP

回復 6# jcchiang


執行上是沒有問題了。

不過在增加日期部分稍不方便,由於是文字最後拖曳會變成2019/1/365 ...。

不過謝謝您的解惑,真的很謝謝。
---

另外還想請教,若是資料field從2019/1/1 ~ 2019/12/31。

資料再找到8月底之後的資料都load不出,這有辦法解決嗎?

TOP

回復  jcchiang


執行上是沒有問題了。

不過在增加日期部分稍不方便,由於是文字最後拖曳會變成201 ...
蒼雪 發表於 2019-12-3 21:37


我用公式解決日期拖曳問題了...

利用 =text(D1,"yyyy/m/d") 即可以解決,需要第二部分的解答...

TOP

回復 7# 蒼雪
這就是你所說的問題
而語法中的Execute(sql),標題欄Fields.Count最多只有255。

不然就是用公式去搜尋所需資料
=HLOOKUP("2019/12/10",工作表2!C:NC,MATCH("A02",工作表2!B:B),FALSE)

=HLOOKUP("查詢日期",要查日期的範圍位置,MATCH("機台名稱",要查機台名稱的範圍位置),FALSE)

TOP

本帖最後由 蒼雪 於 2019-12-4 20:21 編輯

回復 9# jcchiang


在同一份workbook內可以用公式。

因為長期使用的情況下,資料量會很龐大。

而公式判斷式下多了之後,雖然取得的資料表面上不到10個字元。

可是其實公式占很多,常常到後面檔案就很肥大。

其實,主要的是...

我想在另外一份workbook執行ADO,透過ADO不開啟檔案來取得資料。

這樣檔案也就不至於太大...

TOP

        靜思自在 : 天上最美是星星,人生最美是溫情。
返回列表 上一主題