Mensaje de error al intentar abrir una tabla de SharePoint vinculada en Access 2007: "El motor de base de datos de Microsoft Office Access no pudo encontrar el objeto"


Síntomas


Cuando intenta abrir una tabla de Microsoft Windows SharePoint Services vinculada en Microsoft Office Access 2007, puede recibir un mensaje de error similar al siguiente mensaje de error:
El motor de base de datos de Microsoft Office Access no pudo encontrar el objeto ' Nombre delobjeto'. Asegúrese de que el objeto existe y de que escribe correctamente su nombre y el nombre de la ruta de acceso.
Sin embargo, la tabla de SharePoint vinculada se abre correctamente. Este mensaje de error se produce después de actualizar la tabla de SharePoint vinculada mediante programación más de una vez en una fila mediante el método RefreshLink de objetos de acceso a datos (DAO).

Causa


Este problema se produce porque el RefreshLink método omite las relaciones de tabla que se crean durante la llamada anterior al método.

Solución alternativa


Para evitar este problema, elimine mediante programación las relaciones de tabla antes de usar el método RefreshLink para actualizar la tabla vinculada.

Ejemplo de subrutina para eliminar las relaciones

Para utilizar una subrutina para eliminar las relaciones del vínculo actualizado, siga estos pasos:
  1. Inserte el siguiente código en un módulo de Microsoft Visual Basic para Aplicaciones (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. En el código fuente donde se llama al método RefreshLink, inserte el código siguiente inmediatamente antes de la línea de código fuente RefreshLink:
    RemoveInvalidRelationships "WSSLink"
    Nota "WSSLink" es el nombre de la tabla vinculada que está siendo actualizado por el RefreshLink método.

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft recogidos en la sección "Se aplica a".