【问题标题】:MS Access VB COM Shared AddIn Stops Access ClosingMS Access VB COM 共享插件停止访问关闭
【发布时间】:2009-01-20 09:56:43
【问题描述】:

我在 Visual Studio 2008 中创建了一个共享加载项并使用共享 加载项向导并在 VB 中进行编码。在 Access 2003 中运行加载项时,我想要 检查用户是否打开了数据库,所以我设置了一个 AccessApplication 变量成为 OnConnection 过程中的应用程序对象,然后 在按钮上单击我检查 AccessApplication.CurrentDB 是否为空 如果没有数据库打开Access会在按钮后正确关闭 点击。 但是如果数据库是打开的,那么我必须在 VS 调试器中停止 Access。

请在下面找到我的 OnConnection、OnDisconnection 和 OnClick 程序 非常感谢您对此事的任何帮助。

Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection
    m_oTestMenu.Delete()
    m_oTestBtn.Delete()

    m_oTestMenu = Nothing
    m_oTestBtn = Nothing

    AccessApplication = Nothing
End Sub

Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection
    Dim oCommandBars As Microsoft.Office.Core.CommandBars

    On Error GoTo ErrHandler

    AccessApplication = CType(application, Microsoft.Office.Interop.Access.Application)

    oCommandBars = AccessApplication.CommandBars

    ' Add the menu to the existing menu list
    m_oTestMenu = AddMenu(oCommandBars, "Test", "Test")

    ' Now create menu options
    m_oTestBtn = AddMenuButton(m_oTestMenu, _
        "TestBtn", MsoButtonStyle.msoButtonIconAndCaption, "Test Btn", MsoButtonState.msoButtonUp)

    ' Clean up
    oCommandBars = Nothing
    Exit Sub 

错误处理程序: oCommandBars = 无 MsgBox("错误") 结束子

Private Sub m_oTestBtn_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean) Handles m_oTestBtn.Click
    Dim AccessDB As dao.Database

    On Error GoTo ErrHandler

    AccessDB = AccessApplication.CurrentDb

    MsgBox("DB Found " & AccessDB.Name)

    'Try To Close Everything
    AccessDB.Close()
    AccessDB = Nothing

    AccessApplication.CurrentDb.Close()
    AccessApplication = Nothing

    Exit Sub

错误处理程序: MsgBox("点击错误") AccessDB = 没有 结束子

【问题讨论】:

  • 这一行“AccessApplication.CurrentDb.Close()”是浪费打字,因为关闭对当前在 Access UI 中打开的应用没有影响。

标签: vb.net ms-access add-in


【解决方案1】:

找到这篇文章

http://www.xtremevbtalk.com/showthread.php?t=160433

看来我需要在 OnDisconnect 过程结束时手动进行垃圾收集。

已添加

        GC.Collect()
    GC.WaitForPendingFinalizers()

到 OnDisconnect 函数的末尾 Access 现在关闭

希望这对其他人有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多