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:
-
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
-
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".