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
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
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
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
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
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.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de