可以使用 Delete 方法删除表或动态集类型的 Recordset 对象中的现有记录。 不能从快照类型的 Recordset 对象中删除记录。 下面的代码示例删除“发货人”表中的所有重复记录。

Sub DeleteDuplicateShippers() 
Dim dbsNorthwind As DAO.Database 
Dim rstShippers As DAO.Recordset 
Dim strSQL As String 
Dim strName As String 
On Error GoTo ErrorHandler 
   Set dbsNorthwind = CurrentDb 
   strSQL = "SELECT * FROM Shippers ORDER BY CompanyName, ShipperID" 
   Set rstShippers = dbsNorthwind.OpenRecordset(strSQL, dbOpenDynaset) 
   ' If no records in Shippers table, exit. 
   If rstShippers.EOF Then Exit Sub 
   strName = rstShippers![CompanyName] 
   rstShippers.MoveNext 
   Do Until rstShippers.EOF 
      If rstShippers![CompanyName] = strName Then 
         rstShippers.Delete 
         strName = rstShippers![CompanyName] 
      End If 
      rstShippers.MoveNext 
Exit Sub 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Function

使用 Delete 方法时,Access 数据库引擎会立即删除当前记录,而不会发出任何警告或提示。 删除记录不会自动导致下一条记录成为当前记录;若要移动到下一条记录,必须使用 MoveNext 方法。 请注意,移出已删除的记录后,无法移回该记录。

如果在删除表类型的 Recordset 上的记录后尝试访问该记录,将看到错误 3167“记录已删除”。在动态集上,你将看到错误 3021“无当前记录”。

如果将 Recordset 克隆定位在已删除的记录上,并且尝试读取其值,则无论 Recordset 对象的类型如何,都会看到错误 3167。 尝试使用书签移动到已删除的记录也会导致错误 3167。

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。