如何以编程方式添加/删除引用?

时间:2009-02-27 10:33:30

标签: vb.net ms-access

我的应用程序是为VB.NET中的扫描MS Access数据库构建的。

当Access应用程序分发给最终用户时,它们可能具有不同版本的COM组件。是否可以通过编程方式添加/删除引用以解决由于版本不同而导致的损坏引用?

请与我分享代码或链接以供参考。

2 个答案:

答案 0 :(得分:10)

以下是一些示例代码:

从文件创建参考

  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 

删除参考

  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.

参考文献

  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

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

您可能还希望阅读 http://www.mvps.org/access/modules/mdl0022.htm

答案 1 :(得分:4)

最佳解决方案是将Access MDB中的引用限制为内部Access组件。这将是Access引用,VBA引用和DAO引用。所有其他外部库应该通过后期绑定来使用。例如,如果您正在使用文件系统对象而不是此(引用Windows脚本宿主对象模型):

  Dim objFSO As New FileSystemObject

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

你会删除引用并将其转换为:

  Dim objFSO As Object

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

如果您担心每次使用它时初始化FSO的性能损失,您可以缓存对它的引用。我通常在函数内部使用一个静态变量来返回一个这样的对象:

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

现在,您可能希望获得幻想并且还能够拆除实例化对象,在这种情况下,您可以执行以下操作:

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

在任何情况下,重点是后期绑定在运行时解析外部库的位置,因此不会中断,除非未安装外部库或未正确注册。使用后期绑定,您可以捕获这两种情况,但是通过早期绑定,您的整个Access应用程序都会中断。