É necessário um bloqueio exclusivo para guardar as alterações de estrutura em objetos do Access

Número original da BDC: 283228

Nota

Avançado: requer codificação especializada, interoperabilidade e competências multiutilizadas. Este artigo aplica-se apenas a uma base de dados do Microsoft Access (.mdb e .accdb).

Sintomas

Quando tenta personalizar barras de ferramentas ou abrir um formulário, relatório, macro ou módulo do Microsoft Access na vista Estrutura, recebe a seguinte mensagem:

De momento, não tem acesso exclusivo à base de dados. Se continuar a fazer alterações, poderá não conseguir guardá-las mais tarde.

Quando tenta guardar as alterações de estrutura que efetuou num formulário, relatório, macro ou módulo do Access, recebe a seguinte mensagem:

De momento, não tem acesso exclusivo à base de dados. As alterações de estrutura não serão guardadas.

Quando tenta guardar uma nova página de acesso a dados, recebe a seguinte mensagem:

Não foi possível criar uma ligação para esta página de acesso a dados porque a base de dados não pode ser bloqueada exclusivamente.

Causa

  • Está a tentar abrir um formulário, relatório, macro, módulo ou barra de comandos na vista Estrutura.
  • Está a tentar guardar as alterações de estrutura num destes tipos de objeto ou numa nova ligação de página enquanto outros utilizadores têm a mesma base de dados aberta.

Para guardar as alterações de estrutura a estes tipos de objetos, o Access tem de conseguir obter um bloqueio exclusivo na base de dados.

Resolução

Em situações em que vários programadores estão a criar uma aplicação do Access em simultâneo, tem de implementar o controlo de código fonte através do Suplemento Microsoft Visual SourceSafe para o Microsoft Access. Em alternativa, tem de distribuir cópias de trabalho locais da base de dados para cada programador. Segue-se um debate sobre cada uma destas opções.

Implementar o controlo de código fonte

O Microsoft Access Visual SourceSafe Add-In permite-lhe colocar a sua aplicação do Access sob controlo de código fonte enquanto está em desenvolvimento. Se colocar a aplicação sob controlo de código fonte, isto permite-lhe controlar e armazenar as alterações efetuadas à sua aplicação ao longo do tempo. Ao utilizar o Microsoft Visual SourceSafe, pode rever o histórico de um objeto e, em seguida, reverter para versões anteriores de um objeto. Pode dar saída dos objetos na aplicação Microsoft Access, modificá-los ou criar novos objetos na respetiva cópia local e, em seguida, voltar a verificá-los na base de dados principal sob controlo de código fonte. O Microsoft Access Visual SourceSafe Add-In está disponível com o Microsoft Office XP Developer. Para utilizar o Suplemento Microsoft Access Visual SourceSafe, também tem de instalar o Microsoft Visual SourceSafe, que também está disponível com o Microsoft Office XP Developer, separadamente.

Utilizar bases de dados de trabalho individuais

Outra opção que pode implementar é manter uma cópia mestra da aplicação de base de dados numa localização centralizada e, em seguida, utilizar cópias de trabalho individuais da base de dados no computador de cada programador. Cada programador desenvolveria uma parte individual da aplicação na cópia de trabalho local da base de dados. Quando os programadores querem efetuar uma alteração a um objeto na aplicação de base de dados, iriam importar o objeto da base de dados mestra para a base de dados de trabalho local. Em seguida, os programadores efetuarão as alterações necessárias ao objeto na base de dados de trabalho local e guardariam o objeto. Quando os programadores estiverem prontos para consolidar as alterações à base de dados mestra, exportariam o objeto para a base de dados mestra, substituindo o objeto original.

Uma desvantagem da utilização desta abordagem é o facto de não haver forma de determinar se vários programadores estão a trabalhar simultaneamente no mesmo objeto localmente. Quando o programador exporta o objeto para a base de dados mestra, o programador pode substituir as alterações que outro programador comprometeu com a base de dados mestra.

Mais Informações

Para guardar alterações de estrutura em objetos específicos do Access, tais como formulários, relatórios, novas ligações de página, macros, módulos e barras de comandos, o Access 2002 tem de conseguir bloquear a base de dados exclusivamente durante a operação Guardar . As tabelas, as consultas e as relações não se enquadram nesta restrição porque são objetos específicos do Microsoft Jet. A Microsoft utiliza este requisito com o Access 2002 por vários motivos:

  • Fornece consistência com outras aplicações cliente do Visual Basic Environment.
  • Interrompe a dependência no motor de base de dados jet.
  • Melhora a estabilidade dos objetos específicos do Access.

Fornece consistência com outras aplicações cliente de ambiente do Visual Basic

Uma vez que o Access 2002 aloja o ambiente do Visual Basic, o modelo de gravação utilizado pelo Microsoft Access tem de ser consistente com outras aplicações que alojam o ambiente do Visual Basic. O ambiente do Visual Basic permite apenas edição e gravação exclusivas de projetos do Visual Basic que não estão sob controlo de código fonte. Isto aplica-se ao Visual Basic 6.0 e também a todas as aplicações do Office que alojam o ambiente do Visual Basic.

Para a dependência no motor de base de dados jet

O Access oferece a capacidade de criar ficheiros de projeto do Microsoft Access (.adp) e também bases de dados do Microsoft Access (.mdb). Ao utilizar um projeto do Access, os programadores podem utilizar o Microsoft SQL Server como outro motor de base de dados para o Microsoft Jet. No passado, todos os objetos específicos do Access (formulários, relatórios, macros, módulos e barras de comandos) estavam dependentes do motor de base de dados jet para armazenamento. Estes objetos foram armazenados em tabelas de sistema específicas do Access na base de dados do Microsoft Jet. Uma vez que é possível que o Access utilize o Microsoft SQL Server como alternativa ao Microsoft Jet, a Microsoft teve de desenvolver um mecanismo de armazenamento para objetos específicos do Access que não dependem do motor de base de dados jet.

Melhora a estabilidade de objetos específicos do Access

O modelo de armazenamento de projetos melhora a estabilidade dos objetos específicos do Access e do projeto do Visual Basic. Visual Basic for Applications nunca permitiu a edição multiutilizador de projetos do Visual Basic sem controlo de código fonte. O Microsoft Access 95 e o Microsoft Access 97 podem contornar esta restrição ao ocultar as alterações efetuadas num ambiente multiutilizador de Visual Basic for Applications e, em seguida, intercalá-las no projeto mais tarde. No entanto, isto tinha o potencial de afetar a estabilidade do projeto do Visual Basic. Por conseguinte, o Microsoft Access requer um bloqueio exclusivo ao estruturar objetos específicos do Access para garantir que o projeto tem apenas um editor.

Editar objetos do Access num ambiente multiutilizador

Uma vez que os utilizadores podem abrir uma base de dados para utilização exclusiva ou partilhada, o comportamento de guardar apresentado pelo Access depende da forma como o utilizador abriu a base de dados e se vários utilizadores estão atualmente a aceder à mesma.

Se um programador abrir a base de dados para utilização exclusiva, o programador pode guardar a estrutura de qualquer objeto específico do Access, desde que o programador possa abrir a base de dados para acesso de leitura/escrita e tenha as permissões corretas para modificar a estrutura do objeto.

Se um utilizador abrir a base de dados para utilização partilhada, o utilizador pode guardar a estrutura de qualquer objeto específico do Access, desde que o utilizador possa abrir a base de dados para acesso de leitura/escrita, tiver as permissões corretas para modificar a estrutura do objeto e o Access pode obter um bloqueio exclusivo na base de dados.

Bloquear promoção

Para garantir que a utilização da base de dados é exclusiva, o Access utiliza a funcionalidade de controlo de ligação do motor de base de dados Jet para promover o bloqueio partilhado do utilizador para exclusivo. O Access tenta promover um bloqueio partilhado para um bloqueio exclusivo assim que o utilizador abre um formulário, relatório, macro ou barra de comandos na vista Estrutura. O Access tenta bloquear a promoção neste momento para impedir o cenário em que um utilizador efetuou múltiplas alterações de estrutura apenas para descobrir mais tarde que o utilizador não consegue guardá-las porque o Access não consegue obter um bloqueio exclusivo. Ao tentar bloquear a promoção assim que o utilizador abrir um objeto na vista Estrutura, o Access pode avisar o utilizador se não conseguir obter um bloqueio exclusivo antes de o utilizador efetuar alterações de estrutura. O Access não tentará bloquear a promoção ao abrir um módulo na vista Estrutura; No entanto, tentará bloquear a promoção assim que o utilizador editar qualquer módulo na base de dados.

O Access mantém o bloqueio exclusivo até que o utilizador guarde ou elimine todos os objetos sujos e não estejam abertos outros objetos na vista Estrutura. Depois disso, o Access despromoverá o bloqueio para partilhado se a base de dados tiver sido aberta originalmente para utilização partilhada.

Se o Access não conseguir promover o bloqueio para exclusivo quando o utilizador abrir um objeto na vista Estrutura, o Access alerta o utilizador com a mensagem:

De momento, não tem acesso exclusivo à base de dados. Se continuar a fazer alterações, poderá não conseguir guardá-las mais tarde.

Após esta mensagem de aviso, o Access irá abrir o objeto na vista Estrutura e permitir que o utilizador faça alterações de estrutura. Se o utilizador tentar guardar o objeto, o Access tenta promover o bloqueio partilhado para exclusivo. Se a promoção de bloqueio for bem-sucedida, o Access guarda o objeto e mantém o bloqueio exclusivo até que o utilizador guarde ou elimine todos os outros objetos sujos e nenhum objeto permaneça aberto na vista Estrutura. Se a promoção de bloqueio falhar, o utilizador recebe a seguinte mensagem:

De momento, não tem acesso exclusivo à base de dados. As alterações de estrutura não serão guardadas.

Se o utilizador tentar fechar o objeto sujo e guardar as alterações, o Access pede ao utilizador a opção de fechar o objeto e eliminar as alterações de estrutura efetuadas ao mesmo ou com a opção de o deixar aberto e não guardado.

Passos para reproduzir o comportamento

  1. Inicie duas instâncias do Microsoft Access no mesmo computador.

  2. Abra a base de dados de exemplo Northwind.mdb em ambas as instâncias.

  3. Na primeira instância do Microsoft Access, abra o formulário Clientes na vista Estrutura .

    Recebe a mensagem:

    De momento, não tem acesso exclusivo à base de dados. Se continuar a fazer alterações, poderá não conseguir guardá-las mais tarde.

  4. Clique em OK para limpar a mensagem.

    O formulário é aberto na vista Estrutura .

  5. Adicione um controlo de caixa de texto ao formulário.

  6. No menu Ficheiro , clique em Guardar.

    Recebe a seguinte mensagem:

    De momento, não tem acesso exclusivo à base de dados. As alterações de estrutura não serão guardadas.

  7. Clique em OK para limpar a mensagem.

  8. Feche a segunda instância do Access no seu computador.

  9. Na primeira instância do Access, tente guardar o formulário novamente.

    O formulário é guardado com êxito.