excel学习库

excel表格_excel函数公式大全_execl从入门到精通

在数据库中批量删除指定记录的方法

大家好,我们今日继续讲解VBA数据库解决方案的第25讲内容:利用VBA,把工作表中提供的数据在数据表中批量删除的方法。在上一讲中,我们讲了实现在数据表中删除记录的一般方法,这种方法可以对重复的数据进行处理,但实际的情况是,我们的数据记录很多时候是没有重复的,而且如果数据量很大,该怎么处理呢?今日我们就讲解如何在记录集中批量删除给定记录的方法。 实例:我们有一个员工的信息表,导出的数据如下:在工作实际中我们需要删除其中的100014,100015,100017,100018,的记录,当然还可以更多,如下表格是需要在数据库中删除的数据信息:也就是说我们要删除的数据中是以员工编号为索引的记录,这个时候需要如何处理?代码该如何写呢?如果仍采用上讲的办法也是可以的,但今天我们将介绍一种新的方法。代码如下: Sub mynzCreateDataTable_3() '第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的工作表?

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接