Mensagem de erro quando tenta abrir uma tabela ligada do SharePoint no Access 2007: "o motor de base de dados do Microsoft Office Access não conseguiu localizar o objecto"

Sintomas

Quando tenta abrir uma tabela ligada do Microsoft Windows SharePoint Services no Microsoft Office Access 2007, poderá receber uma mensagem de erro semelhante a seguinte mensagem de erro:

O motor de base de dados do Microsoft Office Access não conseguiu localizar o objecto 'nome do objecto'. Certifique-se o objecto existe e que escreve correctamente o nome e o nome do caminho.

No entanto, a tabela ligada do SharePoint é aberto com êxito. Esta mensagem de erro ocorre depois de actualizar a tabela ligada do SharePoint através de programação mais do que uma vez numa linha, utilizando o método de Data Access Objects (DAO) RefreshLink .

Causa

Este problema ocorre porque o método RefreshLink ignora as relações da tabela que são criadas durante a chamada anterior para o método.

Solução

Para contornar este problema, elimine programaticamente as relações da tabela antes de utilizar o método RefreshLink para actualizar a tabela ligada.

Subrotina de exemplo para eliminar as relações

Para utilizar uma subrotina para eliminar as relações para a ligação actualizada, siga estes passos:

  1. Insira o seguinte código num módulo no Microsoft Visual Basic for Applications (VBA):

    Public Sub RemoveInvalidRelationships(strTableName As String)    On Error Resume Next    Dim cnt As Integer    Dim i As Integer    Dim bForeignTable As Boolean    Dim bTable As Boolean    Dim td As TableDef        cnt = CurrentDb.Relations.Count - 1    ' Go through the relationships collection backwards, to ensure that if we delete one, we will have a valid index    For i = cnt To 0 Step -1        bTable = False        bForeignTable = False        If (StrComp(CurrentDb.Relations(i).Table, strTableName, vbTextCompare) = 0) Then bTable = True        If (StrComp(CurrentDb.Relations(i).ForeignTable, strTableName, vbTextCompare) = 0) Then bForeignTable = True                If bTable Xor bForeignTable Then            ' Determine if either the table or foreign table is the table that we are interested in            ' We will then look at the other table to determine if it exists            ' If it doesn't exist, delete the relationship            If bTable Then                Set td = CurrentDb.TableDefs(CurrentDb.Relations(i).ForeignTable)            Else                Set td = CurrentDb.TableDefs(CurrentDb.Relations(i).Table)            End If                        If Err.Number = 3265 Then                CurrentDb.Relations.Delete CurrentDb.Relations(i).Name            End If            Err.Clear        End If            Next iEnd Sub
  2. No código de origem em que o método de RefreshLink é chamado, insira o seguinte código imediatamente antes da linha de código de origem de RefreshLink:

    RemoveInvalidRelationships "WSSLink"

    Nota "WSSLink" é o nome da tabela ligada que está a ser actualizado pelo método RefreshLink .

Estado

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×