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 mehr zu einem gelöschten Datensatz zurückkehren können, nachdem Sie ihn verlassen haben.

Wenn Sie versuchen, auf einen Datensatz zuzugreifen, nachdem Sie ihn aus einem Recordset vom Typ „Tabelle“ gelöscht haben, wird Fehler 3167 angezeigt: „Datensatz wurde gelöscht“. Bei einem Dynaset wird Fehler 3021 angezeigt: „Kein aktueller Datensatz“.

Wenn ein Recordset-Klon am gelöschten Datensatz positioniert ist und Sie versuchen, dessen Wert zu lesen, wird Fehler 3167 unabhängig vom Typ des Recordset-Objekts angezeigt. Versuche, mithilfe eines Lesezeichens zu einem gelöschten Datensatz zu wechseln, führen ebenfalls zur Anzeige von Fehler 3167.

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.