Foutbericht wanneer u probeert te openen van een gekoppelde SharePoint-tabel in Access 2007: ' de Microsoft Office Access-database-engine kan het object niet vinden '


Symptomen


Wanneer u een gekoppelde Microsoft Windows SharePoint Services-tabel in Microsoft Office Access 2007 probeert te openen, wordt een foutbericht van de volgende strekking weergegeven:
De Microsoft Office Access-database-engine kan het object 'Objectnaam' niet vinden. Zorg ervoor dat het object bestaat en dat u de naam en de naam van het pad correct spelt.
De gekoppelde SharePoint-tabel is echter wel geopend. Dit foutbericht treedt op nadat u de gekoppelde SharePoint-tabel programmatisch meer dan één keer in een rij bijwerken met behulp van de Data Access Objects (DAO) RefreshLink methode.

Oorzaak


Dit probleem treedt op omdat de methode RefreshLink negeert de tabelrelaties die zijn gemaakt tijdens de vorige aanroep van de methode.

Workaround


U dit probleem omzeilen door de tabelrelaties programmatisch te verwijderen voordat u de methode RefreshLink gebruikt om de gekoppelde tabel bij te werken.

Voorbeeld van subroutine om de relaties te verwijderen

Als u een subroutine wilt gebruiken om de relaties voor de vernieuwde koppeling te verwijderen, volgt u deze stappen:
  1. Voeg de volgende code in een module in 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. In de broncode waar de methode RefreshLink wordt aangeroepen, voegt u de volgende code direct voor de broncode regel RefreshLink:
    RemoveInvalidRelationships "WSSLink"
    Opmerking "WSSLink" is de naam van de gekoppelde tabel die wordt vernieuwd door de methode RefreshLink .

Status


Microsoft heeft bevestigd dat dit probleem zich kan voordoen in de Microsoft-producten die worden vermeld in de sectie Van toepassing op.