ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1118|回复: 1

[原创] 池盛龙每日一分享:VBA连接数据库进行操作如何保证稳定又高效,试试我独创方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-11-9 15:29 | 显示全部楼层 |阅读模式
全局声明变量
  1. Option Explicit
  2. Public cn As New ADODB.Connection
  3. Public RS As New ADODB.Recordset
  4. Public strSQL As String
  5. Public ZdC As String
  6. Public arr, brr
复制代码
数据库配置函数:我这里以MSSQL连接为示例
  1. '功能描述: '配置数据库信息
  2. '作者:池盛龙
  3. '日期:2020-11-09
  4. '个人网址:CHISHENGLONG.TOP
  5. Public Function strCn()
  6.   strSQLServer = "IP地址"
  7.     strSQLUser = "账号"
  8.     strSQLPW = "密码"
  9.     strSQLDB = "数据库名"
  10.     strCn = "Provider=sqloledb;Server=" & strSQLServer & ";Database=" & strSQLDB & ";Uid=" & strSQLUser & ";Pwd=" & strSQLPW
  11. End Function
复制代码


查询函数
  1. '功能描述: '用于执行SQL 插入、更新、修改、语句
  2. '作者:池盛龙
  3. '日期:2020-11-09
  4. '个人网址:CHISHENGLONG.TOP
  5. '调用方法如下:

  6.   'If XSQL(CStr(SQL), True, [A5]) = False Then END
  7.   '如果需要显示标题如下:
  8. '    For X = 0 To UBound(brr, 2)
  9. '        Cells(4, X + 1) = brr(0, X)
  10. '    Next
  11. 'If TypeName(arr) = "Nothing" Then MsgBox "暂无记录!", vbExclamation: Exit Sub
  12. '获取结果继续赋值方法:
  13. '  For X = 0 To UBound(arr, 2)
  14. '        Cells(1 "B") = arr(ZSQL("订单编号"), X)
  15. '        Cells(2 "C") = arr(ZSQL("物料名称"), X)
  16. '        Cells(3, "D") = arr(ZSQL("规格"), X)
  17. '        Cells(4 "E") = arr(ZSQL("单位"), X)
  18. '        Cells(5, "F") = arr(ZSQL("数量"), X)
  19. '        Cells(6, "G") = arr(ZSQL("单价"), X)
  20. '    Next

  21. '参数 [语句,是否需要,赋值位置]
  22. Public Function XSQL(SQL As String, S As Boolean, dx As Object)
  23.     XSQL = False
  24.     ZdC = ""
  25.     On Error GoTo ErrHandler
  26.     cn.Open strCn
  27.     Set RS = cn.Execute(SQL)
  28.     ReDim brr(0, RS.Fields.Count - 1)
  29.     Dim F As Integer     '获取标题
  30.     For F = 0 To RS.Fields.Count - 1
  31.         brr(0, F) = RS.Fields(F).Name
  32.         ZdC = ZdC & "{" & F & "}" & RS.Fields(F).Name  '用于识别字段列的位置
  33.     Next
  34.     If RS.BOF = False Then    '有数据记录时执行
  35.         arr = RS.GetRows    '获取结果且装置成二维数据
  36.         If S = True Then
  37.             ' CopyFromRecordset 或GetRows后,记录集指针已经移到了EOF,这时如果想继续使用该记录集,应该把其指针再移回第一条
  38.             RS.MoveFirst    '指针移第一行 '
  39.             dx.CopyFromRecordset RS
  40.         End If
  41.     Else
  42.         Set arr = Nothing
  43.     End If
  44.     cn.Close    ' 关闭连接
  45.     XSQL = True
  46.     Exit Function
  47. ErrHandler:
  48.     If cn.State = adStateOpen Then cn.Close        '如果断开连接重新连接
  49.     If Err.Number = -2147467259 Then
  50.         MsgBox " 与数据库失去链接!无法获取数据", vbExclamation
  51.     Else
  52.         MsgBox " 系统错误 " & Err.Number & " : " & Err.Description, vbExclamation
  53.     End If


  54.     Exit Function
  55. End Function
复制代码
更新/修改/删除的函数
  1. 更新、修改、删除函数
  2. '功能描述: '用于执行SQL 插入、更新、修改、语句
  3. '作者:池盛龙
  4. '日期:2020-11-09
  5. '个人网址:CHISHENGLONG.TOP
  6. '调用方法如下:
  7. 'If SSQL(CStr("DELETE FROM 表 ")) = False Then End
  8. '参数 [插入、更新、修改、语句]

  9. Public Function SSQL(SQL As String)
  10.     SSQL = False
  11.     On Error GoTo ErrHandler
  12.     cn.Open strCn
  13.     Set RS = cn.Execute(SQL)
  14.     SSQL = True
  15.     cn.Close
  16.     Exit Function
  17. ErrHandler:
  18.     If cn.State = adStateOpen Then cn.Close        '如果断开连接重新连接
  19.     If Err.Number = -2147467259 Then
  20.         MsgBox " 与数据库失去链接!无法获取数据", vbExclamation
  21.     Else
  22.         MsgBox " 系统错误 " & Err.Number & " : " & Err.Description, vbExclamation
  23.     End If
  24.     Exit Function
  25. End Function
复制代码
使用效果:
查询操作:分2种,一种无结果赋值,一直有结果赋值{结果的意思是,不需要查询后把结果数据填到工作表}
图下方法为:无结果赋值
image.png
图下方法为:有结果赋值
image.png


更新/删除操作:
image.png
不明白使用的新手,可以留意下发提问。如果我的方法对你有帮助,麻烦你的小手送送小花,顶顶帖子。
我会定期发布帖子,想学更多技巧,继续关注

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-11-9 17:04 | 显示全部楼层
第一帖自己发射

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-6-23 10:20 , Processed in 0.028191 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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