Compartir a través de


Eliminación de registros mediante el método Delete

Usar el método Delete marca el registro actual o un grupo de registros en un objeto Recordset para su eliminación. Si el objeto recordset no permite la eliminación de registros, se produce un error. Si está en modo de actualización inmediata, las eliminaciones se producen inmediatamente en la base de datos. Si un registro no se puede eliminar correctamente (debido a infracciones de integridad de la base de datos, por ejemplo), el registro permanecerá en modo de edición después de la llamada a Update. Esto significa que debe cancelar la actualización mediante CancelUpdate antes de mover el registro actual (por ejemplo, mediante Close, Moveo NextRecordset).

Si está en modo de actualización por lotes, los registros se marcan para su eliminación de la memoria caché y la eliminación real se produce cuando se llama al método UpdateBatch. (Para ver los registros eliminados, establezca la propiedad Filter en adFilterAffectedRecords después de que se llame a Delete).

Si se intenta recuperar los valores de campo del registro eliminado, se genera un error. Después de eliminar el registro actual, el registro eliminado permanece activo hasta que se mueve a otro registro. Una vez que usted se aleja del registro eliminado, ya no es accesible.

Si anida eliminaciones en una transacción, puede recuperar los registros eliminados utilizando el método RollbackTrans. Si está en modo de actualización por lotes, puede cancelar una eliminación pendiente o un grupo de eliminaciones pendientes mediante el método CancelBatch.

Si se produce un error en el intento de eliminar registros debido a un conflicto con los datos subyacentes (por ejemplo, otro usuario ya ha eliminado un registro), el proveedor devuelve advertencias a la colección Errores pero no detiene la ejecución del programa. Un error en tiempo de ejecución solo se produce si hay conflictos en todos los registros solicitados.

Si se establece la propiedad dinámica Tabla Única y el Recordset es el resultado de ejecutar una operación JOIN en varias tablas, el método Delete eliminará filas solo de la tabla especificada en la propiedad Tabla Única.

El método Delete toma un argumento opcional que permite especificar qué registros se ven afectados por la operación Delete. Los únicos valores válidos para este argumento son las constantes enumeradas de ADO AffectEnum:

  • adAffectCurrent Afecta solo al registro actual.

  • adAffectGroup Afecta solo a los registros que satisfacen la configuración actual de la propiedad Filter. La propiedad Filter debe establecerse en un valor de FilterGroupEnum o en una matriz de Bookmarks para usar esta opción.

En el siguiente código se muestra un ejemplo de cómo especificar adAffectGroup al llamar al método Delete . En este ejemplo se agregan algunos registros al recordset de ejemplo y se actualiza la base de datos. A continuación, filtra el Recordset mediante el adFilterAffectedRecords constante enumerada del filtro, que deja solo los registros recién agregados visibles en el objeto Recordset de . Finally, llama al método Delete y especifica que se deben eliminar todos los registros que cumplen el valor actual de propiedad Filter (los nuevos registros).

'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