Löschen eines Datensatzes aus einem DAO-Recordset

Sie können einen vorhandenen Datensatz in einem Recordset-Objekt vom Typ „Tabelle“ oder „Dynaset“ mithilfe der Delete-Methode löschen. Aus einem Recordset-Objekt vom Typ „Momentaufnahme“ können keine Datensätze gelöscht werden. Mit dem folgenden Codebeispiel werden alle doppelten Datensätze aus der Tabelle „Shippers“ gelöscht.

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 
      Else 
         strName = rstShippers![CompanyName] 
      End If 
      rstShippers.MoveNext 
   Loop 
 
Exit Sub 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Function

Bei Verwendung der Delete-Methode löscht das Access-Datenbankmodul den aktuellen Datensatz sofort, ohne jegliche Warnung oder Eingabeaufforderung. Beim Löschen eines Datensatzes wird nicht automatisch der nächste Datensatz zum aktuellen Datensatz. Um zum nächsten Datensatz zu wechseln, müssen Sie die MoveNext-Methode verwenden. Beachten Sie, dass Sie nicht zum gelöschten Datensatz zurückkehren können, nachdem Sie ihn verlassen haben.

Wenn Sie versuchen, auf einen Datensatz zuzugreifen, nachdem Sie ihn in einem Tabellentyp-Recordset gelöscht haben, wird Fehler 3167, "Datensatz wird gelöscht" angezeigt. Bei einem Dynaset wird der Fehler 3021 "Kein aktueller Datensatz" angezeigt.

Wenn Sie einen Recordset-Klon am gelöschten Datensatz positioniert haben und versuchen, seinen Wert zu lesen, wird unabhängig vom Typ des Recordset-Objekts der Fehler 3167 angezeigt. Wenn Sie versuchen mithilfe einer Textmarke zu einem gelöschten Datensatz zu wechseln, wird Ihnen ebenfalls Fehler 3167 angezeigt.

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.