標題:
[發問]
VBA 的SQL語法請教各位懂SQL的大大
[打印本頁]
作者:
PKKO
時間:
2016-2-28 14:32
標題:
VBA 的SQL語法請教各位懂SQL的大大
一、當取得SQL的資料後(已經得到資料),用哪一種語法,能夠最快速的將資料輸出至excel
EX:rng陣列輸入的方式,因該是:range("a1").resize(ubound(rng),ubound(rng,2)).value=rng
可是SQL取得資料後無法使用此語法,不曉得高手大大們都是用哪一種語法
小弟只懂得下列2種語法,請問有更快速的輸出語法嗎?或是從哪邊可以得知相關的說明網站
conn為ADODB.Connection
1
ActiveSheet.Range("a1").CopyFromRecordset conn.Execute(strSQL)
2
Rng = conn.Execute(strSQL).GetRows '轉為陣列(相反的)
Range("a1").Resize(UBound(Rng, 2) + 1, UBound(Rng) + 1).Value = Application.Transpose(Rng)
二、當取得SQL的資料後(已經得到資料),用哪一種語法,能夠最快速的將資料轉換為陣列
小弟只會用getrows的方法轉換為陣列(但還需要轉置,才是正常的順序)
或是不用轉換為陣列,要如何讀取出此值(在不輸出至excel儲存格上的情況之下,因為輸出之後再讀取實在太慢而且不便)
作者:
joey0415
時間:
2016-2-29 00:04
回復
1#
PKKO
http://forum.twbts.com/viewthread.php?tid=12095
關鍵字 CopyFromRecordset
會快一點
作者:
PKKO
時間:
2016-2-29 01:51
回復
2#
joey0415
感謝大大,您建議的方式也是我目前正在使用的方式
另外您轉po的文章,也有幫助
下方code,我並不曉得可以用這種方式,讀取資料
Set rs = conn.Execute(strSQL)
[E1] = rs.Fields(0)
但此方式只能讀取Fields欄位
無法將整個查詢的結果都讀取
小弟只研究出GetRows的方式可以轉為陣列
不過還要轉置,因此會多花一些時間
不曉得大大有別的方法嗎?
作者:
joey0415
時間:
2016-2-29 10:03
回復
3#
PKKO
我自己以前這樣寫,你參考看看
sub ex
Set cnn = CreateObject("adodb.connection")
cnn.Open ("Driver={SQLite3 ODBC Driver};database=" & ThisWorkbook.Path & "\CB.sqlite")'自行修改drive
Set rss = cnn.Execute("select * from XXX")
For i = 0 To rss.Fields.Count - 1 '取標題,如果不要可省略
Cells(1, i + 1) = rss.Fields(i).Name
Next
Worksheets("X").Cells(2, 1).CopyFromRecordset (rss) 'cells(2,1)第一行有標題
cnn.Close
Set cnn = Nothing
Set rss = Nothing
end sub
複製代碼
作者:
PKKO
時間:
2016-2-29 18:48
回復
4#
joey0415
感謝大大
作者:
singo1232001
時間:
2022-12-22 18:08
本帖最後由 singo1232001 於 2022-12-22 18:20 編輯
回復
5#
PKKO
先感謝 joey0415 跟 PKKO 大大
今天我也撞到這個問題了
想請大師支援一下
目前觀察到的狀況如下
[attach]35645[/attach]
正常的 二維陣列 可以使用Transpose方式轉置 轉90度
但這個陣列不是一般類型的
當從sql語法取的資料,用了Getrows後獲得陣列後
他陣列裡面 每個"格" 都有自帶屬性 (上圖正常陣列 都是string , 從sql出來的 有null date string int variant各種資料屬性)
這就好玩了
想轉陣列 不給轉 或許是屬性卡住
目前好像也只能土炮的 寫個方法旋轉而已
問1.有超簡單專門應對的方法嗎?
問2.若真沒有,通常建議用甚麼寫法來處理?
A:一個一個轉?
B:用join +split轉?
C:其他?
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)