access表中删除姓王的职工记录_利用VBA,把工作表中不存在的记录在数据表中批量删除...

bc5df6096bff070bd34aaf02fa0702c4.png

大家好,我们今日继续讲解VBA数据库解决方案的第26讲内容:利用VBA,把工作表中不存在的记录在数据表中批量删除。在前两讲中,我们讲了根据工作表的数据删除数据表数据的方法,大家要在工作中多利用,很多的知识点是非常灵活的,当你一旦利用了这些方法,工作中的数据处理就会得心应手,效率也会大大的提高,知识是用来利用的,VBA的每个知识点,利用好了都会收到很好的效果.

我们今天讲的内容是上面两讲内容的延伸:在处理数据的时候,我们往往会遇到很多情况,其中最常见的是数据的核对,比如我们的数据库中有很多的数据,是否准确呢?我们要定期核对.核对最基本的方法是导出数据,和现场逐一核对,然后在EXCEL表格中做成标识,没有的删除,这个时候如何把数据表中的数据也同步处理呢?今日我们需要解决的就是这个问题。

实例:如下的工作表数据,和数据库中相应的数据不是完全一致的,数据库中的数据肯定是比数据表中的数据多,要把数据库中多余的数据一次性删除.

d973c7d7f8d7ad6081eaba6ef2120e25.png

该怎么处理呢?为了在之后的运行过程中验证数据,我们先把数据表中的数据导出看一下:

a787bcdf7b65a712538208aec475317e.png

我们发现在数据库中多余的数据是100020。下面我们着手解决。代码:

Sub mynzCreateDataTable_4() '第26讲 工作表不存在,数据表中纯在的多余记录记录删除

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 NOT 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

代码截图:

9a9cc8793f18a7d49f1a46222e6ae262.png

代码讲解:

1 strWhere = " WHERE NOT 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 NOT EXISTS(SELECT * FROM [Excel 12.0;Database=" & ThisWorkbook.FullName & "].[" & ActiveSheet.Name & "$" _

& Range("a1").CurrentRegion.Address(0, 0) & "] WHERE 员工编号=" & strTable & ".员工编号)"

打开记录后然后删除。

下面我们看运行的效果,首先提示删除前的的记录数:

495d3cf1fe4c9f84fcc8f8fe0a533282.png

然后提示删除的记录数:

e211c63c308fe948ba8ab4004279a6eb.png

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

533f44080c3e623cdc8fd06015b3d7fc.png

我们再次显示数据库中记录:

752e1a253e37a201611bf93d8d2baef2.png

今日内容回向:

1 如何做到工作表和数据表数据的统一?

2 上述数据的处理是否还有其他的方案?

《VBA代码解决方案》系列电子书,是我将一些非常实用的VBA内容结集成册,PDF格式文件,朋友们可以从中查找到你想要解决问题的思路和方法,可以复制文中的VBA代码直接使用。有需要的朋友微信联络我NZ9668。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值