VBA数据库解决方案第二十五讲:工作表中数据在数据表中批量删除

《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA数据库解决方案第二十五讲:工作表中提供的数据在数据表中批量删除

【分享成果,随喜正能量】341人应该是从喜欢里得到快乐和力量,而不是花光了所有力量和快乐去喜欢。慈悲是人间最美好的无价之宝,能以慈悲的眼睛看人,人人都是菩萨。

第二十五讲 工作表中提供的数据在数据表中批量删除

大家好,我们今日继续讲解VBA数据库解决方案的第25讲内容:利用VBA,把工作表中提供的数据在数据表中批量删除的方法。在上一讲中,我们讲了实现在数据表中删除记录的一般方法,这种方法可以对重复的数据进行处理,但实际的情况是,我们的数据记录很多时候是没有重复的,而且如果数据量很大,该怎么处理呢?今日我们就讲解如何在记录集中批量删除给定记录的方法。

1 应用场景的具体分析

实例:我们有一个员工的信息表,导出的数据如下:

在工作实际中我们需要删除其中的100013,100024,的记录,当然还可以更多,如下表格是需要在数据库中删除的数据信息:

也就是说我们要删除的数据中是以员工编号为索引的记录,这个时候需要如何处理?代码该如何写呢?如果仍采用上讲的办法也是可以的,但今天我们将介绍一种新的方法。就是批量删除。

2 根据工作表数据批量删除数据表记录的代码及代码解读

代码如下:

Sub mynz_25() '第25讲 利用VBA把工作表中提供的数据在数据表中批量删除的方法

Dim cnADO, rsADO As Object

Dim strPath, strTable, strWhere, strSQL, strMsg As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strTable = "员工信息"

cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath

strSQL = "SELECT * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

'汇报给用户记录数

MsgBox "删除前记录数为:" & rsADO.RecordCount

rsADO.Close

strWhere = " WHERE EXISTS(" _

& "SELECT * FROM [Excel 12.0;Database=" _

& ThisWorkbook.FullName & "].[" & ActiveSheet.Name & "$" _

& Range("a1").CurrentRegion.Address(0, 0) & "] " _

& "WHERE 员工编号=" & strTable & ".员工编号)"

strSQL = "SELECT 员工编号 FROM " & strTable & strWhere

rsADO.Open strSQL, cnADO, 1, 3

If rsADO.RecordCount > 0 Then

strSQL = "DELETE FROM " & strTable & strWhere

cnADO.Execute strSQL

MsgBox rsADO.RecordCount & "条记录被删除。", vbInformation, "提示"

Else

MsgBox "没有发现需要删除的记录。", vbInformation, "提示"

End If

rsADO.Close

strSQL = "SELECT * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

'汇报给用户记录数

MsgBox "删除后记录数为:" & rsADO.RecordCount

'释放内存

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代码截图:

代码解读:

1):

Dim cnADO, rsADO As Object

Dim strPath, strTable, strWhere, strSQL, strMsg As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strTable = "员工信息"

cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath

strSQL = "SELECT * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

'汇报给用户记录数

MsgBox "删除前记录数为:" & rsADO.RecordCount

rsADO.Close

在上述的代码中我们用的是后期绑定的方法,建立了ADO连接,并且汇报当前的记录数,

2):

strWhere = " WHERE EXISTS(" _

& "SELECT * FROM [Excel 12.0;Database=" _

& ThisWorkbook.FullName & "].[" & ActiveSheet.Name & "$" _

& Range("a1").CurrentRegion.Address(0, 0) & "] " _

& "WHERE 员工编号=" & strTable & ".员工编号)"

strSQL = "SELECT 员工编号 FROM " & strTable & strWhere

rsADO.Open strSQL, cnADO, 1, 3

If rsADO.RecordCount > 0 Then

strSQL = "DELETE FROM " & strTable & strWhere

cnADO.Execute strSQL

MsgBox rsADO.RecordCount & "条记录被删除。", vbInformation, "提示"

Else

MsgBox "没有发现需要删除的记录。", vbInformation, "提示"

End If

rsADO.Close

上述代码用了一个WHERE语句把EXCEL工作表和数据表进行了连接,并打开了符合要求的记录集。关于EXCEL的连接方式,在这本书中有介绍,这里不再多说,打开记录后仍旧用DELETE的方法进行删除,之后弹出对话框告诉用户删除的数量。

下面我们看运行情况:

上述代码在执行过程中首先会提示删除数据前的记录数:

然后提供删除记录的信息:

最后提供删除后的记录提示:

为了验证数据我们需要再次显示记录数,点击显示记录即可:

在一般的情况下,实际工作中我们需要先点击总记录数,然后选择把需要保留的记录删除,留下需要删除的记录,最后点击删除运行按钮即可。

今日内容回向:

1 如何批量删除数据表中的数据?

2 如何连接EXCEL的工作表?

本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

相关推荐
Chester_19996 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲7 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员7 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导8 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan8 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
m0_695251498 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
大衛說9 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
可乐鸡翅yeah_10 小时前
hls.js 内存泄漏实战排查,直播 M3U8 长时间播放异常定位方案
开发语言·javascript·python·django·ecmascript·m3u8·m3u8在线
2601_9622035110 小时前
Java进阶07集合(续)
java·开发语言
郑州光合科技余经理11 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php