Сообщение об ошибке при попытке открыть связанную таблицу SharePoint в Access 2007: "Движок базы данных Microsoft Office Access не смог найти объект"


Проблемы


При попытке открыть связанную таблицу Служб Microsoft Windows SharePoint в Microsoft Office Access 2007 вы можете получить сообщение об ошибке, напоминающее следующее сообщение об ошибке:
В движке базы данных Microsoft Office Access не удалось найтиимя объекта. Убедитесь, что объект существует, и что вы пишете его имя и имя пути правильно.
Тем не менее, связанная таблица SharePoint открывается успешно. Это сообщение об ошибке происходит после обновления связанной таблицы SharePoint программно более одного раза подряд с помощью метода RefreshLink объектов доступа к данным (DAO).

Причина


Эта проблема возникает из-за того, что метод RefreshLink игнорирует отношения таблицы, созданные во время предыдущего вызова к методу.

Обходное решение


Чтобы обойти эту проблему, программно удалите отношения таблицы, прежде чем использовать метод RefreshLink для обновления связанной таблицы.

Пример подпрограммы для удаления отношений

Чтобы использовать подпрограмму для удаления отношений для обновленной ссылки, выполните следующие действия:
  1. Вставьте следующий код в модуль в Microsoft Visual Basic для приложений (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. В исходном коде, где называется метод RefreshLink, вставьте следующий код непосредственно перед строкой исходного кода RefreshLink:
    RemoveInvalidRelationships "WSSLink"
    Заметка "WSSLink" — это название связанной таблицы, обновляемой методом RefreshLink.

Статус


Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".