VBA与数据库——写个类操作ADO_操作数据库
2023-03-14 22:39:48 时间
操作数据库有增加、修改、删除、查询记录等,在前面的例子中,用的基本都是查询,这种是需要得到结果数据的,另外几种是修改数据库里的数据,很多时候是不需要返回数据的。
所以抽象出来就是一种需要返回结果,一种不需要,这样2种操作数据库的功能,所以在CADO里面增加2个函数:
Function Execute(StrSql As String) As Long
On Error GoTo errHandle
AdoConn.Execute StrSql, , adCmdText Or adExecuteNoRecords
Execute = RetCode.RetSucce
Exit Function
errHandle:
StrErr = Err.Description
Execute = RetCode.RetErr
End Function
Function ExecuteQuery(StrSql As String, retRst As ADODB.Recordset, Optional bField As Boolean = True) As Long
On Error GoTo errHandle
Set retRst = AdoConn.Execute(StrSql, , adCmdText Or adOpenForwardOnly)
ExecuteQuery = RetCode.RetSucce
Exit Function
errHandle:
StrErr = Err.Description
ExecuteQuery = RetCode.RetErr
End Function
有了这2个函数,那么在前面例子中的代码就可以进行修改了,直接调用CADO就可以了,比如前面的排序代码:
Sub ADOSortData()
Dim ado As CADO
Set ado = NewCADO()
'打开数据库
If ado.OpenDB(ThisWorkbook.fullname) Then
Debug.Print ado.GetErr()
Exit Sub
End If
Dim rst As Object
If ado.ExecuteQuery("select * from [Sheet1$A1:B5] order by 数据 asc", rst) Then
Debug.Print ado.GetErr()
Exit Sub
End If
Range("D1").CopyFromRecordset rst
Set ado = Nothing
End Sub
代码的数量上没有多大变化,但是在使用上就比直接调用ADO对象要方便一些。
因为我们是在Excel里使用,很多时候读取数据库后数据都是输出到单元格中,那么进一步处理CopyFromRecordset,这个也做到CADO里面,增加一个输出到Excel的函数:
Function ResultToExcel(StrSql As String, rng As Range, Optional bField As Boolean = True) As Long
Dim rst As ADODB.Recordset
ResultToExcel = ExecuteQuery(StrSql, rst, bField)
If ResultToExcel Then
Exit Function
End If
Dim i As Long
If bField Then
For i = 0 To rst.Fields.Count - 1
rng.Offset(0, i).Value = rst.Fields(i).Name
Next i
Set rng = rng.Offset(1, 0)
End If
rng.CopyFromRecordset rst 'AdoConn.Execute(SqlStr)
ResultToExcel = RetCode.RetSucce
Exit Function
errHandle:
StrErr = Err.Description
ResultToExcel = RetCode.RetErr
End Function
然后调用这个函数就更方便了:
Sub ADOSortData()
Dim ado As CADO
Set ado = NewCADO()
'打开数据库
If ado.OpenDB(ThisWorkbook.fullname) Then
Debug.Print ado.GetErr()
Exit Sub
End If
If ado.ResultToExcel("select * from [Sheet1$A1:B5] order by 数据 asc", Range("D1")) Then
Debug.Print ado.GetErr()
Exit Sub
End If
Set ado = Nothing
End Sub
相关文章
- 数据孤岛是业务效率的无声杀手
- 2023展望:新的一年将给大数据分析领域带来什么?
- 阿里云ADB基于Hudi构建Lakehouse的实践
- 大数据在医疗保健领域的使用案例
- 微软增加说明:KB5021751 更新扫描已经 / 即将过时 Office 过程中不会触碰用户隐私
- 2022 Gartner全球云数据库管理系统魔力象限发布 腾讯云数据库入选
- 场景化、重实操,分享一个实时数仓实践案例
- Arctic的湖仓一体践行之路
- 分布式计算MapReduce究竟是怎么一回事?
- 淘系数据模型治理优秀实践
- 大数据分析对医疗保健的影响
- 当我们说大数据Hadoop,究竟在说什么?
- 2022年及以后大数据的五个发展趋势
- 网易严选离线数仓治理实践
- 2023 年数据治理趋势
- 一份“靠谱”的年度经营计划,你学会了吗?
- 漫谈对大数据的思考
- 测试一下,读懂数据的能力,你有吗?
- 用艺术的眼光探索数据之美
- 聊聊数据分析成果如何落地