Newsgroup: it.comp.appl.access
Titolo: chiusura database esterni per aggiornamento frontend

Buongiorno  a tutti.
Premetto che ho guardato diverse modalità per aggiornare i front-end, ma per le mie capacità, la più facile , probabilmente più macchinosa è la seguente:
ho un database con solo la form di autenticazione e scelta programma da aprire.
Prima di aprire l'applicazione selezionata dalla combo, verifico se la versione del programma sito in una cartella specifica del server sia più aggiornata di quella presente nella cartella Documenti dell'user.
Il codice è il seguente:
Private Sub VerificaAggiornamenti()
Dim intRisMes As Integer
Dim strFile As String
Dim dbs As Database
Dim dbsAggiornamenti As Database
Dim rst As Recordset
Dim rstAggiornamenti As Recordset
Dim lngVersione As Long
Dim lngVersioneAggiornamenti As Long
Dim FirstLocation As String
Dim SecondLocation As String
 
    strFile = Replace(Me.cmbProgramma.Column(0), " ", "")
    Set dbs = OpenDatabase(CurrentProject.Path & "\" & strFile & ".mdb")
    Set rst = dbs.OpenRecordset("tblProgrammaDettagli")
    Set dbsAggiornamenti = OpenDatabase("D:\Aggiornamenti" & "\" & strFile & ".mdb")
    Set rstAggiornamenti = dbsAggiornamenti.OpenRecordset("tblProgrammaDettagli")
    If Dir(CurrentProject.Path & "\" & strFile & ".mdb") = "" Then
        MsgBox " Non trovato il programma.", vbCritical, ""
    Else
        lngVersione = rst.Fields("Versione") * 1
        lngVersioneAggiornamenti = rstAggiornamenti.Fields("Versione") * 1
        If lngVersione < lngVersioneAggiornamenti Then
            intRisMes = MsgBox("Esiste una versione aggiornata del programma. " & vbLf & vbLf & _
                               "Vuoi procedere con l'installazione?", vbQuestion + vbYesNo + vbDefaultButton1, "")
            If intRisMes = vbNo Then
                ApriProgramma
                Exit Sub
            Else
                FirstLocation = CurrentProject.Path & "\" & strFile & ".mdb"
                SecondLocation = "D:\MultiSystemDati\Aggiornamenti" & "\" & strFile & ".mdb"
 
                FileCopy FirstLocation, SecondLocation
                MsgBox "Aggiornamento completato.", vbInformation, ""
                ApriProgramma
            End If
        End If
    End If
End Sub
 
Funziona tutto fino al rigo FileCopy FirstLocation, SecondLocation
in quanto i due database da cui ho confrontato le versioni risultano aperti e quindi non sovrascrive il file ed esce il messaggio errore di run-time '70' - Autorizzazione negata.
Come chiudo i due database prima del FileCopy?
Grazie.
Giuseppe


Aggiunto
 dbs.Close
 dbsAggiornamenti.Close
prima dell'istruzione FileCopy che ho modificato in FileCopy SecondLocation, FirstLocation (i percorsi erano invertiti).
I due file si sono chiusi e la copia è avvenuta con successo.
Giuseppe

Proprio oggi volevo fare la stessa domanda e me la ritrovo gia pronta :-)
Non ho la soluzione, ma nel caso in cui i file siano sul server si potrebbe usare la Microsoft Management Console (credo funzioni anche da riga di comando) per "buttare giu" un file aperto.
Piu difficile è invece la mia situazione in quanto il frontend risiede sul PC dell'utente e vi accedo condividendo la cartella del PC:
come faccio a chiudere forzatamente un "accdb" ovvero il suo "laccdb"? 
Dal backend in Access oppure da riga di comando?


Non so se ho risposto alle domande, ma per esempio esiste il comando dos "TASKKILL" per chiudere un processo MSACCESS su un computer locale o remoto.
Vedere qui:
https://mecdata.it/2018/08/chiudere-un-processo-un-computer-remoto-windows/