B.D. Access en Red

Tengo un problema con una base de datos en red. La b.d. Original se encuentra alojada en el servidor, a esta b.d. Acceden varios clientes a la vez desde diferentes ordenadores, cada cliente tiene una b.d. Cuyos campos se encuentran vinculados a los de la b.d. Del servidor. El problema viene a la hora de crear un nuevo registro, si 2 o más usuarios dan de alta una ficha nueva al mismo tiempo se les genera el mismo número de registro y a la hora de pinchar el botón de guardado les da el mensaje de error indicando que ese registro ya existe. Algunas veces incluso se han llegado a mezclar datos de diferentes personas dentro del mismo registro.
¿Alguien sabe la manera para solucionar que distintos usuarios puedan dar de alta al mismo tiempo a personas en la b.d. Sin que existan problemas por duplicidad en el número de registro?
Respuesta
1
Es un caso relativamente común, esto debe darse porque el numero consecutivo del registro es generado por la BD, debe tener un campo de tipo autonumérico, esta practica no es muy recomendable porque se presta para replicación cuando hay concurrencia en la BD. Lo recomendable es que el campo del ID en la tabla sea solamente numérico, y el consecutivo autonumérico se genere por la aplicación (código fuente). Así cuando un usuario ingrese a la bd ya tienesu ID generado y ningún otro usuario podría tenerlo sino el numero siguiente.
Ahora mismo está configurado de tal manera que el programa, al dar de alta un nuevo usuario comprueba el código usuario del último registro y le suma 1 (que creo que más o menos es la solución que tú me propones). El problema es que puede haber 2 o 3 trabajadores que estén intentando dar de alta a un usuario en ese mismo instante y es ahí donde viene el conflicto porque se les genera exactamente el mismo número ya que, mientras no guarden los cambios en la ficha mediante un botón creado para ese efecto, ese número está disponible.
Estos trabajadores me comentan que antes nunca ocurría este conflicto, pero desde hace un tiempo ha empezado a dar este problema. Pensé en que el código se generara en el momento de guardar, pero eso es un problema si lo que estamos realizando es una actualización de datos del usuario, en ese caso no interesaría generar un nuevo código. No se si se te ocurre alguna otra manera, pero en cualquier caso muchas gracias por tu tiempo.
Bueno ahí si es un caso más delicado que requiere asistencia personalizada.
¿Me podrías decir en que lenguaje está la aplicación?, puede ser un problema con el conector de la base de datos o el runtime de la aplicación.
En primer lugar decir que la base ya me la encontré hecha por otra persona que ahora no trabaja aquí, con lo cual la estoy investigando todavía. Por lo que he podido observar para el tema del contador de registros se ha creado esta linea en SQL dentro del formulario en el campo de expediente.
Valor predeterminado: =DMáx("expediente";"usuarios")+1
Lo ideal sería que al mismo tiempo que genera esa expresión guardara el resultado en la tabla correspondiente del servidor. Al no ser así, cuando más de un trabajador pulsan el botón de agregar nuevo cliente se les genera el mismo número ya que este código de expediente aun no fue guardado en el servidor.
Pero no me especificaste el lenguaje de la aplicación. Trata de compactar y reparar la Base de datos de access como opción. ¿Y es ue la persona que trabajaba antes no te dio una inducción acerca del funcionamiento de la red y la BD?
No entiendo bien que quieres decir con lenguaje de la aplicación, la aplicación es Microsoft Access 2003 y, como ya había indicado anteriormente, en las propiedades del formulario se ha modificado lo siguiente:
Valor predeterminado: =DMáx("expediente";"usuarios")+1
Pero, que yo sepa, no se ha programado nada en Visual Basic ni nada parecido.
Las tablas están vinculadas con las del servidor mediante la opción de vincular que tiene el propio programa. Lo de compactar y reparar base de datos ya lo había probado pero sigue igual.
Ya entiendo, pues así sin ver el daño es algo difícil dar con el problema, lo ultimo que se me ocurre es qua hagas una retrospectiva y mires qué evento en particular marcó el daño en la aplicación, algo que se haya hecho en la red o en el servidor de pronto un cambio involuntario influyo en el comportamiento del programa, porque tu me dices que antes funcionaba.
Gracias por tus indicaciones, creo que finalmente revisaré bien la red porque quizás sea esa la causa ya que he observado que los datos tardan en actualizarse en el servidor. De nuevo gracias por haberme dedicado tu tiempo, un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas