Pregunta

Estoy manteniendo un acceso multiusuario 2000 DB vinculado a una base de datos MSSQL2000, no escrito por mí.

El diseño de base de datos es muy pobre, por lo que tendrá que soportar conmigo.

En el formulario 'Cliente' hay un campo 'Customer_ID' que por defecto tiene que obtener el siguiente disponible ID de cliente, pero el usuario tiene la opción de anular esta elección con un ID de cliente existente.

Ahora, el campo Customer_ID no es el PK de la tabla de clientes. Tampoco es único.

Si un cliente llama dos veces para enviar una tarea, la tabla tendrá dos registros, cada uno con la misma información de los clientes, y el mismo ID de cliente.

Si un usuario crea un nuevo billete, Acceso realiza una búsqueda rápida para la siguiente identificación de cliente y lo llena. Pero no se guarda el registro. Obviamente un problema -. Dos usuarios editar tiene que llevar un registro de trabajo de los demás para que no engañan a un ID de cliente

Así que quiero modificar el botón "nuevo registro" por lo que ahorra el billete justo después de la creación de uno nuevo.

El problema es que cuando pruebo el cambio, me sale "Este registro ha sido cambiado por otro usuario desde que empezó a editarlo".

Sin duda no hay otros usuarios en la base de datos. El 'otro usuario' presumiblemente fue mi obligó Guardar.

¿Alguna idea?

¿Fue útil?

Solución

Tome un vistazo a su tabla vinculada de SQL Server 2000. ¿Tiene un campo que contiene el tipo de datos de bits? El acceso le dará este mensaje de error en un escenario tabla vinculada si tiene un campo de bits que no tiene un valor por defecto .

Puede que no sea lo que está mal en su caso, pero yo he experimentado la misma en una base de datos Access 2007 y rastreado el problema a un mapa de bits con ningún valor predeterminado.

Otros consejos

He visto este comportamiento antes y esto lo fijó para mí:

Trate de añadir un campo de marca de hora a la mesa (sólo tiene que añadir este campo y actualizar las tablas vinculadas. No es necesario llenar este campo con cualquier tipo de datos).

El error que se produce por lo general ocurre cuando:

  1. se edita un registro en un formulario y el formulario está sucia (es decir, no cambios guardados),

y

  1. ejecuta código que utiliza DAO o ADO para ejecutar SQL para actualizar el mismo registro.

Para Jet, eso es dos "usuarios", porque se trata de dos operaciones de edición diferentes. La tabla subyacente ha sido actualizado por la actualización de SQL, mientras que los datos del buffer de forma ya está fuera de fecha.

La solución habitual es forzar una parada antes de ejecutar la actualización SQL:

  If Me.Dirty Then
     Me.Dirty = False
  End If
  [run your SQL update here]

Sin embargo, si usted está utilizando formas de editar el registro, que debe hacer todos los cambios en la forma, en lugar de recurrir a SQL para hacer la actualización.

La situación que describe con la generación de su propia secuencia que se debe hacer de esta manera:

  1. usuario pulsa el botón Nuevo registro.

  2. calc siguiente valor de secuencia y almacenarlo en una variable.

  3. insertar un nuevo registro con ese valor a través de una secuencia de SQL INSERT.

4a. si el formulario está destinado a todos los registros de la tabla, volver a consultar el formulario de edición de datos (suponiendo que el botón Nuevo registro está en la forma en que los usuarios editar los datos), y el uso de la navegación marcador para mover al nuevo registro con el valor de secuencia que se almacena en la variable en el paso 2.

4b. Si su forma es no obligado a todos los registros (ya que no debe ser si se trata de una base de datos bien diseñada), que acaba de cambiar el origen del registro de la forma de cargar sólo el registro nuevo.

Otra alternativa es evitar el INSERT de SQL y nueva consulta (o restablecer el origen del registro) y simplemente añadir un nuevo registro en la forma existente, establecer el campo de secuencia con el nuevo valor e inmediatamente guardar el registro.

El punto clave es que para que esto funcione en un entorno multi-usuario, el registro tiene que ser guardado tan pronto como el valor de secuencia se asigna a ella - no se puede dejar el registro colgando por ahí guardado, porque eso significa que el valor de secuencia idéntica está disponible para otros usuarios, lo que simplemente está pidiendo un desastre.

Esta es una vieja pregunta, que me he encontrado en Google, por lo que presentará mi respuesta.

En el controlador de ODBC, asegúrese de activar versiones de filas. Si la tabla ya está en Access, tendrá que dejarlo de lado y re-enlace a la tabla de origen.

Usted debe ser capaz de decir si tiene versiones de filas activado porque Access debe agregar una columna a la tabla llamada xmin.

Me gustaría mantener un seguimiento de si el usuario ha anulado la nueva customer_id con un valor propio. Si no lo han hecho, a continuación, su aplicación debe ser capaz de verificar un duplicado justo antes de guardar y simplemente auto-incremento de nuevo, y el usuario no importaría tomar el valor predeterminado. Quizás algún indicador para el usuario de que tuviera que elegir automáticamente un valor diferente.

también tenía el mismo problema. Yo estaba tratando de actualizar en una tabla utilizando Spring MVC y de hibernación. En mi caso, la columna de versión de la tabla contiene un valor de más de 1 (es decir, 3), sin embargo la información de actualización en mi consulta de actualización tuvo valor de la versión 1.

Nuestros problemas fue que el extremo frontal de acceso estaba tratando de salvar un int (sí / no) en un campo de bits mssql (0/1). Cambio de la base de datos de MSSQL a int campos funcionó de maravilla.

Yo sólo encontré con otra situación que genera este error. En una tabla de MySQL que tenía dos columnas de fecha, que inicialmente habían valor por defecto '0000-00-00'. Más tarde se cambió por defecto NULL pero muchas filas mantuvo el valor '0000-00-00'. Tuve que reiniciar manualmente los valores NULL para detener el error.

Se tomó mucho tiempo para averiguar lo que estaba trigering el error, HTH otra persona.

Este error también puede ser lanzado si la tabla de SQL Server contiene una columna datetime2 (en mi caso con el valor por defecto de sysdatetime ()). Cambiar el tipo de datos de nuevo a current_timestamp predeterminado de fecha y hora se detiene el error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top