Проблемы
При попытке открыть связанную таблицу Служб Microsoft Windows SharePoint в Microsoft Office Access 2007 вы можете получить сообщение об ошибке, напоминающее следующее сообщение об ошибке:
В движке базы данных Microsoft Office Access не удалось найтиимя объекта. Убедитесь, что объект существует, и что вы пишете его имя и имя пути правильно.
Тем не менее, связанная таблица SharePoint открывается успешно. Это сообщение об ошибке происходит после обновления связанной таблицы SharePoint программно более одного раза подряд с помощью метода RefreshLink объектов доступа к данным (DAO).Причина
Эта проблема возникает из-за того, что метод RefreshLink игнорирует отношения таблицы, созданные во время предыдущего вызова к методу.
Обходное решение
Чтобы обойти эту проблему, программно удалите отношения таблицы, прежде чем использовать метод RefreshLink для обновления связанной таблицы.
Пример подпрограммы для удаления отношений
Чтобы использовать подпрограмму для удаления отношений для обновленной ссылки, выполните следующие действия:- Вставьте следующий код в модуль в 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
- В исходном коде, где называется метод RefreshLink, вставьте следующий код непосредственно перед строкой исходного кода RefreshLink:
RemoveInvalidRelationships "WSSLink"
Заметка "WSSLink" — это название связанной таблицы, обновляемой методом RefreshLink.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".