设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2982|回复: 4
打印 上一主题 下一主题

[ADO/DAO] 问:用VBA代码删除多笔重复记录的疑惑

[复制链接]
跳转到指定楼层
1#
发表于 2010-7-22 20:49:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
删除多笔重复记录,只保留一笔记录,我分别写了三段代码,但只有二段代码可行,不明其理,上来问问各位。。。
两个Recodset对象全部用DAO   ‘行不通,无法删除,但程序可正常运行
Public Sub AA()
   Dim I As Integer
   Dim N As Integer
   Dim m As DAO.Recordset
   Dim RS As DAO.Recordset
   Set RS = CurrentDb.OpenRecordset("唯一")
   Do Until RS.EOF
      Set m = CurrentDb.OpenRecordset("SELECT * FROM 物料表 where 物料编码='" & RS("物料编码") & "'")
      If m.RecordCount > 1 Then
         For I = 1 To m.RecordCount - 1
             m.Delete
             N = N + 1
             m.MoveNext
         Next
      End If
      RS.MoveNext
   Loop
   MsgBox "共删除" & N & "笔重复记录"
End Sub
两个Recodset对象分别用DAO/ADO   
Public Sub BB()           '可以正常删除,程序可正常运行
   Dim I As Integer
   Dim N As Integer
   Dim m As ADODB.Recordset
   Set m = New ADODB.Recordset
   Dim RS As DAO.Recordset
   Set RS = CurrentDb.OpenRecordset("唯一")
   Do Until RS.EOF
      m.Open "SELECT * FROM 物料表 where 物料编码='" & RS("物料编码") & "'", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
      If m.RecordCount > 1 Then
         For I = 1 To m.RecordCount - 1
             m.Delete
             N = N + 1
             m.MoveNext
         Next
      End If
      m.Close
      RS.MoveNext
   Loop
   MsgBox "共删除" & N & "笔重复记录"
End Sub
两个Recodset对象全部用ADO
Public Sub CC()                   '可以正常删除,程序可正常运行
   Dim I As Integer
   Dim N As Integer
   Dim m As ADODB.Recordset
   Set m = New ADODB.Recordset
   Dim RS As ADODB.Recordset
   Set RS = New ADODB.Recordset
   RS.Open "SELECT DISTINCT 物料编码 FROM 物料表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
   Do Until RS.EOF
      m.Open "SELECT * FROM 物料表 where 物料编码='" & RS("物料编码") & "'", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
      If m.RecordCount > 1 Then
         For I = 1 To m.RecordCount - 1
             m.Delete
             N = N + 1
             m.MoveNext
         Next
      End If
      m.Close
      RS.MoveNext
   Loop
   MsgBox "共删除" & N & "笔重复记录"
End Sub
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2010-7-22 22:51:10 | 只看该作者
更简单的办法: 打开一个对【物料编码】字段排序的记录集,然后循环记录,如果当前物料编码等于前一条记录的物料编码则删除之
  1. Dim rst As DAO.Recordset
  2. Dim strTemp As String

  3. Set rst=CurrentDb.OpenRecordset("SELECT * FROM 物料表 ORDER BY 物料编码")
  4. If rst.RecordCount>0 Then
  5.     rst.MoveFirst
  6.     strTemp=rst!物料编码
  7.     rst.MoveNext
  8.     Do Until rst.EOF
  9.         If rst!物料编码=strTemp Then
  10.             rst.Delete
  11.         Else
  12.             strTemp=rst!物料编码
  13.         End If
  14.         rst.MoveNext
  15.     Loop
  16. End If
  17. rst.Close
  18. Set rst=Nothing
复制代码

3#
 楼主| 发表于 2010-7-23 06:22:52 | 只看该作者
谢谢红尘老大的指点,受益良多......
4#
发表于 2010-7-23 08:37:48 | 只看该作者
两个Recodset对象全部用DAO   ‘行不通,无法删除,但程序可正常运行
Public Sub AA()
   Dim I As Integer
   Dim N As Integer
   Dim m As DAO.Recordset
   Dim RS As DAO.Recordset
   Set RS = CurrentDb.OpenRecordset("唯一")
   Do Until RS.EOF
      Set m = CurrentDb.OpenRecordset("SELECT * FROM 物料表 where 物料编码='" & RS("物料编码") & "'")
      If m.RecordCount > 1 Then
         For I = 1 To m.RecordCount - 1
             m.Delete
             N = N + 1
             m.MoveNext
         Next
      End If
      RS.MoveNext
   Loop
   MsgBox "共删除" & N & "笔重复记录"
End Sub
我也想知道上面代码错在什么地方
5#
发表于 2010-7-23 09:57:34 | 只看该作者
学习学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-1 20:29 , Processed in 0.097448 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表