Base de datos Access se bloquea al trabajar en simultaneo

En contexto tengo una base de datos donde se ingresan datos en un formulario y este a su vez tiene un subformulario. Al inicio solo era utilizada por un usuario.

Pero ahora es usada por 4 usuarios más. Tengo una computadora principal donde tengo la base (que contiene las consultas, formulario e informes y otros objetos) y las tablas (que contiene las tablas valga la redundancia).

Y luego cuatro más donde copie la base en cada una de ellas y vincule las tablas desde la computadora principal a través de la red interna (\\Desktop-estadísticas\compuprincipal\Tablasbase.accdb.. Pero ahora presenta error o simplemente no deja ingresar datos cuando los usuarios están trabajando en simultaneo, esto en el subformulario. En el formulario todo bien. Pero al llegar al subformulario lo bloquea. Hago pruebas con tres computadoras y a mí no me da error, pero a ellos sí... No entiendo.

Busqué en internet e hice esta modificación, en la estructura del subformulario de cada máquina puse en sus propiedades en:

Bloqueos del registro: Registro modificado

Pero el error sigue.

Respuesta
1

Para trabajar en entornos compartidos, solo hay que ser cuidadoso en la programación y poco le importa si los datos están en Access o cualquier otro sistema, lo que se necesita es no bloquear las tablas y ello es fácil de lograr: aplicar la misma metodología que se aplica con los datos externos no-Access: SQL (que es un lenguaje de intercambio de datos).

Con cuatro usuarios (o con veinte) Access no debería tener problemas si se cambia el método de acceso a los datos, todo consiste en gestionar correctamente el 'problema universal' de la concurrencia.

Lo primero es que la base con las tablas compartidas NO debería ser utilizada con un usuario de consola (es lo primero que hacen las externas), pues si se abriesen las tablas para manipulación directa, el resto de los accesos a esa tabla/tablas no estaría permitido.

No niego las ventajas de que los datos sean externos (esos entornos se comportan como sistemas operativos independientes y especializados en la gestión de datos), pero su mayor ventaja suele ser el poder gestiona cantidades inmensas de datos y habrá que analizar su latencia.

Los limites de las aplicaciones no lo ponen los entornos de trabajo, lo impone el dominio de quien lo utiliza.

Al respecto de la concurrencia, solo hay que entenderla y (con las herramientas y manejo de las mismas) aplicar las reglas.

Seamos realistas: si la tabla se esta modificando (añadiendo, modificando o borrando sus datos), no lo pueden hacer al mismo tiempo varios usuarios, lo tendrán que hacer de forma consecutiva y para ello solo hay que programar el método que lo permita y cree una falsa sensación de concurrencia (algo que necesita y hace la propia CPU de la maquina).

Si bien actualmente se puede acceder a los datos 'en la nube' en cualquier parte mediante satélites, pocos cuentan el retardo que los acompaña, si es asumible, el resto nada importa.

Mis saludos para Jacinto (es un viejo conocido).

2 respuestas más de otros expertos

Respuesta
3

Brenda, permítame decirle que estas son unas de los problemas que presenta Access cuando se utiliza en entorno multiusuario con tablas vinculadas. Verifique que todos lo PC tengan la misma versión de Access para que no se lleve una sorpresa, porque se puede dañar la base de datos.

Asumo que la ruta \\Desktop-estadísticas\compuprincipal\ la ha configurado como carpeta compartida. No le recomiendo trabajar con tablas vinculadas tiene más control y seguridad si lo hace desvinculado.  Le dejo este video sobre este tema https://youtu.be/0NTqt6QVIYc 

Por qué no da un paso más adelante y pasa su base de datos a un servidor de datos, personalmente utilizo PostgreSQL el cual va bien con Access toda vez que sus controladores ODBC mantienen actualizados.

Gracias por su respuesta. Nunca he usado PostgreSQL me tocara investigar y aprender. Veré su video y trataré de entender. Y a ver como me va. 

Si le interesa enseño Access con PostgreSQL, desde la descarga, instalación, crear tablas, consultas, funciones, particiones, disparadores (trigger). Conexión a PostgreSQL, formularios vinculados y desvinculados (la mejor opción), Acceso remoto desde Access a base de datos en la nube etc. Me puede contactar en [email protected]

No comparto en parte el concepto de Enrique, Access no es el indicado para atender varios usuarios concurrentes. ¿Me pregunto cuántos programas comerciales con backend en Access hay en el mercado? Si puede manejar mejor la concurrencia y el control sobre los datos si no utiliza tablas vinculadas.

Otro detalle es que el SQL de Access es muy pobre en relación con otros gestores de bases de datos como PostgreSQL, por ejemplo, carece de funciones para el manejo de ventanas. Las funciones de ventana en PostgreSQL son un tipo de funciones analíticas que permiten realizar cálculos sobre un conjunto de filas relacionado con la fila actual, sin necesidad de agrupar los datos. A diferencia de las funciones agregadas tradicionales (como SUM(), AVG(), COUNT()), que operan sobre un grupo de filas y devuelven un solo valor, las funciones de ventana permiten calcular valores para cada fila de un conjunto, basándose en un grupo de filas determinado por una ventana (definida por una cláusula OVER()). Y que decir en la manipulación de grandes volúmenes de datos, Access en un servidor local o en Azure Cloud se cuelga y es un desastre.

Access es formidable para crear la interfaz y manipular la información por su fácil programación en VBA pero no como almacén de datos. Como anécdota hace unos días tuve la oportunidad de compartir una charla sobre el PostgreSQL y Access, con JACINTO TRILLO JAREÑO quien colaboraba antes en este foro y puede dar un concepto sobre mis conclusiones.

Que confusión con la concurrencia ¿Cómo qué no pueden modificar varios usuarios una tabla?. Lo que no puede es con el mismo registro. Complemento con esta información.

Microsoft Access

Modelo de concurrencia: Access no es un sistema de base de datos cliente-servidor, sino un sistema de base de datos basado en archivos. Esto significa que todos los usuarios acceden al mismo archivo .mdb o .accdb.

Edición concurrente:

Posible, pero con limitaciones. Access utiliza bloqueos de nivel de registro para permitir que múltiples usuarios trabajen en la base de datos simultáneamente.

Conflictos: Si dos usuarios intentan editar el mismo registro al mismo tiempo, Access puede generar conflictos. El sistema evita que un usuario sobrescriba cambios de otro.

Riesgos:
Al aumentar el número de usuarios, el rendimiento puede disminuir drásticamente.
Existe un mayor riesgo de corrupción del archivo de base de datos en entornos con muchos usuarios.

Recomendaciones:

Utilizar Access como interfaz y migrar los datos a un sistema cliente-servidor (como PostgreSQL o SQL Server).
Habilitar copias de seguridad regulares del archivo.

PostgreSQL

Modelo de concurrencia: PostgreSQL es un sistema de base de datos cliente-servidor que maneja múltiples conexiones simultáneamente.

Edición concurrente:

PostgreSQL utiliza un modelo de aislamiento transaccional basado en MVCC (Multi-Version Concurrency Control). Esto permite que múltiples usuarios trabajen simultáneamente sin bloquearse entre sí.
Si dos usuarios intentan modificar el mismo registro:
El primer usuario que confirme (COMMIT) la transacción bloquea los cambios del segundo usuario.
El segundo usuario recibe un error de conflicto (generalmente UPDATE CONFLICT) y debe manejarlo en la aplicación.

Ventajas:
Excelente manejo de concurrencia.
Soporte robusto para múltiples usuarios, incluso en aplicaciones intensivas.
Es mucho más seguro y escalable que Access.

Recomendaciones:
Diseñar la aplicación para manejar conflictos (por ejemplo, mediante reintentos de transacciones o bloqueo explícito con SELECT ... FOR UPDATE).

Característica                   Access                                                      PostgreSQL
Modelo                         Basado en archivos                                     Cliente-servidor
Bloqueos                    A nivel de registro, pero limitado                 MVCC: Sin bloqueos rígidos
Escalabilidad Limitado a pocos usuarios simultáneos Altamente escalable
Conflictos Puede generar conflictos difíciles de manejar Manejo robusto con aislamiento transaccional
Rendimiento Degrada rápidamente con múltiples usuarios Excelente para múltiples usuarios

Y adiciono, un saludo para Jacinto y ánimo con el PostgreSQL

Respuesta

El camino que he recorrido en PostgreSQL, que no es mucho me gusta bastante.
En mi caso es una curiosidad, ya que estoy jubilado.
Me gusta explorar nuevas alternativas y con ayudas de Eduardo, he conseguido ver las posibilidades que ofrece PostgreSQL en entorno local y Web.
Sin menoscabo de Access, que he usado y sigo usando, confío en la opinión de otros especialistas.
En el Ranking que yo he ido siguiendo cuyo enlace es>>
https://db-engines.com/en/ranking

Sitúa a PostgreSQL en cuarto lugar siendo la primera y tercera de pago.
Un saludo>> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas