MS Access VB COM Shared AddIn останавливает закрытие доступа - PullRequest
0 голосов
/ 20 января 2009

Я создал общую надстройку в Visual Studio 2008 и использую общую Мастер надстроек и пишу в VB. При запуске надстройки в Access 2003 я хочу чтобы проверить, есть ли у пользователя открытая база данных, я установил AccessApplication переменная, чтобы быть объектом приложения в процедуре OnConnection, а затем при нажатии кнопки я проверяю, является ли AccessApplication.CurrentDB пустым Если база данных не открыта, Access закроется правильно после нажатия кнопки. щелкнул. Но если база данных открыта, то я должен остановить доступ в отладчике VS.

Ниже приведены мои процедуры 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 

ErrHandler: oCommandBars = ничего MsgBox ( "Ошибка") End Sub

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

ErrHandler: MsgBox («Ошибка клика») AccessDB = ничего End Sub

1 Ответ

2 голосов
/ 20 января 2009

Найдя эту статью

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

Похоже, мне нужно было вручную собирать мусор в конце процедуры OnDisconnect.

Добавив

        GC.Collect()
    GC.WaitForPendingFinalizers()

До конца функции OnDisconnect Access теперь закрывается

Надеюсь, что это поможет другим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...