Waarom wordt access niet afgesloten?

Status
Niet open voor verdere reacties.

linkav

Gebruiker
Lid geworden
13 jun 2007
Berichten
465
2016-01-06_11-26-32.png2016-01-06_11-30-03.png

Hallo,

Ik heb een access 2010 applicatie waarbij ik op een formulier de knop "Exit database" heb gemaakt (zie printscreen in bijlage).

Onder deze knop staat de code:

Code:
Private Sub Exit_Click()
[ATTACH]256031.vB[/ATTACH]
'  Close all open database objects, and then exit application.
'
'  Turn on error trapping.
On Error GoTo ErrHandler
    
    Dim Tmp As Variant
    Dim ReturnValue As Integer

    Tmp = CloseObject("Tables", A_TABLE)
    Tmp = CloseObject("Tables", A_QUERY)
    Tmp = CloseObject("Forms", A_FORM)
    Tmp = CloseObject("Reports", A_REPORT)
    Tmp = CloseObject("Scripts", A_MACRO)
    Tmp = CloseObject("Modules", A_MODULE)
        
    '  Exit application.
    DoCmd.Quit
    Exit Sub

'  Branch here if error occurs.
ErrHandler:
    MsgBox "You must either save or discard changes to the open object.", 48, "Must Close Object"
    Resume Next

End Sub

De database wordt gesloten maar access blijft openstaan (zie printscreen in bijlage).
Wat kan de oorzaak hiervan zijn en hoe kan ikdit verhelpen?

Ter info: in de referenties verwijs ik nog wel naar een andere access-database met subroutine.

Graag hoor ikvan jullie
 

Bijlagen

  • 2016-01-06_11-30-59.png
    2016-01-06_11-30-59.png
    25,2 KB · Weergaven: 26
Ik vind de code waarmee je de db sluit niet helemaal jofel; ik gebruik liever deze functie:
Code:
Function CloseAll()
Dim obj As AccessObject, dbs As Object
    
    On Error Resume Next
    'Set CurrentProject Object properties
    Set dbs = Application.CurrentProject
    For Each obj In dbs.AllForms    ' Open AccessObject objects in AllForms collection.
        If obj.IsLoaded = True Then
            DoCmd.Close acForm, obj.Name, acSaveYes
        End If
    Next obj

    For Each obj In dbs.AllReports    ' Open AccessObject objects in AllReports collection.
        If obj.IsLoaded = True Then
            DoCmd.Close acReport, obj.Name, acSaveYes
        End If
    Next obj

    'Set CurrentData Object properties
    Set dbs = Application.CurrentData
    For Each obj In dbs.AllQueries    ' Open AccessObject objects in AllQueries collection.
        If obj.IsLoaded = True Then
            DoCmd.Close acQuery, obj.Name, acSaveYes
        End If
    Next obj

    For Each obj In dbs.AllTables    ' Open AccessObject objects in AllTables collection.
        If obj.IsLoaded = True Then
            DoCmd.Close acTable, obj.Name, acSaveYes
        End If
    Next obj

End Function
En dat werkt prima:
Code:
Private Sub cmdSluiten_Click()
    Call CloseAll
    Application.Quit
End Sub
 
Hallo OctaFish,

De code werkt ook maar het probleem is niet verholpen.. De applicatie wordt afgesloten, access niet.

kan het te maken hebben met het feit dat ik refereer naar een andere applicatie? 2016-01-06_12-21-25.png

Graag hoor ik van je.
 
Die referentie heb je toch in de db zitten die is afgesloten? Dan zou die ook weg moeten zijn. Ik kan je probleem niet reproduceren vrees ik, bij mij worden alle db's (ook die met koppelingen naar SQL server etc.) gewoon helemaal afgesloten. Maar desnoods herhaal je de Application.Quit regel een paar keer. Uiteindelijk zal hij genoeg afgesloten hebben :).
 
Hallo Octafish,

Zelfs het 100x herhalen van de regel 'Application.Quit' helpt niet...

Heb je nog een mogelijke oplossing?
 
Opnieuw bouwen zonder de ref :).
Maar je kunt zoiets nog eens proberen:
Code:
Dim ref As Reference
'Of, als Reference niet werkt, onderstaande variant:
'Dim ref As Object
    
    On Error Resume Next
    'Remove References
   For Each ref In References
        Set ref = References(RefName)
        References.Remove ref
   Next
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan