Board logo

標題: [發問] 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
我自己以前這樣寫,你參考看看
  1.         sub ex
  2.                
  3.                         Set cnn = CreateObject("adodb.connection")
  4.                         cnn.Open ("Driver={SQLite3 ODBC Driver};database=" & ThisWorkbook.Path & "\CB.sqlite")'自行修改drive
  5.                         Set rss = cnn.Execute("select * from XXX")
  6.                                 For i = 0 To rss.Fields.Count - 1 '取標題,如果不要可省略
  7.                                         Cells(1, i + 1) = rss.Fields(i).Name
  8.                                 Next
  9.                         Worksheets("X").Cells(2, 1).CopyFromRecordset (rss) 'cells(2,1)第一行有標題
  10.                         cnn.Close

  11.                         Set cnn = Nothing
  12.                         Set rss = Nothing
  13.                
  14.                 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/)