当前位置: 首页 > news >正文

vba ado 连接mysql_Excel VBA 自定义类(ADO)连接数据库

1.首先Excel要引用相应的ActiveX库

2.新增一个类模块

'class name: adosql for vba use

Option Explicit

Private ObjConnection As New ADODB.Connection

Private ObjCommand As New ADODB.Command

Public ObjRecordSet As New ADODB.Recordset

Private para(16) As New ADODB.Parameter

Private Sub class_initialize() '构造函数

ObjConnection.CommandTimeout = 15

ObjConnection.ConnectionTimeout = 15

End Sub

Public Sub openDsn(strDSN As String) '打开数据库连接

If Len(strDSN) = 0 Then

MsgBox "DSN不能为空."

Exit Sub

End If

If Right(strDSN, 1) = ";" Then

ObjConnection.Open strDSN

Else

ObjConnection.Open strDSN & ";"

End If

End Sub

Public Sub setCmd(strQUERY As String, cmdTYPE As Integer) '设置命令

ObjCommand.ActiveConnection = ObjConnection

ObjCommand.CommandText = strQUERY

ObjCommand.CommandType = cmdTYPE '1-语句 4-存储过程

ObjConnection.CursorLocation = 3 '本地游标库提供的客户端游标

ObjRecordSet.CursorType = 3 '静态游标

End Sub

Public Sub inpara(s As Integer, paname As String, paformat As String, palen As String, pavalue As String) '参数个数 参数名 字符类型 长度 值

Set para(s) = ObjCommand.CreateParameter(paname, paformat, 1, palen, pavalue)

ObjCommand.Parameters.Append para(s)

End Sub

Public Sub inparastr(s As Integer, paname As String, palen As String, pavalue As String) '参数个数 参数名 长度 值

Set para(s) = ObjCommand.CreateParameter(paname, "202", 1, palen, pavalue)

ObjCommand.Parameters.Append para(s)

End Sub

Public Sub inparaint(s As Integer, paname As String, pavalue As String) '参数个数 参数名 值

Set para(s) = ObjCommand.CreateParameter(paname, "3", 1, "8", pavalue)

ObjCommand.Parameters.Append para(s)

End Sub

Public Sub inparadate(s As Integer, paname As String, pavalue As String) '参数个数 参数名 值

Set para(s) = ObjCommand.CreateParameter(paname, "7", 1, "10", pavalue)

ObjCommand.Parameters.Append para(s)

End Sub

Public Sub inparabool(s As Integer, paname As String, pavalue As String) '参数个数 参数名 值

Set para(s) = ObjCommand.CreateParameter(paname, "11", 1, "1", pavalue)

ObjCommand.Parameters.Append para(s)

End Sub

Public Sub inparadec(s As Integer, paname As String, pavalue As String) '参数个数 参数名 值

Set para(s) = ObjCommand.CreateParameter(paname, "14", 1, "18", pavalue)

ObjCommand.Parameters.Append para(s)

End Sub

Public Sub outpara(s As Integer, paname As String, paformat As String, palen As String) '参数个数 参数名 字符类型 长度

Set para(s) = ObjCommand.CreateParameter(paname, paformat, 2, palen)

ObjCommand.Parameters.Append para(s)

End Sub

Public Sub inoutpara(s As Integer, paname As String, paformat As String, palen As String, pavalue As String) '参数个数 参数名 字符类型 长度 值

Set para(s) = ObjCommand.CreateParameter(paname, paformat, 3, palen, pavalue)

ObjCommand.Parameters.Append para(s)

End Sub

Public Function outvalue(s As Integer) As String '返回指定参数返回值

outvalue = para(s).Value

End Function

Public Sub rlspara(s As Integer) '释放参数对象

Dim i As Integer

For i = 1 To s

ObjCommand.Parameters.Delete para(i).Name

Set para(i) = Nothing

Next

End Sub

Public Function execRT() As Integer '执行CMD 并返回记录数

Set ObjRecordSet = ObjCommand.Execute

execRT = CInt(ObjRecordSet.RecordCount)

End Function

Public Function getRT() As ADODB.Recordset '返回记录集

Set getRT = ObjCommand.Execute

End Function

Private Sub mfirst() '游标定位到第一条

ObjRecordSet.MoveFirst

End Sub

Private Sub mnext() '游标定位到下一条

ObjRecordSet.MoveNext

End Sub

Public Function getvalue(fieldname As Integer) As String '取值 BY name

getvalue = ObjRecordSet.Fields(fieldname).Value

End Function

Public Function numvalue(fieldnum As Integer) As String '取值 BY number

numvalue = ObjRecordSet.Fields(fieldnum).Value

End Function

Public Sub clsrcd() '关闭结果集

ObjRecordSet.Close

End Sub

Public Sub clscon() '关闭连接

ObjConnection.Close

End Sub

Public Function scalar(strQUERY As String) As String '返回字符串值

Dim ct As Integer

Call setCmd(strQUERY, 1)

ct = execRT()

If ct > 0 Then

Call mfirst

scalar = numvalue(0)

Else

scalar = ""

End If

Call clsrcd

End Function

Public Sub rlscon() '释放所有对象

Set ObjRecordSet = Nothing

Set ObjCommand = Nothing

if ObjConnection.State = adStateOpen Then

ObjConnection.Close

endif

Set ObjConnection = Nothing

End Sub

Private Sub Class_Terminate() '析构函数

Set ObjRecordSet = Nothing

Set ObjCommand = Nothing

if ObjConnection.State = adStateOpen Then

ObjConnection.Close

endif

Set ObjConnection = Nothing

End Sub

3.新增一个SUB在模块里

测试连接数据库(PROGRESS)

Option Explicit

Public Sub test1()

Dim ado As adosql

Set ado = New adosql

ado.openDsn "Dsn=mfgtest;uid=sql;pwd=123;host=xxx.xx.xx.xx;port=xxxx;db=mfgdb;"

Dim sqlstr As String

sqlstr = "select ifnull(sum(op_qty_comp),0) from pub.op_hist where op_domain = 'CN01' and op_site = 'CN01' and op_type = 'BACKFLSH' and op_date = ? and op_part = ? and op_wo_op = ?"

ado.inparadate 1, "@date", "2020-04-28"

ado.inparastr 2, "@part", "18", "ABC0001"

ado.inparaint 3, "@op", "40"

MsgBox (ado.scalar(sqlstr))

ado.rlspara 3

Set ado = Nothing

End Sub

测试连接数据库(MS SQLSERVER)

Option Explicit

Public Sub test2()

Dim ado As adosql

Set ado = New adosql

ado.openDsn "driver={SQL Server};server=10.3.xxx.x;uid=sql;pwd=xxxx;database=TESTDB"

Dim sqlstr As String

sqlstr = "select isnull(sum(sodqty),0) from salesdetail where plantcode = 'CN01' and orddate >= ?"

ado.inparadate 1, "@date", "2020-04-28"

MsgBox (ado.scalar(sqlstr))

ado.rlspara 3

Set ado = Nothing

End Sub

这样就可以比较方便的取到数据 输出到EXCEL表格里了

相关文章:

  • python的核心数据类型_Python核心数据类型-字典
  • 加权平均数的例子_加权平均值和算术平均值的区别与公式
  • 爬虫用python写js代码_使用PyV8在Python爬虫中执行js代码
  • debezium mysql_几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步...
  • mysql 字符串特殊字符_在MySQL中从具有字符串值(字符串,数字和特殊字符)的列中获取特定记录...
  • mysql多实例 window_window系统mysql多实例创建的方法
  • python 实例方法看到实例变量_python中的实例方法、静态方法、类方法、类变量和实例变量浅析...
  • mysql 查询主键 删除数据库_SQL删除数据库中所有用户数据表主键
  • mysql data free 很大_为什么MySQL的data_free大于数据和索引的组合?
  • 大学计算机基础python题库操作题_用Python玩转数据_中国大学 MOOC_题库2020
  • 查看mysql消耗的内存_nginx/mysql查看内存占用
  • java模板方法模式_设计模式之模板方法模式(java代码实现)
  • java package name_Java Package getName()用法及代码示例
  • java pojo 转 map_如何将POJO对象转换成MAP
  • io流 java代码_java IO流 对文件操作的代码集合
  • [译]CSS 居中(Center)方法大合集
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【刷算法】从上往下打印二叉树
  • Java,console输出实时的转向GUI textbox
  • JavaScript实现分页效果
  • java中具有继承关系的类及其对象初始化顺序
  • JS变量作用域
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Netty源码解析1-Buffer
  • Python利用正则抓取网页内容保存到本地
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • Web Storage相关
  • 闭包,sync使用细节
  • 测试如何在敏捷团队中工作?
  • 技术胖1-4季视频复习— (看视频笔记)
  • 看域名解析域名安全对SEO的影响
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 如何在 Tornado 中实现 Middleware
  • 三分钟教你同步 Visual Studio Code 设置
  • 微信小程序填坑清单
  • 物联网链路协议
  • 学习Vue.js的五个小例子
  • 以太坊客户端Geth命令参数详解
  • 用Canvas画一棵二叉树
  • hi-nginx-1.3.4编译安装
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #pragam once 和 #ifndef 预编译头
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (附源码)ssm高校实验室 毕业设计 800008
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (三)uboot源码分析
  • (十八)SpringBoot之发送QQ邮件
  • (十一)c52学习之旅-动态数码管
  • (原創) 未来三学期想要修的课 (日記)
  • (转载)OpenStack Hacker养成指南
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复