usar una operación operacion microsoft error engine debe data consulta actualizable sql vba ms-access excel-vba access-vba

operacion - La operación debe usar una consulta/SQL actualizable-VBA



microsoft jet database engine error 80004005 la operación debe usar una consulta actualizable (2)

Intento crear una macro muy dinámica que actualice diferentes tablas en una Base de Datos, dependiendo de lo que el usuario elija. Cada tabla tiene, por supuesto, distintos títulos e información. Tengo un problema con la actualización (cuando el usuario agrega nuevos registros a una Tabla anterior). Esto es parte del código, el problema es cuando llega al ".update", obtengo el error "La operación debe usar una consulta actualizable".

Dim DBCnn As ADODB.Connection Dim RecSet As ADODB.Recordset Dim sQRY As String Dim FilePath, Titulo, Tabla As String Dim LastRow, LastColumn, TotalRecords, Id As Long Set DBCnn = New ADODB.Connection Set RecSet = New ADODB.Recordset DBCnn.Mode = adModeReadWrite DBCnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & FilePath & ";" sQRY = "SELECT * FROM Customers" & Tabla '' & " WHERE PopID = " & lngid RecSet.CursorLocation = adUseClient RecSet.Open _ Source:=sQRY, _ ActiveConnection:=DBCnn, _ CursorType:=adOpenDynaset, _ LockType:=adLockOptimistic Do While Range("A" & LastRow).Value <> "" '' repeat until first empty cell in column A With RecSet .AddNew .Fields("Id") = Range("A" & LastRow).Value .Fields("Name") = Range("B" & LastRow).Text .Fields("Age") = Range("C" & LastRow).Value .Update ''(Here''s my error) End With LastRow = LastRow + 1 Loop


Descarta esta línea:

RecSet.CursorLocation = adUseClient

O inténtalo así en su lugar:

RecSet.CursorLocation = adUseServer

Consulte la sección Comentarios en CursorLocation Property (ADO) en MSDN:

"Si la propiedad CursorLocation está establecida en adUseClient , se podrá acceder al conjunto de registros como de solo lectura y no será posible actualizar el conjunto de registros al host".


Está concatenando una cadena aquí: "SELECCIONAR * DE Clientes" y Tabla, pero no veo dónde se proporciona Tabla.

¿Has intentado ejecutar la consulta directamente en Access?
Además, ¿has intentado cambiar el cursortype todavía? http://www.w3schools.com/ado/prop_rs_cursortype.asp