Servidor de Access se bloquea

Tengo en mi empresa una base de datos dividida, de la que varios operarios consultan y escriben datos. Resulta que a veces se bloquea el servidor y aparece este mensaje:

¿Alguien sabe porque ocurre esto a veces?

Para repararla, tengo que copiar el archivo .mdb y el que genera cuando se abre, el archivo .laccdb y compactarlos en otra carpeta.

Algunos usuarios, tienen portátiles con dock station conectada por cable, puede ser que dejen el programa abierto y cuando quitan el portátil del dock como cambia de IP y se conecta por wifi, ¿se bloquee por eso?

1 respuesta

Respuesta
1

Es complicado saber el motivo exacto, pero a mi me pasaba y te explico el porqué. Igual es el mismo caso.

Si tu trabajas con una BDD en la que los formularios y sus campos están vinculados a una tabla, cuando un usuario entra en un registro éste queda bloqueado hasta que sale de él, pero no solamente el registro en sí, sino toda la página de datos a la que pertenece.

Cuando otro usuario intenta editar un registro que está en esta misma página de datos, no puede hacerlo y su operación se queda en cola.

Generalmente, los servidores tienen un tiempo máximo de espera (time-out) a partir del cual desechan las operaciones en cola y generan un mensaje de aviso. Pero yo me había encontrado en situaciones en las que en vez de eso, el servidor se colapsaba y me dejaba la base de datos hecha unos zorros.

El problema era que los usuarios no eran conscientes de que estaban bloqueando páginas de datos y estando situados en un registro, pasaban a hacer otras cosas o se iban a desayunar.

Contacté con el servicio técnico de Microsoft y me aconsejaron que, para un entorno multi-usuario, trabajara con formularios independientes (sin una tabla subyacente) y que el acceso a datos lo hiciera con vba una vez el usuario daba el OK a la modificación del registro en el que estaba trabajando.

Lo hice así y el problema desapareció.

No se si éste puede ser tu caso ni si están familiarizado con el vba

Si necesitas más ayuda me lo dices

Hola, resulta que esta base de datos se emplea para que los operarios metan todas las incidencias de la fabrica, luego esos datos los revisa su jefe y cambia algún dato si es necesario. Todos los datos se almacenan en una misma tabla que es la que los jefes consultan como le corresponde a cada uno haciendo filtros en los criterios.

Como puedo hacer lo que me dices para que cuando habran un formulario y vean un registro no lo haga con los datos de esa tabla?

Cada jefe solo ve los datos de su departamento y el jefe superior puede ver todos.

Yo soy quien la ha diseñado en programación y ha funcionado bien hasta hace poco, que la han empezado a usar otras personas con dock y que de vez en cuando sacan sus portátiles del dock.

Como puedo hacerlo por vba? algo se pero es muy poco.

Gracias.

La idea es la siguiente:

La selección de los registros que corresponden a cada supervisor mediante filtros, lo puedes hacer de la misma forma, pero asegúrate que el origen de los datos es un snapshot (sólo lectura) y así no trabajas realmente contra la tabla si no contra una imagen, lo que no genera ningún bloqueo.

Supongo que cuando quieren modificar algún registro lo deben cargar en un formulario que contenga todos los campos de la tabla.

Este formulario debería ser independiente. Lo aconsejable es que el nombre de los controles sea el mismo que el nombre de los campos de la tabla, pero el orígen de los datos debe estar vacio.

Entonces, con una pequeña función de VBA cargas los datos de la tabla en cada control del formulario (no se cargan automáticamente puesto que no hemos puesto ninguna vinculación del formulario con ninguna tabla).

Entonces, lo que habrás cargado en el formulario es una foto del registro, sin que éste esté realmente cargado, por lo que no se produce el bloqueo de páginas de datos.

Una vez el supervisor ha hecho las modificaciones y le da al OK (un botón de comando), lanzaremos otra pequeña función que coge los datos del formulario y actualiza la tabla. Como la ejecución de está función dura milisegundos, los bloqueos son prácticamente imperceptibles.

Una vez hecha la actualización de la tabla, lanzas otro código que limpie el formulario o bien lo cierre para poder hacer la selección de otro registro.

No se si me he explicado muy bien.

Para el código de VBA, si tienes claro que quieres hacer esto, ya te pasaría maquetas para que lo puedas ajustar a los nombres de tus tablas y tus campos.

Buenos días, si más o menos te entiendo como hacerlo.

Ahora los jefes que las revisan, tienen varias pantallas entre una de ellas son las incidencias no revisadas. Esa pantalla la abren y van pasando conforme las van revisando. Creo que lo que planteas es buena opción ya que así no se bloquean los registros.

Sino es mucha molestia, pásame alguna maqueta y la voy probando.

Muchas gracias.

Voy a intentar crearte una pequeña BDD con un ejemplo de un par de tablas y un par de formularios.

Pero no te lo puedo hacer hoy.

¿Puedes esperarte un par de días?

Si me pasas tu correo te la enviaré en un e-mail

Tengo la BDD de ejemplo lista.

¿Te sigue interesando?

Buenas noches, perdona es que estoy de vacaciones ya pero si que me sigue interesando para cuando vuelva poder hacerlo así como dices.

Te paso mi correo:

[email protected]

Muchas gracias y perdona la tardanza, no había visto el aviso de que me habias contestado.

Te mando la BDD por correo

Cuando la abras verás que tiene 3 formularios: Uno se llama Revisión y es donde puedes inspeccionar y filtrar los registros existentes en la base de datos.

El segundo se llama SubRevisión y es un subformulario del anterior

El tercero se llama Trabajos y éste es precisamente el formulario independiente que contiene las rutinas de VBA para cargar y guardar los registros.

En el formulario Revisión, si haces un click sobre cualquier registro, lo seleccionas. Y si haces doble click, se abre el formulario Trabajos en el que se carga el registro que quieres editar.

En cuanto a las tablas que usa la BDD verás que son residentes, pero funcionaría igual con tablas vinculadas.

Para cualquier duda me lo dices.

Por cierto, en el propio código VBA están las explicaciones de lo que hace cada paso de programa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas