Se requiere bloqueo exclusivo para guardar los cambios de diseño en objetos de Access

Número de KB original: 283228

Nota:

Avanzado: requiere conocimientos expertos de codificación, interoperabilidad y multiusuario. Este artículo solo se aplica a una base de datos de Microsoft Access (.mdb y .accdb).

Síntomas

Al intentar personalizar las barras de herramientas o abrir un formulario, informe, macro o módulo de Microsoft Access en la vista Diseño, recibe el siguiente mensaje:

No tiene acceso exclusivo a la base de datos en este momento. Si continúa realizando cambios, es posible que no pueda guardarlos más adelante.

Al intentar guardar los cambios de diseño realizados en un formulario, informe, macro o módulo de Access, recibirá el siguiente mensaje:

No tiene acceso exclusivo a la base de datos en este momento. Los cambios de diseño no se guardarán.

Al intentar guardar una nueva página de acceso a datos, recibe el siguiente mensaje:

No se pudo crear un vínculo a esta página de acceso a datos porque la base de datos no se puede bloquear exclusivamente.

Causa

  • Está intentando abrir un formulario, informe, macro, módulo o barra de comandos en la vista Diseño.
  • Está intentando guardar los cambios de diseño en uno de estos tipos de objeto o en un nuevo vínculo de página mientras otros usuarios tienen abierta la misma base de datos.

Para guardar los cambios de diseño en estos tipos de objetos, Access debe poder obtener un bloqueo exclusivo en la base de datos.

Solución

En situaciones en las que varios desarrolladores diseñan una aplicación de Access simultáneamente, debe implementar el control de código fuente mediante el complemento de Microsoft Visual SourceSafe para Microsoft Access. O bien, debe distribuir copias de trabajo locales de la base de datos a cada desarrollador. A continuación se explica cada una de estas opciones.

Implementación del control de código fuente

El Visual SourceSafe Add-In de Microsoft Access le permite poner la aplicación de Access bajo control de código fuente mientras está en desarrollo. Si pone la aplicación bajo control de código fuente, esto le permite realizar un seguimiento y almacenar los cambios realizados en la aplicación a lo largo del tiempo. Con Microsoft Visual SourceSafe, puede revisar el historial de un objeto y, a continuación, revertir a versiones anteriores de un objeto. Puede desproteger objetos en la aplicación Microsoft Access, modificarlos o crear nuevos objetos en su copia local y, a continuación, volver a comprobarlos en la base de datos principal bajo el control de código fuente. Microsoft Access Visual SourceSafe Add-In está disponible con Microsoft Office XP Developer. Para usar el complemento microsoft access Visual SourceSafe, también debe instalar Microsoft Visual SourceSafe, que también está disponible con Microsoft Office XP Developer, por separado.

Uso de bases de datos de trabajo individuales

Otra opción que puede implementar es mantener una copia maestra de la aplicación de base de datos en una ubicación centralizada y, a continuación, usar copias de trabajo individuales de la base de datos en el equipo de cada desarrollador. Cada desarrollador desarrollaría una parte individual de la aplicación en la copia de trabajo local de la base de datos. Cuando los desarrolladores quieren realizar un cambio en un objeto de la aplicación de base de datos, importarían el objeto de la base de datos maestra a la base de datos de trabajo local. A continuación, los desarrolladores realizarían los cambios necesarios en el objeto en la base de datos de trabajo local y guardarían el objeto. Cuando los desarrolladores estén listos para confirmar los cambios en la base de datos maestra, exportarían el objeto a la base de datos maestra, sobrescribiendo el objeto original.

Una desventaja de usar este enfoque es que no hay ninguna manera de determinar si varios desarrolladores están trabajando simultáneamente en el mismo objeto localmente. Cuando el desarrollador exporta el objeto a la base de datos maestra, el desarrollador puede sobrescribir sin saberlo los cambios que otro desarrollador ha confirmado en la base de datos maestra.

Más información

Para guardar los cambios de diseño en objetos específicos de Access, como formularios, informes, vínculos de página nuevos, macros, módulos y barras de comandos, Access 2002 debe poder bloquear la base de datos exclusivamente durante la operación Guardar . Las tablas, consultas y relaciones no están incluidas en esta restricción porque son objetos específicos de Microsoft Jet. Microsoft usa este requisito con Access 2002 por varias razones:

  • Proporciona coherencia con otras aplicaciones cliente de Visual Basic Environment.
  • Detiene la dependencia en el motor de base de datos Jet.
  • Mejora la estabilidad de los objetos específicos de Access.

Proporciona coherencia con otras aplicaciones cliente de entorno de Visual Basic

Dado que Access 2002 hospeda el entorno de Visual Basic, el modelo de guardado usado por Microsoft Access debe ser coherente con otras aplicaciones que hospedan el entorno de Visual Basic. El entorno de Visual Basic solo permite la edición y el guardado exclusivos de proyectos de Visual Basic que no están bajo control de código fuente. Esto es así en Visual Basic 6.0 y también en todas las aplicaciones de Office que hospedan el entorno de Visual Basic.

Detiene la dependencia en el motor de base de datos Jet.

Access ofrece la capacidad de crear archivos de proyecto de Microsoft Access (.adp) y también bases de datos de Microsoft Access (.mdb). Mediante el uso de un proyecto de Access, los desarrolladores pueden usar Microsoft SQL Server como otro motor de base de datos para Microsoft Jet. En el pasado, todos los objetos específicos de Access (formularios, informes, macros, módulos y barras de comandos) dependían del motor de base de datos Jet para el almacenamiento. Estos objetos se almacenaron en tablas del sistema específicas de Access en la base de datos de Microsoft Jet. Dado que es posible que Access use Microsoft SQL Server como alternativa a Microsoft Jet, Microsoft tuvo que desarrollar un mecanismo de almacenamiento para objetos específicos de Access que no dependa del motor de base de datos Jet.

Mejora la estabilidad de objetos específicos de Access

El modelo de almacenamiento del proyecto mejora la estabilidad de los objetos específicos de Access y el proyecto de Visual Basic. Visual Basic para Aplicaciones nunca ha permitido la edición multiusuario de proyectos de Visual Basic sin control de código fuente. Microsoft Access 95 y Microsoft Access 97 podrían eludir esta restricción ocultando los cambios del proyecto realizados en un entorno de varios usuarios de Visual Basic para Aplicaciones y, a continuación, combinarlos en el proyecto más adelante. Sin embargo, esto podría afectar a la estabilidad del proyecto de Visual Basic. Por lo tanto, Microsoft Access requiere un bloqueo exclusivo al diseñar objetos específicos de Access para asegurarse de que el proyecto solo tiene un editor.

Edición de objetos de Access en un entorno multiusuario

Dado que los usuarios pueden abrir una base de datos para uso exclusivo o compartido, el comportamiento de guardado que muestra Access depende de cómo el usuario abrió la base de datos y de si varios usuarios están accediendo a ella actualmente.

Si un desarrollador abre la base de datos para su uso exclusivo, el desarrollador puede guardar el diseño de cualquier objeto específico de Access, siempre que el desarrollador pueda abrir la base de datos para obtener acceso de lectura y escritura y tenga los permisos correctos para modificar el diseño del objeto.

Si un usuario abre la base de datos para uso compartido, el usuario puede guardar el diseño de cualquier objeto específico de Access, siempre que el usuario pueda abrir la base de datos para el acceso de lectura y escritura, tenga los permisos correctos para modificar el diseño del objeto y Access pueda obtener un bloqueo exclusivo en la base de datos.

Promoción de bloqueo

Para asegurarse de que el uso de la base de datos es exclusivo, Access usa la característica de control de conexión del motor de base de datos Jet para promover el bloqueo compartido del usuario a exclusivo. Access intenta promover un bloqueo compartido a un bloqueo exclusivo en cuanto el usuario abre un formulario, informe, macro o barra de comandos en la vista Diseño. Access intenta la promoción de bloqueos en este momento con el fin de evitar el escenario en el que un usuario ha realizado varios cambios de diseño solo para encontrar más adelante que el usuario no puede guardarlos porque Access no puede obtener un bloqueo exclusivo. Al intentar la promoción de bloqueos en cuanto el usuario abre un objeto en la vista Diseño, Access puede advertir al usuario si no puede obtener un bloqueo exclusivo antes de que el usuario realice cambios de diseño. Access no intentará bloquear la promoción al abrir un módulo en la vista Diseño; sin embargo, intentará bloquear la promoción en cuanto el usuario edite cualquier módulo de la base de datos.

Access mantiene el bloqueo exclusivo hasta que el usuario guarda o descarta todos los objetos sucios y no hay ningún otro objeto abierto en la vista Diseño. Después de esto, Access degrada el bloqueo a compartido si la base de datos se abrió originalmente para uso compartido.

Si Access no puede promover el bloqueo a exclusivo cuando el usuario abre un objeto en la vista Diseño, Access alerta al usuario con el mensaje:

No tiene acceso exclusivo a la base de datos en este momento. Si continúa realizando cambios, es posible que no pueda guardarlos más adelante.

Después de este mensaje de advertencia, Access abrirá el objeto en la vista Diseño y permitirá al usuario realizar cambios de diseño. Si el usuario intenta guardar el objeto, Access intenta promover el bloqueo compartido a exclusivo. Si la promoción de bloqueos se realiza correctamente, Access guarda el objeto y mantiene el bloqueo exclusivo hasta que el usuario guarda o descarta todos los demás objetos sucios y ningún objeto permanece abierto en la vista Diseño. Si se produce un error en la promoción de bloqueo, el usuario recibe el siguiente mensaje:

No tiene acceso exclusivo a la base de datos en este momento. Los cambios de diseño no se guardarán.

Si el usuario intenta cerrar el objeto sucio y guardar los cambios, Access le pide al usuario la opción de cerrar el objeto y descartar los cambios de diseño realizados en él, o con la opción de dejarlo abierto y sin guardar.

Pasos para reproducir este comportamiento

  1. Inicie dos instancias de Microsoft Access en el mismo equipo.

  2. Abra la Northwind.mdb de base de datos de ejemplo en ambas instancias.

  3. En la primera instancia de Microsoft Access, abra el formulario Clientes en la vista Diseño .

    Recibe el mensaje:

    No tiene acceso exclusivo a la base de datos en este momento. Si continúa realizando cambios, es posible que no pueda guardarlos más adelante.

  4. Haga clic en Aceptar para borrar el mensaje.

    El formulario se abre en la vista Diseño .

  5. Agregue un control de cuadro de texto al formulario.

  6. En el menú Archivo, haga clic en Guardar.

    Recibirá el siguiente mensaje:

    No tiene acceso exclusivo a la base de datos en este momento. Los cambios de diseño no se guardarán.

  7. Haga clic en Aceptar para borrar el mensaje.

  8. Cierre la segunda instancia de Access en el equipo.

  9. En la primera instancia de Access, intente volver a guardar el formulario.

    El formulario se guarda correctamente.