標題:
[發問]
ADO Select問題
[打印本頁]
作者:
蒼雪
時間:
2019-11-4 23:06
標題:
ADO Select問題
大家好,小弟最近在接觸VBA內使用ADO來取得資料。
這邊有個疑問,在我的標題欄為日期,取得會有問題...
資料來源:
[attach]31384[/attach]
寫法如下:
Sub ado_test()
Dim cnn As Object, rst As Object
Dim Mypath As String, Str_cnn As String
Dim sql As String, i As Long
Set cnn = CreateObject("adodb.connection")
Mypath = ThisWorkbook.FullName
If Application.Version < 12 Then
Str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath
Else
Str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Mypath
End If
cnn.Open Str_cnn
'---------------------------------'
sql = "select 項次,機台名稱,2019/1/1 from [工作表2$] where 機台名稱='A01'"
Set rst = cnn.Execute(sql)
Range("A1").CurrentRegion.ClearContents
For i = 0 To rst.Fields.Count - 1
Cells(1, i + 1) = rst.Fields(i).Name
Next i
[A2].CopyFromRecordset rst
cnn.Close
Set cnn = Nothing
Set rst = Nothing
End Sub
複製代碼
執行結果:
[attach]31385[/attach]
標題欄的日期部分,不能正確列出,且下方數值帶出錯誤。
若是使用 select * from [工作表2$] where 機台名稱='A01'
可以正確列出
,但由於我的標題欄為日期,一年日期365加上一些前置的標題約有375。
而語法中的Execute(sql),標題欄Fields.Count最多只有255。
有辦法解決嗎?
作者:
jcchiang
時間:
2019-11-28 10:17
回復
1#
蒼雪
將2019/1/1前後加上[ ]試試
EX:[2019/1/1]
作者:
蒼雪
時間:
2019-11-30 09:09
回復
2#
jcchiang
經過嘗試,他會顯示一個錯誤訊息。
無值提供給一或多個必要參數。
[attach]31478[/attach]
[attach]31479[/attach]
看來是增加 [ ],所造成的。
作者:
jcchiang
時間:
2019-12-2 12:13
回復
3#
蒼雪
Execl欄位類別請改成文字
作者:
蒼雪
時間:
2019-12-2 22:35
回復
4#
jcchiang
有,我有嘗試過將標題欄的日期修改成文字過。
但是,只要將 [ ] 加上,他就會跳出上面所顯示的錯誤訊息。
作者:
jcchiang
時間:
2019-12-3 12:36
回復
5#
蒼雪
[attach]31488[/attach]
作者:
蒼雪
時間:
2019-12-3 21:37
回復
6#
jcchiang
執行上是沒有問題了。
不過在增加日期部分稍不方便,由於是文字最後拖曳會變成2019/1/365 ...。
不過謝謝您的解惑,真的很謝謝。
---
另外還想請教,若是資料field從2019/1/1 ~ 2019/12/31。
資料再找到8月底之後的資料都load不出,這有辦法解決嗎?
作者:
蒼雪
時間:
2019-12-3 22:00
回復 jcchiang
執行上是沒有問題了。
不過在增加日期部分稍不方便,由於是文字最後拖曳會變成201 ...
蒼雪 發表於 2019-12-3 21:37
我用公式解決日期拖曳問題了...
利用 =text(D1,"yyyy/m/d") 即可以解決,需要第二部分的解答...
作者:
jcchiang
時間:
2019-12-4 09:04
回復
7#
蒼雪
這就是你所說的問題
而語法中的Execute(sql),標題欄Fields.Count最多只有255。
不然就是用公式去搜尋所需資料
=HLOOKUP("2019/12/10",工作表2!C:NC,MATCH("A02",工作表2!B:B),FALSE)
=HLOOKUP("查詢日期",要查日期的範圍位置,MATCH("機台名稱",要查機台名稱的範圍位置),FALSE)
作者:
蒼雪
時間:
2019-12-4 20:18
本帖最後由 蒼雪 於 2019-12-4 20:21 編輯
回復
9#
jcchiang
在同一份workbook內可以用公式。
因為長期使用的情況下,資料量會很龐大。
而公式判斷式下多了之後,雖然取得的資料表面上不到10個字元。
可是其實公式占很多,常常到後面檔案就很肥大。
其實,主要的是...
我想在另外一份workbook執行ADO,透過ADO不開啟檔案來取得資料。
這樣檔案也就不至於太大...
作者:
jcchiang
時間:
2019-12-5 08:20
回復
10#
蒼雪
1.不同的工作表還是可以用公式抓取
=HLOOKUP("2019/12/10
",[SQL欄位名稱為日期.xlsm]
工作表2!C:NC,MATCH("A01",
[SQL欄位名稱為日期.xlsm]
工作表2!$B:$B),FALSE)
紅字部份為資料來源檔案名稱
2.如果還是要使用ADO只能建議將資料Table修改成符合資料架構的格式,否則仍會遇到相同問題
作者:
蒼雪
時間:
2019-12-10 19:25
回復
11#
jcchiang
好,謝謝您。
看來,我需要將資料儲存方式改變...。
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)