ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何使用VBA复制SQL server查询的结果?

如何使用VBA复制SQL server查询的结果?

作者:绿色风 分类: 时间:2022-08-17 浏览:89
楼主
wise
Q:如何使用VBA复制SQL server查询的结果?
在使用VBA关联SQL server的时候,需要把执行后的SQL语句返回值返回到Excel工作表中,应该如何编写代码呢?
注意:连接SQL server关键需要懂得其服务器、数据库、查询的表。
本例通过两种方式返回查询的结果值.
A:ALT+F11→插入模块,模块中输入以下代码:
  1. Sub 方法1()
  2. '******************定义名称*************************
  3. Dim conn As Object, rs As Object
  4. Dim MyServer As String
  5. Dim mydata As String
  6. Dim mytable As String
  7. Dim SQL As String
  8. Dim StartTime As Variant
  9. Dim i As Long, j As Long
  10. Dim ws As Worksheet


  11. StartTime = Timer

  12. Set ws = Sheet1
  13. ws.Cells.ClearContents

  14. '***********************需要修改此处的SQL Server 数据库条件******************************
  15. MyServer = "WISE-THINK"                                       '存放数据的SQL Server 服务器
  16. mydata = "271模型"                                            '存放数据的SQL Server 数据库
  17. mytable = "[201207]"                                           '存放数据的数据表
  18.    
  19. '***********************修改结束*********************************************************

  20. Set conn = CreateObject("ADODB.Connection") '建立ADODB连接对象
  21. Set rs = CreateObject("ADODB.recordset") '建立收集器对象

  22. conn.connectionstring = "Driver={sql server};" _
  23.                     & "server=" & MyServer & ";" _
  24.                     & "uid=;pwd=;" _
  25.                     & "database=" & mydata _
  26.                     & ";AutoTranslate=False"
  27.                    '服务器是:WISE-THINK
  28. conn.Open          '打开连接SQL server

  29. '提取前10个记录
  30. SQL = "SELECT Top 10 * from " & mytable
  31. '执行SQL语句
  32. Set rs = conn.Execute(SQL)

  33. '复制表头名并字体加粗
  34. For i = 0 To rs.Fields.Count - 1
  35.   ws.Cells(1, i + 1) = rs.Fields(i).Name
  36.   ws.Cells(1, i + 1).Font.Bold = True
  37. Next i

  38. '复制全部记录数据
  39. ws.Range("A2").CopyFromRecordset rs
  40. ws.Columns.AutoFit

  41. '关闭记录集合及数据库连接
  42. rs.Close
  43. conn.Close
  44. Set rs = Nothing
  45. Set conn = Nothing

  46. MsgBox Timer - startime

  47. End Sub
方法二:
  1. Sub 方法2()
  2. '******************定义名称*************************
  3. Dim conn As Object, rs As Object
  4. Dim MyServer As String
  5. Dim mydata As String
  6. Dim mytable As String
  7. Dim SQL As String
  8. Dim StartTime As Variant
  9. Dim i As Long, j As Long
  10. Dim ws As Worksheet


  11. StartTime = Timer

  12. Set ws = Sheet1
  13. ws.Cells.ClearContents

  14. '***********************需要修改此处的SQL Server 数据库条件******************************
  15. MyServer = "WISE-THINK"                                       '存放数据的SQL Server 服务器
  16. mydata = "271模型"                                            '存放数据的SQL Server 数据库
  17. mytable = "[201207]"                                           '存放数据的数据表
  18.    
  19. '***********************修改结束*********************************************************

  20. Set conn = CreateObject("ADODB.Connection") '建立ADODB连接对象
  21. Set rs = CreateObject("ADODB.recordset") '建立收集器对象

  22. conn.connectionstring = "Driver={sql server};" _
  23.                     & "server=" & MyServer & ";" _
  24.                     & "uid=;pwd=;" _
  25.                     & "database=" & mydata _
  26.                     & ";AutoTranslate=False"
  27.                    '服务器是:WISE-THINK
  28. conn.Open          '打开连接SQL server

  29. '提取前10个记录
  30. SQL = "SELECT Top 10 * from " & mytable
  31. '执行SQL语句
  32. Set rs = conn.Execute(SQL)

  33. '复制表头名并字体加粗
  34. For i = 0 To rs.Fields.Count - 1
  35.   ws.Cells(1, i + 1) = rs.Fields(i).Name
  36.   ws.Cells(1, i + 1).Font.Bold = True
  37. Next i

  38. '复制全部数据
  39. i = 1
  40. Do While Not rs.EOF
  41.    For j = 0 To rs.Fields.Count - 1
  42.      ws.Cells(i + 1, j + 1) = rs.Fields(j).Value
  43.     Next j
  44.    rs.movenext
  45.    i = i + 1
  46. Loop

  47. '设置列宽到合适的宽度
  48. ws.Columns.AutoFit
  49. '关闭记录集合及数据库连接
  50. rs.Close
  51. conn.Close
  52. Set rs = Nothing
  53. Set conn = Nothing

  54. MsgBox Timer - startime

  55. End Sub


SQL查询结果复制两种方法.rar


2楼
纵鹤擒龙水中月
学习了
3楼
335081548
谢谢分享
4楼
芐雨
学习了
5楼
老糊涂
学习了

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap