Symptômes
Lorsque vous essayez d'ouvrir une table Microsoft Windows SharePoint Services liée dans Microsoft Office Access 2007, vous pouvez recevoir un message d'erreur qui ressemble au message d'erreur suivant :
Le moteur de base de données Microsoft Office Access n'a pas pu trouver l'objet ' Nom del'objet'. Assurez-vous que l'objet existe et que vous épelez son nom et le nom du chemin correctement.
Toutefois, la table SharePoint liée s'ouvre avec succès. Ce message d'erreur se produit après avoir mis à jour la table SharePoint connectée de manière programmatique plus d'une fois d'affilée en utilisant la méthode RefreshLink d'objets d'accès aux données (DAO).
Cause
Ce problème se produit parce que la méthode RefreshLink ignore les relations de table qui sont créées lors de l'appel précédent à la méthode.
Solution de contournement
Pour contourner ce problème, supprimez programmatiquement les relations de table avant d'utiliser la méthode RefreshLink pour mettre à jour la table liée.
Exemple de sous-routine pour supprimer les relations
Pour utiliser une sous-routine pour supprimer les relations pour le lien actualisé, suivez les étapes suivantes :
-
Insérer le code suivant dans un module dans 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
-
Dans le code source où la méthode RefreshLink est appelée, insérez le code suivant immédiatement avant la ligne de code source RefreshLink :
RemoveInvalidRelationships "WSSLink"
Remarque "WSSLink" est le nom de la table liée qui est actualisée par la méthode RefreshLink.
Statut
Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.