Simptome
Când încercați să deschideți un tabel legat Microsoft Windows SharePoint Services în Microsoft Office Access 2007, este posibil să primiți un mesaj de eroare asemănător cu următorul mesaj de eroare:
Motorul de baze de date Microsoft Office Access nu a găsit obiectul "Nume obiect". Asigurați-vă că obiectul există și că se scrie numele și numele căii corect.
Cu toate acestea, tabelul legat SharePoint se deschide cu succes. Acest mesaj de eroare se produce după ce actualizați tabelul legat SharePoint programatic mai mult de o dată într-un rând utilizând metoda Refreshlink date Access Objects (DAO).
Cauză
Această problemă apare deoarece metoda Refreshlink ignoră relații de tabel care sunt create în timpul apelul anterior la metoda.
Soluție de evitare
Pentru a rezolva această problemă, programatic ștergeți relațiile de tabel înainte de a utiliza metoda Refreshlink pentru a actualiza tabelul legat.
Eșantion subrutină pentru a șterge relațiile
Pentru a utiliza o subrutină pentru a șterge relațiile pentru linkul reîmprospătat, urmați acești pași:
-
Introduceți următorul cod într-un modul în 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
-
În codul sursă în cazul în care metoda refreshlink este numit, inserați următorul cod imediat înainte de linia de cod sursă refreshlink:
RemoveInvalidRelationships "WSSLink"
Notă "WSSLink" este numele tabelului legat care este reîmprospătat prin metoda Refreshlink .
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.