Löschen von Datensätzen mit der Delete-Methode

Mit der Delete-Methode wird der aktuelle Datensatz oder eine Gruppe von Datensätzen in einem Recordset-Objekt zum Löschen markiert. Wenn das Recordset-Objekt keine Datensatzlöschung erlaubt, tritt ein Fehler auf. Wenn Sie sich im unmittelbaren Updatemodus befinden, treten Löschungen sofort in der Datenbank auf. Wenn ein Datensatz nicht erfolgreich gelöscht werden kann (z. B. aufgrund von Datenbankintegritätsverletzungen), bleibt der Datensatz im Bearbeitungsmodus nach dem Aufruf von Update erhalten. Dies bedeutet, dass Sie das Update mithilfe von CancelUpdate abbrechen müssen, bevor Sie den aktuellen Datensatz verschieben (z. B. mithilfe von Close, Move oder NextRecordset).

Wenn Sie im Batchupdatemodus sind, werden die Datensätze für das Löschen aus dem Cache markiert und die tatsächliche Löschung erfolgt, wenn Sie die UpdateBatch-Methode aufrufen. (Um die gelöschten Datensätze anzuzeigen, legen Sie die Filter-Eigenschaft auf adFilterAffectedRecords nach dem Aufruf von Delete fest.)

Beim Versuch, Feldwerte aus dem gelöschten Datensatz abzurufen, wird ein Fehler generiert. Nach dem Löschen des aktuellen Datensatzes bleibt der gelöschte Datensatz aktuell, bis Sie zu einem anderen Datensatz wechseln. Sobald Sie vom gelöschten Datensatz entfernt sind, ist sie nicht mehr zugänglich.

Wenn Sie Löschungen in einer Transaktion verschachteln, können Sie gelöschte Datensätze mithilfe der RollbackTrans-Methode wiederherstellen. Wenn Sie im Batchaktualisierungsmodus sind, können Sie eine ausstehende Löschung oder Gruppe ausstehender Löschungen mithilfe der CancelBatch-Methode abbrechen.

Wenn der Versuch, Datensätze zu löschen, aufgrund eines Konflikts mit den zugrunde liegenden Daten fehlschlägt (z. B. wurde ein Datensatz bereits von einem anderen Benutzer gelöscht), gibt der Anbieter Warnungen an die Fehlersammlung zurück, aber die Programmausführung wird nicht beendet. Ein Laufzeitfehler tritt nur auf, wenn konflikte auf allen angeforderten Datensätzen vorhanden sind.

Wenn die dynamische Eigenschaft " Unique Table " festgelegt ist und das Recordset das Ergebnis der Ausführung eines JOIN-Vorgangs in mehreren Tabellen ist, löscht die Delete-Methode Zeilen nur aus der Tabelle, die in der Unique Table-Eigenschaft benannt ist.

Die Delete-Methode verwendet ein optionales Argument, mit dem Sie angeben können, welche Datensätze vom Delete-Vorgang betroffen sind. Die einzigen gültigen Werte für dieses Argument sind eine der folgenden ADO AffectEnum-Aufzählungskonstanten:

  • adAffectCurrent Betrifft nur den aktuellen Datensatz.

  • adAffectGroup Betrifft nur Datensätze, die die aktuelle Einstellung der Filtereigenschaft erfüllen. Die Filter-Eigenschaft muss auf einen FilterGroupEnum-Wert oder ein Array von Textmarken festgelegt werden, um diese Option zu verwenden.

Der folgende Code zeigt ein Beispiel für die Angabe von adAffectGroup beim Aufrufen der Delete-Methode . In diesem Beispiel werden dem Beispiel Recordset einige Datensätze hinzugefügt und die Datenbank aktualisiert. Anschließend wird das Recordset mithilfe der adFilterAffectedRecords-Filterkonstante gefiltert, die nur die neu hinzugefügten Datensätze im Recordset sichtbar lässt. Schließlich ruft sie die Delete-Methode auf und gibt an, dass alle Datensätze, die die aktuelle Einstellung der Filtereigenschaft (die neuen Datensätze) erfüllen, gelöscht werden sollen.

'BeginDeleteGroup  
    'add some bogus records  
    With objRs  
        For i = 0 To 8  
            .AddNew  
            .Fields("CompanyName") = "Shipper Number " & i + 1  
            .Fields("Phone") = "(425) 555-000" & (i + 1)  
            .Update  
        Next i  
  
        ' update  
        .UpdateBatch  
  
        'filter on newly added records  
        .Filter = adFilterAffectedRecords  
        Debug.Print "Deleting the " & .RecordCount & _  
                    " records you just added."  
  
        'delete the newly added bogus records  
        .Delete adAffectGroup  
        .Filter = adFilterNone  
        Debug.Print .RecordCount & " records remain."  
    End With  
'EndDeleteGroup