Solución:
(Supongo que debería poner mis comentarios en una publicación, ya que en realidad estoy respondiendo la pregunta)
La razón por la que recibe el mensaje de conflicto de escritura es porque ha creado un conflicto de escritura al editar el registro a través del formulario y mediante el procedimiento almacenado. Para evitar el error, simplemente guarde el registro en el formulario antes de ejecutar el procedimiento almacenado. De su fragmento de código publicado anteriormente, debería ser:
Me.Dirty = False
cmd.Execute , , adCmdStoredProc
Este es un error de acceso común y se produce al intentar editar los datos a través de un formulario vinculado y mediante actualizaciones directas de SQL. Debe guardar el búfer de edición del formulario antes de actualizar el mismo registro a través de SQL.
En otras palabras, debe estar agradecido de que el mensaje de error esté sucediendo, porque de lo contrario, perdería uno u otro de los cambios.
Sin embargo, cuestiono el diseño. Si tiene el registro abierto en un formulario enlazado, realice las ediciones en los datos cargados en el formulario, en lugar de ejecutar SQL para actualizarlo. No estoy seguro de por qué necesita un procedimiento almacenado para realizar cambios en un registro que ya ha editado en un formulario; me parece un error de diseño (incluso si la solución es bastante simple).
Tuve un problema similar.
Ejemplo:
Digamos que el registro tiene un campo aForm!text = "Hello"
.
Si el usuario hace clic en un botón, se ejecuta el código VBA donde
aForm!text = "Hello World!"
Cuando cierro el registro, aparece el mensaje de error “Este registro ha sido cambiado …”
Solución:
Si actualiza el formulario por aForm.Refresh
y aForm.Requery
puede evitar el conflicto de escritura.
Tengo un formulario de acceso vinculado a una base de datos SQL de back-end. Un desencadenador en una tabla vinculada a un subformulario actualiza un campo en el formulario. Si edito el mismo registro en el formulario después de haber cambiado los valores en el subformulario, aparece el mensaje de error “Conflicto de escritura. Este registro ha sido cambiado …”.
El campo que fue actualizado por el activador no se puede cambiar en el formulario directamente, por lo que siempre está bien seleccionar ‘Guardar registro’, pero no pude averiguar cómo seleccionar ‘Guardar registro’ automáticamente.
Como han dicho otros, la forma de evitar el error es volver a consultar el formulario antes de editar el registro, pero eso hace que la experiencia del usuario sea menos fluida.
Finalmente encontré una solución:
En el módulo de clase del formulario ingrese:
Private Sub Form_Error (DataErr como entero, respuesta como entero)
If DataErr = 7787 Then
Response = acDataErrContinue
Me.Recordset.MovePrevious
Me.Recordset.MoveNext
End If
End Sub
He pasado mucho tiempo buscando una solución; espero que ayude a alguien más.