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表格里了

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

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

    1.首先Excel要引用相应的ActiveX库 2.新增一个类模块 'class name: adosql for vba use Option Explicit Private ObjConnect ...

  2. ado连接oracle数据库帮助类,MFC ADO连接Oracle12c数据库 类库文件

    //--------查询示例 start-------- std::string sql = "select * from username"; adoreader=ado.Exe ...

  3. c++ ado连接mysql数据库_C++使用ADO连接数据库及其实例

    读写数据库的技术很多,现在多用ADO.ADO以COM方式提供,所以它的很多行为遵循COM规范.首先,要引入ADO的COM文件,它的位置一般在"C:/Program Files/Common ...

  4. ado连接mysql失败_VC++中ADO连接数据库失败原因

    1.用#import指令引入ADO类型库#import"c:\programfiles\commonfiles\system\ado\msado15.dll"no_namespac ...

  5. Excel VBA通过ADO连接、操作SQL Server数据库的自定义函数

    网上大多数有关VBA连接.操作SQL Server数据库的教程,大多是把连接字串.SQL语句.执行过程全写在一个过程中了,当一个VBA项目需要做大量的查询.更新数据时,显然这种方法并不合适,以下代码是 ...

  6. Visual C#使用ADO.NET自定义类MyDBase连接SQL Server数据库

    本文为Visual C#使用ado.net技术跟SQL Server数据库交互的自定义类MyDBase,通过该类,可以快速高效的实现数据库的连接.获取数据集.获取数据的个数.执行SQL语句等.例如,连 ...

  7. 解决VBA ADO连接Access2010以上版本密码无效问题

    解决EXCEL VBA ADO连接ACCESS 2010,但总提示密码无效,但密码是正确的 1.先以独占的方式打开,删除ACCESS2007或者ACCESS2010的密码. 2.ACCESSS 201 ...

  8. vc ado连接mysql_VC用Ado接口连接和使用数据库及注意事项

    一.阅读本文所需注意的其它事项 1.进行方法调用时,所传递的参数的类型的转换(可能存在比本文更简便的处理方法但我未发现) 2.每个源文件的每行注释说明了其文件名 3.请关注相关头文件包含关系 4.请关 ...

  9. Excel Vba无法连接 远程 Mysql数据库问题的解决方法

    1.使用的环境 excel 2016 32位 远程服务器数据库,有公网ip 使用的是xampp 套件,包含apache+php+MariaDB 10.1.34(这个和mysql兼容,可以看作mysql ...

  10. vs2008和SQL Server使用ADO连接方法

    注意VC中地址要以\\表示!!!!!获取的字符串要修改 学了几天ADO方法,今天也写一写教程~ 时间2012年10月20日 环境: 操作系统:win7- 64bit 编译器:VS2008 数据库:SQ ...

最新文章

  1. 数学建模——层次分析法Python代码
  2. 打造Ubuntu下的SLAMP
  3. 示例介绍:JavaFX 8打印
  4. ibatis mysql sqlmapconfig_iBATIS sqlMapConfig配置详解
  5. linux红帽6架设apache,linux Redhat6.5 中 编译安装apache
  6. 百度Apollo赋能的威马W6,自主泊车体验如何?
  7. python干嘛用的-python都可以做什么用
  8. mysql in和or扫描全表_MySQL对OR条件查询不支持优化,会进行全表扫描
  9. 移动浏览器相关总结(持续更新)
  10. Arcgis Licensemanager 不能启动的原因之一(转载)
  11. C中使用errno查看函数调用的错误
  12. 基于Eclipse+Java+Swing+Mysql实现旅游管理信息系统
  13. 1000并发的系统服务器配置,1000并发服务器配置
  14. 服务器都没有显卡型号吗,云服务器都没显卡么?
  15. C语言简单实现世界协调时UTC与北京时间BJT转换
  16. java 同比数据怎么算的_有当日数据和去年全年数据,如何通过公式做每日同比?...
  17. 测试用例设计方法(2)
  18. openfire中用email作用户名注册的解决方案
  19. 菜鸟学习网络以及ensp组网配置基础(一)
  20. ISO14000系列标准特点(转载)

热门文章

  1. Createjs的控件 BitMap、MovieClip、Sprite
  2. 硬盘格式化工具 标记坏扇区_硬盘格式化后是否还记得坏扇区?
  3. python ImportError: No module named spiders
  4. angularJS简介
  5. 轻松记录南极最美丽风景 有TA就已经足够
  6. python百度爬虫_Python爬虫 - 简单抓取百度指数
  7. python抓取百度指数详解
  8. 新型冠状病毒数据可视化分析
  9. java中的IO整理(转)
  10. Quora的技术探索