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表格里了
vba ado 连接mysql_Excel VBA 自定义类(ADO)连接数据库相关推荐
- vba ado mysql_Excel VBA 自定义类(ADO)连接数据库
1.首先Excel要引用相应的ActiveX库 2.新增一个类模块 'class name: adosql for vba use Option Explicit Private ObjConnect ...
- ado连接oracle数据库帮助类,MFC ADO连接Oracle12c数据库 类库文件
//--------查询示例 start-------- std::string sql = "select * from username"; adoreader=ado.Exe ...
- c++ ado连接mysql数据库_C++使用ADO连接数据库及其实例
读写数据库的技术很多,现在多用ADO.ADO以COM方式提供,所以它的很多行为遵循COM规范.首先,要引入ADO的COM文件,它的位置一般在"C:/Program Files/Common ...
- ado连接mysql失败_VC++中ADO连接数据库失败原因
1.用#import指令引入ADO类型库#import"c:\programfiles\commonfiles\system\ado\msado15.dll"no_namespac ...
- Excel VBA通过ADO连接、操作SQL Server数据库的自定义函数
网上大多数有关VBA连接.操作SQL Server数据库的教程,大多是把连接字串.SQL语句.执行过程全写在一个过程中了,当一个VBA项目需要做大量的查询.更新数据时,显然这种方法并不合适,以下代码是 ...
- Visual C#使用ADO.NET自定义类MyDBase连接SQL Server数据库
本文为Visual C#使用ado.net技术跟SQL Server数据库交互的自定义类MyDBase,通过该类,可以快速高效的实现数据库的连接.获取数据集.获取数据的个数.执行SQL语句等.例如,连 ...
- 解决VBA ADO连接Access2010以上版本密码无效问题
解决EXCEL VBA ADO连接ACCESS 2010,但总提示密码无效,但密码是正确的 1.先以独占的方式打开,删除ACCESS2007或者ACCESS2010的密码. 2.ACCESSS 201 ...
- vc ado连接mysql_VC用Ado接口连接和使用数据库及注意事项
一.阅读本文所需注意的其它事项 1.进行方法调用时,所传递的参数的类型的转换(可能存在比本文更简便的处理方法但我未发现) 2.每个源文件的每行注释说明了其文件名 3.请关注相关头文件包含关系 4.请关 ...
- Excel Vba无法连接 远程 Mysql数据库问题的解决方法
1.使用的环境 excel 2016 32位 远程服务器数据库,有公网ip 使用的是xampp 套件,包含apache+php+MariaDB 10.1.34(这个和mysql兼容,可以看作mysql ...
- vs2008和SQL Server使用ADO连接方法
注意VC中地址要以\\表示!!!!!获取的字符串要修改 学了几天ADO方法,今天也写一写教程~ 时间2012年10月20日 环境: 操作系统:win7- 64bit 编译器:VS2008 数据库:SQ ...
最新文章
- 数学建模——层次分析法Python代码
- 打造Ubuntu下的SLAMP
- 示例介绍:JavaFX 8打印
- ibatis mysql sqlmapconfig_iBATIS sqlMapConfig配置详解
- linux红帽6架设apache,linux Redhat6.5 中 编译安装apache
- 百度Apollo赋能的威马W6,自主泊车体验如何?
- python干嘛用的-python都可以做什么用
- mysql in和or扫描全表_MySQL对OR条件查询不支持优化,会进行全表扫描
- 移动浏览器相关总结(持续更新)
- Arcgis Licensemanager 不能启动的原因之一(转载)
- C中使用errno查看函数调用的错误
- 基于Eclipse+Java+Swing+Mysql实现旅游管理信息系统
- 1000并发的系统服务器配置,1000并发服务器配置
- 服务器都没有显卡型号吗,云服务器都没显卡么?
- C语言简单实现世界协调时UTC与北京时间BJT转换
- java 同比数据怎么算的_有当日数据和去年全年数据,如何通过公式做每日同比?...
- 测试用例设计方法(2)
- openfire中用email作用户名注册的解决方案
- 菜鸟学习网络以及ensp组网配置基础(一)
- ISO14000系列标准特点(转载)