快捷搜索:  汽车  科技

一张数据表如何删除多余的字段(在数据表定向批量删除数据)

一张数据表如何删除多余的字段(在数据表定向批量删除数据)代码:我们发现在数据库中多余的数据是100036、100040。下面我们着手解决。我们今天讲的内容是上面两讲内容的延伸:在处理数据的时候 我们往往会遇到很多情况 其中最常见的是数据的核对 比如我们的数据库中有很多的数据 是否准确呢?我们要定期核对.核对最基本的方法是导出数据 和现场逐一核对 然后在EXCEL表格中做成标识 没有的删除 这个时候如何把数据表中的数据也同步处理呢?今日我们需要解决的就是这个问题。实例:如下的工作表数据 和数据库中相应的数据不是完全一致的 数据库中的数据肯定是比数据表中的数据多 要把数据库中多余的数据一次性删除.该怎么处理呢?为了在之后的运行过程中验证数据 我们先把数据表中的数据导出看一下:

【分享成果,随喜正能量】苦难,是每个人的必经之路,而吃苦,也是不可避免的。有些苦是被动受的,有些苦是主动吃的。主动吃的苦,不是真正的苦,被动吃的苦,才是真正的苦。人这一辈子,无论什么事情,被动做和主动做是不同的。主动吃苦,心甘情愿有毅力,被动吃苦,敷衍了事会放弃。如果吃不了自律的苦,最后必然要吃平庸的苦,唯有主动吃苦,坚持自律的人,才能靠毅力和勇气赢得好成绩。

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

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第26讲:在数据表定向批量删除数据

一张数据表如何删除多余的字段(在数据表定向批量删除数据)(1)

第二十六讲 工作表中不存在的数据在数据表中批量删除

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

1 应用场景的具体分析

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

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

一张数据表如何删除多余的字段(在数据表定向批量删除数据)(2)

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

一张数据表如何删除多余的字段(在数据表定向批量删除数据)(3)

我们发现在数据库中多余的数据是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

代码截图:

一张数据表如何删除多余的字段(在数据表定向批量删除数据)(4)

代码讲解:

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 & ".员工编号)"

打开记录后然后删除。对于这种连接方式,我在后续的讲解中会的讲到,

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

一张数据表如何删除多余的字段(在数据表定向批量删除数据)(5)

然后提示删除的记录数:

一张数据表如何删除多余的字段(在数据表定向批量删除数据)(6)

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

一张数据表如何删除多余的字段(在数据表定向批量删除数据)(7)

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

一张数据表如何删除多余的字段(在数据表定向批量删除数据)(8)

今日内容回向:

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

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

一张数据表如何删除多余的字段(在数据表定向批量删除数据)(9)

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

一张数据表如何删除多余的字段(在数据表定向批量删除数据)(10)

猜您喜欢: