2009-02-27 13 views
7

Moja aplikacja jest zbudowana do skanowania bazy danych MS Access w VB.NET.Jak programowo dodawać/usuwać odwołania?

Po udostępnieniu aplikacji Access użytkownikom końcowym mogą one mieć różne wersje składników COM. Czy można dodawać/usuwać odwołania programowo, aby rozwiązać niedziałające odniesienia z powodu różnych wersji?

Proszę udostępnić mi kod lub łącze w celach informacyjnych.

Odpowiedz

9

Oto przykładowy kod:

Tworzenie odniesienia z pliku

Sub AddWS() 
    'Create a reference to Windows Script Host, ' 
    'where you will find FileSystemObject ' 
    'Reference name: "IWshRuntimeLibrary" ' 
    'Reference Name in references list: "Windows Script Host Object Model" ' 
    ReferenceFromFile "C:\WINDOWS\System32\wshom.ocx" 
    End Sub 

    Function ReferenceFromFile(strFileName As String) As Boolean 
    Dim ref As Reference 

     On Error GoTo Error_ReferenceFromFile 
     References.AddFromFile (strFileName) 
     ReferenceFromFile = True 

    Exit_ReferenceFromFile: 
     Exit Function 

    Error_ReferenceFromFile: 
     ReferenceFromFile = False 
     Resume Exit_ReferenceFromFile 
    End Function 

odnośnik skreślić

Sub DeleteRef(RefName) 
    Dim ref As Reference 

     'You need a reference to remove ' 
     Set ref = References(RefName) 
     References.Remove ref 

    End Sub 


You can use the references collection to find if a reference exists. 

referencyjny Występuje

Function RefExists(RefName) 
    Dim ref As Object 

    RefExists = False 

    For Each ref In References 
     If ref.Name = RefName Then 
      RefExists = True 
     End If 
    Next 

    End Function 

Od: http://wiki.lessthandot.com/index.php/Add,_Remove,_Check_References

Można również czytaćhttp://www.mvps.org/access/modules/mdl0022.htm

+1

Otrzymuję błąd podczas implementowania tej logiki. as follwos: "Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu" Proszę zasugerować, jak to zrobić ..... Dziękuję ... – Suman

+0

Która linia podaje ten błąd? – Fionnuala

+0

W "Dim ref As References" pojawia się błąd jak wyżej iw drugim typie deklaracji, tj. Poniżej Dim ref as new References error is "Pobieranie fabryki klasy COM dla komponentu z CLSID {EB106214-9C89-11CF-A2B3-00A0C90542FF } nie powiodło się z powodu następującego błędu: 80040154." – Suman

3

Najlepszym rozwiązaniem jest ograniczenie odwołań w Access MDB dostępu do komponentów wewnętrznych. Byłby to odnośnik Access, referencja VBA i referencja DAO. Wszystkie inne biblioteki zewnętrzne powinny być używane poprzez późniejsze wiązanie. Jeśli używasz obiektu systemu plików, na przykład, zamiast tego (z odniesieniem do Windows Script Host Object Model):

Dim objFSO As New FileSystemObject 

    If objFSO.FolderExists("\\d9m09521\WB\") Then 
    ... 
    End If 

chcesz usunąć odwołanie i przekształcić ją w ten sposób:

Dim objFSO As Object 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    If objFSO.FolderExists("\\d9m09521\WB\") Then 
    ... 
    End If 

Jeśli niepokoi Cię wydajność podczas inicjowania FSO za każdym razem, gdy go używasz, możesz zapisać w pamięci podręcznej odniesienie do niego. I zazwyczaj użyć zmiennej statycznej wewnątrz funkcji, aby powrócić do obiektu tak:

Public Function FSO() As Object 
    Static objFSO As Object 

    If objFSO Is Nothing Then 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    End If 
    FSO = objFSO 
End Function 

Teraz możesz uzyskać fantazyjne, a także być w stanie zburzyć instancja obiektu, w tym przypadku, że zrobisz coś tak:

Public Function FSO(Optional bolCloseObject As Boolean = False) As Object 
    Static objFSO As Object 

    If bolCloseObject Then 
    Set objFSO = Nothing 
    Exit Function 
    End If 
    If objFSO Is Nothing Then 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    End If 
    FSO = objFSO 
End Function 

w każdym razie chodzi o to, że późne wiązanie postanawia lokalizację zewnętrznych bibliotek w czasie wykonywania, a tym samym nie złamie, chyba że poza biblioteka nie jest zainstalowana lub nie jest prawidłowo zarejestrowane. Z późnym wiązaniem możesz pułapkę dla obu tych warunków, ale z wczesnym wiązaniem, cała Twoja aplikacja Access po prostu pęka.