排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
批量删除数据库中指定记录
批量删除数据库中指定记录
VBA语言专家
2021-11-04
252
【分享成果,随喜正能量】
挤不进的圈子不要硬挤,难为了别人作贱了自己;跨不过的门坎不要硬跨,跨过了是门,跨不过就是坎;认识一个人靠缘分,了解一个人靠耐心,征服一个人靠智慧,和睦相处靠包容。与人为善,成就他人的同时不知不觉也成就了自己。一己是人,众人是天。
《VBA数据库解决方案》教程是我推出第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第25讲:批量删除数据库中指定记录
第二十五讲 工作表中提供的数据在数据表中批量删除
大家好,我们今日继续讲解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实践经验,全部浓缩在下面的各个教程中:
数据库
文章转载自
VBA语言专家
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨