一张数据表如何删除多余的字段(在数据表定向批量删除数据)
一张数据表如何删除多余的字段(在数据表定向批量删除数据)代码:我们发现在数据库中多余的数据是100036、100040。下面我们着手解决。我们今天讲的内容是上面两讲内容的延伸:在处理数据的时候 我们往往会遇到很多情况 其中最常见的是数据的核对 比如我们的数据库中有很多的数据 是否准确呢?我们要定期核对.核对最基本的方法是导出数据 和现场逐一核对 然后在EXCEL表格中做成标识 没有的删除 这个时候如何把数据表中的数据也同步处理呢?今日我们需要解决的就是这个问题。实例:如下的工作表数据 和数据库中相应的数据不是完全一致的 数据库中的数据肯定是比数据表中的数据多 要把数据库中多余的数据一次性删除.该怎么处理呢?为了在之后的运行过程中验证数据 我们先把数据表中的数据导出看一下:
【分享成果,随喜正能量】苦难,是每个人的必经之路,而吃苦,也是不可避免的。有些苦是被动受的,有些苦是主动吃的。主动吃的苦,不是真正的苦,被动吃的苦,才是真正的苦。人这一辈子,无论什么事情,被动做和主动做是不同的。主动吃苦,心甘情愿有毅力,被动吃苦,敷衍了事会放弃。如果吃不了自律的苦,最后必然要吃平庸的苦,唯有主动吃苦,坚持自律的人,才能靠毅力和勇气赢得好成绩。
《VBA数据库解决方案》教程是我推出第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第26讲:在数据表定向批量删除数据
第二十六讲 工作表中不存在的数据在数据表中批量删除大家好 我们今日继续讲解VBA数据库解决方案的第26讲内容:利用VBA,把工作表中不存在的记录在数据表中批量删除。在前两讲中 我们讲了根据工作表的数据删除数据表数据的方法 大家要在工作中多利用 很多的知识点是非常灵活的 当你一旦利用了这些方法 工作中的数据处理就会得心应手 效率也会大大的提高 知识是用来利用的 VBA的每个知识点 利用好了都会收到很好的效果.
1 应用场景的具体分析我们今天讲的内容是上面两讲内容的延伸:在处理数据的时候 我们往往会遇到很多情况 其中最常见的是数据的核对 比如我们的数据库中有很多的数据 是否准确呢?我们要定期核对.核对最基本的方法是导出数据 和现场逐一核对 然后在EXCEL表格中做成标识 没有的删除 这个时候如何把数据表中的数据也同步处理呢?今日我们需要解决的就是这个问题。
实例:如下的工作表数据 和数据库中相应的数据不是完全一致的 数据库中的数据肯定是比数据表中的数据多 要把数据库中多余的数据一次性删除.
该怎么处理呢?为了在之后的运行过程中验证数据 我们先把数据表中的数据导出看一下:
我们发现在数据库中多余的数据是100036、100040。下面我们着手解决。
2 删除工作表不存在,数据表中存在多余记录的代码及代码解读代码:
Sub mynz_26() '第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
代码截图:
代码讲解:
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 & ".员工编号)"
打开记录后然后删除。对于这种连接方式,我在后续的讲解中会的讲到,
下面我们看运行的效果,首先提示删除前的的记录数:
然后提示删除的记录数:
最后提示删除后的的记录数:
我们再次显示数据库中记录:
今日内容回向:
1 如何做到工作表和数据表数据的统一?
2 上述数据的处理是否还有其他的方案?
我20多年的VBA实践经验,全部浓缩在下面的各个教程中: