Moderado: requer conhecimentos básicos sobre macros, codificação e interoperabilidade.Este artigo aplica-se para uma base de dados do Microsoft Access (. mdb) e para um projecto do Microsoft Access (. adp).
Sintomas
Quando edita dados que utiliza vários formulários que tenham a mesma origem de registos, poderá receber a seguinte mensagem de erro:
Este registo foi alterado por outro utilizador desde que começou a editá-lo. Se guardar o registo, irá substituir as alterações feitas pelo outro utilizador. Copiar as alterações para a área de transferência será permitem-lhe observar os valores a outro utilizador introduziu e, em seguida, colar as alterações novamente se optar por efectuar alterações.
Em seguida, pode clicar das seguintes três botões:
-
Guardar registo
-
Copiar para área de transferência
-
Anular alterações
Causa
Este comportamento ocorre quando o utilizador abrir dois formulários que actualizam a mesma origem de dados ao mesmo tempo. No primeiro formulário coloca um bloqueio de edição sobre o registo ou registos e, em seguida, no segundo formulário altera o registo ou registos e guarda as alterações. Quando o primeiro formulário tenta fechar e escrever de volta para a tabela, são detectadas as alterações efectuadas pelo segundo formulário. Isto faz com que o erro ser devolvido.
Resolução
Para contornar este comportamento, utilize um dos dois métodos listados para um ficheiro de base de dados (. mdb) do Microsoft Access ou o método listado para um ficheiro de projecto (. adp) do Access.
Para um ficheiro de base de dados (. mdb) do Microsoft Access
Método 1
Defina a propriedade ProtecçõesDeRegistos do formulário para Registo editado. Para tal, siga estes passos:
-
Abra o formulário na vista de estrutura. Nota No Access 2007, avance para o passo 3.
-
No menu Ver , clique em Propriedades.
-
No separador dados , altere a propriedade de Bloqueios de registo para Registo editado.
Método 2
Adicione código ao procedimento de evento AoDesactivar de ambos os formulários para guardar o registo. Para tal, siga estes passos:
-
Abra o formulário na vista de estrutura. Nota No Access 2007, avance para o passo 4.
-
No menu Ver , clique em Propriedades.
-
No menu Editar , clique em Seleccionar formulário.
-
No separador eventos , com o botão direito na caixa da propriedade AoDesactivar e, em seguida, clique em Criar.
-
Na caixa Escolher construtor , faça clique sobre o Construtor de códigoe, em seguida, clique em OK.
-
Escreva ou cole o seguinte código:
DoCmd.RunCommand acCmdSaveRecord
-
Abra o segundo formulário na vista de estrutura e repita os passos 2 a 6.
Para um ficheiro de projecto do Microsoft Access (. adp):
Adicione código para os procedimentos de evento AoDesactivar e AoActivar de ambos os formulários para guardar o registo. Para tal, siga estes passos:
-
Abra o formulário na vista de estrutura. Nota No Access 2007, avance para o passo 4.
-
No menu Ver , clique em Propriedades.
-
No menu Editar , clique em Seleccionar formulário.
-
No separador eventos , com o botão direito na caixa da propriedade AoDesactivar e, em seguida, clique em Criar.
-
Na caixa Escolher construtor , faça clique sobre o Construtor de códigoe, em seguida, clique em OK.
-
Escreva ou cole o seguinte código:
DoCmd.RunCommand acCmdSaveRecord
-
No menu ficheiro , clique em Fechar e regressar ao Microsoft Access.
-
No separador eventos , com o botão direito na caixa da propriedade AoActivar e, em seguida, clique em Criar.
-
Na caixa Escolher construtor , faça clique sobre o Construtor de códigoe, em seguida, clique em OK.
-
Escreva ou cole o seguinte código:Nota o código de exemplo neste artigo utiliza Microsoft ActiveX Data Objects. Para este código seja executado correctamente, tem de referenciar o Microsoft ActiveX Data Objects 2. x biblioteca (onde 2. x é 2.1 ou posterior). Para tal, clique em References no menu Ferramentas no Editor do Visual Basic e certifique-se de que o Microsoft ActiveX Data Objects 2. x biblioteca caixa de verificação está seleccionada.
Dim rs As ADODB.RecordsetSet rs = Me.Recordset.Cloners.Bookmark = Me.BookmarkDoCmd.RunCommand acCmdRefreshMe.Bookmark = rs.Bookmarkrs.CloseSet rs = Nothing
-
Abrir no segundo formulário na vista de estrutura e, em seguida, repita os passos 2 a 10.
Mais Informações
Passos para reproduzir o comportamento no Access 2003
-
Abra o Access.
-
No menu Ajuda , aponte para Bases de dados exemploe, em seguida, clique em Dados de exemplo Adamastor.
-
Na janela base de dados , clique em tabelas em objectose, em seguida, clique na tabela Empregados .
-
No menu Inserir , clique em formulário automático.
-
Guarde o formulário como frmNewEmployees.
-
Abra o formulário Empregados e, em seguida, altere o campo nome para Nancy1.
-
Abra o formulário de frmNewEmployees e, em seguida, altere o campo nome para Nancy2.
-
Feche o formulário de frmNewEmployees.
-
Feche o formulário de empregados. Repare que recebe a mensagem "Conflito de escrever" mencionada na secção "Sintomas" deste artigo.
Para obter informações adicionais, clique nos números de artigo que se segue para visualizar os artigos na Microsoft Knowledge Base:
304181 erro de conflito de escrita inesperado quando fecha um formulário
280730 ACC2000: erro de conflito de escrita, quando tentar actualizar registos numa tabela ligada do SQL Server