Share via


No se pueden agregar registros ni eliminar registros con el método AddNew de ADO o con el método Delete

Avanzado: requiere conocimientos expertos de codificación, interoperabilidad y multiusuario.

Este artículo se aplica a una base de datos de Microsoft Access (.mdb o .accdb) y a un proyecto de Microsoft Access (.adp).

Síntomas

Al usar Objetos de datos ActiveX (ADO), si usa el método AddNew o Delete del objeto Recordset y abre el conjunto de registros con un tipo de bloqueo no especificado, puede recibir uno de los siguientes mensajes de error:

Run-time error '3251': Object or provider is not capable of performing requested operation. 

o:

Run-time error '3251':
The operation requested by the application is not supported by the provider. 

o:

Run-time error '3251':
Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype. 

Causa

De forma predeterminada, los conjuntos de registros de ADO se abren con un tipo de bloqueo adLockReadOnly, que no permite adiciones ni eliminaciones.

Solución

Para permitir adiciones y eliminaciones, abra el conjunto de registros con un tipo de bloqueo de adLockOptimistic o adLockPessimistic, como en el ejemplo de código siguiente:

Sub DelFirstRec()
   Dim rs As ADODB.Recordset
   Set rs = New ADODB.Recordset

rs.Open "Select * from TestTable", CurrentProject.Connection, _
            adOpenKeyset, adLockOptimistic
   rs.MoveFirst
   rs.Delete
   rs.Close
End Sub

NOTA Puede usar este código de ejemplo para resolver el comportamiento en la sección "Pasos para reproducir comportamiento" de este artículo.

Más información

Pasos para reproducir el comportamiento

  1. En una nueva base de datos de Access, cree la siguiente tabla y asígnele el nombre TestTable:

    Table:TestTable
    ----------------------------
    Field Name: ID
    Data Type: Autonumber
    Indexed: Yes (No Duplicates)
    
    Field Name: Name
    Data Type: Text
    
  2. Abra la nueva tabla en la vista Hoja de datos y escriba los siguientes datos de prueba:

    ID Name
    -----------------
    1 Beverages
    2 Condiments
    3 Confections
    4 Dairy
    5 Grains
    6 Meat
    7 Produce
    8 Seafood
    
  3. NOTA En el código de ejemplo de este artículo se usan objetos de datos De Microsoft ActiveX. Para que este código se ejecute correctamente, debe hacer referencia a la biblioteca microsoft ActiveX Data Objects 2.x (donde 2.x es 2.1 o posterior). Para ello, haga clic en Referencias en el menú Herramientas del Editor de Visual Basic y asegúrese de que la casilla Microsoft ActiveX Data Objects 2.x Library (Biblioteca de Microsoft ActiveX Data Objects 2.x) esté activada.

    Cree un módulo y escriba la siguiente línea en la sección Declaraciones si aún no está allí:

    Option Explicit

  4. Escriba el procedimiento siguiente:

Sub DelFirstRec()
   Dim rs As New ADODB.Recordset

rs.Open "Select * from TestTable", CurrentProject.Connection, adOpenKeyset
   rs.MoveFirst
   rs.Delete
   rs.Close
End Sub

  1. Para probar esta función, escriba la siguiente línea en la ventana Inmediato y presione ENTRAR:

    DelFirstRec

    Tenga en cuenta que recibe el mensaje de error que se menciona en la sección "Síntomas" de este artículo. Además, al comprobar la tabla, verá que no se han eliminado registros.