大家好,我们今日继续讲解VBA数据库解决方案的第26讲内容:利用VBA,把工作表中不存在的记录在数据表中批量删除。在前两讲中,我们讲了根据工作表的数据删除数据表数据的方法,大家要在工作中多利用,很多的知识点是非常灵活的,当你一旦利用了这些方法,工作中的数据处理就会得心应手,效率也会大大的提高,知识是用来利用的,VBA的每个知识点,利用好了都会收到很好的效果.
我们今天讲的内容是上面两讲内容的延伸:在处理数据的时候,我们往往会遇到很多情况,其中最常见的是数据的核对,比如我们的数据库中有很多的数据,是否准确呢?我们要定期核对.核对最基本的方法是导出数据,和现场逐一核对,然后在EXCEL表格中做成标识,没有的删除,这个时候如何把数据表中的数据也同步处理呢?今日我们需要解决的就是这个问题。
实例:如下的工作表数据,和数据库中相应的数据不是完全一致的,数据库中的数据肯定是比数据表中的数据多,要把数据库中多余的数据一次性删除.
该怎么处理呢?为了在之后的运行过程中验证数据,我们先把数据表中的数据导出看一下:
我们发现在数据库中多余的数据是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 & "条记录被删除。