Board logo

標題: [發問] 請問如何將SQL資料表中某一欄資料複製到EXCEL呢? [打印本頁]

作者: algoji3ji3    時間: 2018-10-30 19:55     標題: 請問如何將SQL資料表中某一欄資料複製到EXCEL呢?

本帖最後由 algoji3ji3 於 2018-10-30 19:57 編輯

各位大大請問CopyFromRecordset rs會將整個資料表輸出到EXCEL上,但是如果我只要其中一整欄資料該怎麼改呢?
  1. Private Sub CommandButton2_Click()

  2. '定義部份
  3. Dim cn As ADODB.Connection 'Excel連接
  4. Dim rs As ADODB.Recordset '得來的結果,會放到立這個rs的地方.
  5. Dim strDataSrcXlsPath As String '數據庫EXCEL位置
  6. Dim strQuery As String '用作拿數據的SQL
  7. Dim strStartlocation As String '定義得來數據,放到那一個位置.

  8. 'I) 以下建立數據庫連接
  9. strDataSrcXlsPath = ThisWorkbook.Path & "\資料.xlsx" '定立數據庫EXCEL位置

  10. Set cn = New ADODB.Connection

  11. With cn
  12. '確定連接所用的Library
  13. .Provider = "Microsoft.ACE.OLEDB.12.0"
  14. .CursorLocation = adUseClient
  15. '把連接指向指定Excel
  16. 'xtended properties為excel的版本, 通常為12 或 8,
  17. '12為2007Excel檔(如XLSX,XLSM). 8可相容1997-2003等excel(XLS)
  18. .ConnectionString = "Data Source=" & strDataSrcXlsPath & _
  19. ";Extended Properties=Excel 12.0;"
  20. '開始連接,這個時候ACE會打開excel
  21. .Open
  22. End With

  23. 'II) 以下運行SQL和回傳數據
  24. '拿出一行資料,所用SQL架構大約為
  25. 'SELECT ... FROM ... WHERE
  26. '
  27. 'SELECT 上的 * 用作指明拿出所有表上的欄位
  28. 'TOP 50 是指抽出頭50列數據
  29. '
  30. 'FROM 從DATASHEET工作表抽出
  31. 'strQuery = "SELECT top 10 * FROM [總表$]"
  32. strQuery = "SELECT 站別分析,類別,月份,日期,SUM(產出數) AS 總數 " & _
  33.            "FROM [總表$] " & _
  34.            "where 日期 between #2018/9/1# and #2018/9/30# " & _
  35.            "GROUP BY 站別分析,類別,月份,日期 HAVING 類別='305AS'" & _
  36.            "ORDER BY 站別分析,日期"
  37.       
  38. 'strQuery = "SELECT 日期 " & _
  39.            "FROM [總表$] " & _
  40.            "where 日期 between #2018/9/1# and #2018/9/30# " 'HAVING 類別='305AS'"

  41. Set rs = cn.Execute(strQuery) '執行SQL

  42. 'III) 把數據抄至所需的位置
  43. strStartlocation = "A1"

  44. 'III-1 把欄位名稱一個一地拿出
  45. 'rs.Fields.Count : 欄位數數
  46. 'rs.Fields(n).Name : 欄名
  47. Dim lngColCounter As Long
  48. i = -1
  49. For lngColCounter = 0 To rs.Fields.Count - 1
  50.     Range(strStartlocation).Offset(0, lngColCounter) = rs.Fields(lngColCounter).Name
  51. Next lngColCounter
  52. 'III-2 把數據庫資料列表拿出

  53. ActiveSheet.Range(strStartlocation).Offset(1, 0).CopyFromRecordset rs

  54. 'IV) 關掉/清理連接
  55. cn.Close
  56. Set cn = Nothing
  57. Set rs = Nothing

  58. End Sub
複製代碼
[attach]29604[/attach]
作者: milk30320    時間: 2018-10-31 09:01

回復 1# algoji3ji3
可以在資料庫語法那邊select你要的特定欄位,在全部丟到excel上面!
作者: algoji3ji3    時間: 2018-11-1 19:49

大大我換個問法~

下面這段指令事將整個數據庫放在"A1"的位置
ActiveSheet.Range(strStartlocation).Offset(1, 0).CopyFromRecordset rs

那如果我要分別將數據庫中的各"整欄"分別抽出放到各別指定位置呢?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)