ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: opiona

[分享] 在EXCEL中使用SQL语句查询集锦-持续更新中,敬请关注

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-4 10:04 | 显示全部楼层
本帖已被收录到知识树中,索引项:ADO技术
以前在写asp时用过记录集,没想到vba也能用到。学习中,谢谢。

TA的精华主题

TA的得分主题

发表于 2012-11-4 17:46 | 显示全部楼层
我等菜鸟的福音 下载下来 慢慢的看 希望能找到对自己有用的
感谢一下 {:soso_e163:}{:soso_e163:}

TA的精华主题

TA的得分主题

发表于 2012-11-17 08:33 | 显示全部楼层
我在这学到好多,感谢楼主!

TA的精华主题

TA的得分主题

发表于 2012-12-12 17:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-12-12 20:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-12-13 08:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
opiona 发表于 2012-4-24 00:03
下面是收集的一些链接:
SQL将几个条件组合一句中,居然用到3个别名:
http://club.excelhome.net/forum. ...

正在找...........

TA的精华主题

TA的得分主题

发表于 2012-12-30 12:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
占个位置,以后学习

TA的精华主题

TA的得分主题

发表于 2013-1-10 17:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-1-10 18:09 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-11 17:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

EXCEL中调用SQL语句的自定义函数

本帖最后由 opiona 于 2013-2-4 17:51 编辑

详见附件(Excel+Access) Excel中的SQL类.rar (191.12 KB, 下载次数: 915) 2013-02-04更新
使用SQL多了,每次都要声明,写链接,真麻烦
现在写成了自定义函数,直接调,方便不少啊!

将重复使用的代码写成函数,是个好习惯!!!!!

1、获得SQL查询的结果



  1. '*****************************************************************************************
  2. '函数名:    GET_SQL
  3. '函数功能:  获得指定SQL的查询结果,修改CN连接字符串,可以连接各种数据库
  4. '返回值:    返回一个二维数组
  5. '参数1:     StrSQL   字符类型   SQL查询语句
  6. '参数2:     Biaoti   可参数选   是否输出标题,默认带有标题
  7. '使用方法:  Arr = GET_SQL(StrSQL,true)
  8. '            Arr(0,1)  '//数组第一行为标题行,从i=1 开始是数据
  9. '            Sh2.Range(Sh2.Cells(1, 1).Address, Sh2.Cells(UBound(Arr, 1) + 1, UBound(Arr, 2) + 1).Address) = Arr
  10. '*****************************************************************************************
  11. Public Function GET_SQL(StrSQL As String, Optional Biaoti As Boolean = True) As Variant()
  12. On Error Resume Next    ' 改变错误处理的方式。
  13. Dim CN, RS
  14.    Err.Clear
  15.    Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
  16.    Set RS = CreateObject("adodb.recordset")
  17.        CN.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & ThisWorkbook.Path & "\Info.mdb"
  18.        RS.Open StrSQL, CN, 1, 3
  19.        If Biaoti = True Then
  20.             ReDim arr(0 To RS.RecordCount, 0 To RS.Fields.Count - 1)
  21.                 For a = 0 To RS.Fields.Count - 1  '//导入标题
  22.                    arr(0, a) = RS.Fields(a).Name
  23.                 Next
  24.             For i = 0 To RS.RecordCount - 1  '//导入数据
  25.                 For a = 0 To RS.Fields.Count - 1
  26.                     arr(i + 1, a) = RS.Fields(a).Value
  27.                 Next a
  28.                 RS.MoveNext
  29.             Next
  30.        Else
  31.             ReDim arr(0 To RS.RecordCount - 1, 0 To RS.Fields.Count - 1)
  32.             For i = 0 To RS.RecordCount - 1  '//导入数据
  33.                 For a = 0 To RS.Fields.Count - 1
  34.                     arr(i, a) = RS.Fields(a).Value
  35.                 Next a
  36.                 RS.MoveNext
  37.             Next
  38.        End If
  39.   GET_SQL = arr
  40.   CN.Close  '//关闭ADO连接
  41.   Set RS = Nothing
  42.   Set CN = Nothing  '//释放内存
  43. End Function
  44. '*****************************************************************************************
  45. Sub 查询结果()
  46. Dim StrSQL As String
  47. StrSQL = "SELECT TOP 11 * FROM 双色球"
  48. arr = GET_SQL(StrSQL)
  49. 'Arr(0,1)  '//数组第一行为标题行,从i=1 开始是数据
  50. Sheet1.Range(Sheet1.Cells(1, 1).Address, Sheet1.Cells(UBound(arr, 1) + 1, UBound(arr, 2) + 1).Address) = arr
  51. End Sub      
复制代码
2、获得查询的个数
  1. Public Function InfoToAccess(Strsql) As Integer      '//执行SQL语句查到数据个数
  2. On Error Resume Next    ' 改变错误处理的方式。
  3. Dim CN, RS
  4.    Err.Clear
  5.    If Strsql = "" Then InfoToAccess = 0: Exit Function
  6.    Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
  7.    Set RS = CreateObject("adodb.recordset")
  8.        CN.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & ThisWorkbook.Path & "\Info.mdb"
  9.        RS.Open Strsql, CN, 1, 3
  10.        If Err.Number <> 0 Then InfoToAccess = 0 Else InfoToAccess = RS.RecordCount
  11.   CN.Close  '//关闭ADO连接
  12.   Set RS = Nothing
  13.   Set CN = Nothing  '//释放内存
  14. End Function

  15. Sub 查到数据个数()
  16.      Strsql = "SELECT * FROM 双色球"
  17.       MsgBox InfoToAccess(Strsql)
  18. End Sub

复制代码

3、执行SQL语句,一般为添加、修改删除语句
  1. Public Function InfoToAccess(StrSQL) As Boolean    '//执行SQL语句,一般为添加、修改删除语句
  2. On Error Resume Next    ' 改变错误处理的方式。
  3. Err.Clear
  4. If StrSQL = "" Then InfoToAccess = False: Exit Function
  5. Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
  6. Set RS = CreateObject("adodb.recordset")
  7. CN.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & ThisWorkbook.Path & "\Info.mdb"
  8. CN.Execute (StrSQL)
  9. If Err.Number <> 0 Then InfoToAccess = False Else InfoToAccess = True
  10. CN.Close  '//关闭ADO连接
  11. Set RS = Nothing
  12. Set CN = Nothing  '//释放内存
  13. End Function

  14. Sub 执行SQL语句()
  15.      StrSQL = "SELECT * FROM 双色球"
  16.       MsgBox InfoToAccess(StrSQL)
  17. End Sub

复制代码


评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 04:21 , Processed in 0.039849 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表