Come arrestare un'applicazione di Accesso personalizzata in remoto

Avanzate: richiede competenze esperte di codifica, interoperabilità e multiutente.

Questo articolo si applica solo a un database di Microsoft Access (.mdb o .accdb).

Riepilogo

In alcuni casi, potrebbe essere necessario eseguire attività di manutenzione in un database di Microsoft Access, ad esempio la compattazione o la riparazione, l'esecuzione di copie di backup o l'esecuzione di modifiche alla progettazione. Molte di queste operazioni richiedono che tutti gli utenti escano dal database. Tuttavia, non esiste un modo predefinito per forzare gli utenti a uscire da Microsoft Access. E non è una buona idea disconnettere l'utente dalle soluzioni di rete. Ciò può causare il danneggiamento del database.

Questo articolo illustra un approccio che è possibile usare per arrestare normalmente un'applicazione di database di Access front-end. È anche possibile usare molti di questi concetti per compattare o ripristinare il database, creare copie di backup e così via.

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze.

Ulteriori informazioni

Funzionamento della soluzione

La soluzione funziona come segue. In un server è presente un file in una cartella. Questo file può essere denominato qualsiasi cosa. Per questa soluzione viene usato un file denominato chkfile.ozx. Quando questo file viene rinominato o eliminato, notifica all'applicazione di accesso front-end che deve essere chiusa.

Viene compilato un modulo che viene aperto quando gli utenti avviano l'applicazione di database front-end. Questo modulo verifica l'esistenza del file nel server a un intervallo impostato. A tale scopo vengono utilizzati la proprietà TimerInterval e l'evento OnTimer.

Se il file viene trovato, non accade nulla. Se il file non viene trovato, nel modulo verrà visualizzato un altro modulo per avvisare l'utente che il database verrà chiuso automaticamente in un determinato periodo di tempo.

Nota

Questa soluzione non usa la funzione MsgBox per avvisare l'utente. La funzione MsgBox attenderà l'input dell'utente prima di eseguire qualsiasi codice. Ciò vanifica lo scopo della soluzione.

Per chiudere normalmente le sessioni client, questa soluzione rinomina il file da controllare. Al termine dell'operazione, questa soluzione rinomina il file con il nome originale. Ciò consente agli utenti di sapere che possono avviare di nuovo il database front-end.

Questo processo può anche essere automatizzato per fornire un'operazione automatica usando un servizio pianificato nel server che rinomina chkfile.ozx in orari specificati.

Passaggi per creare uno scenario di esempio

Per illustrare il funzionamento di questa soluzione, sarà necessario disporre di quanto segue:

  • Cartella del disco rigido con percorso C:\MyData.
  • File vuoto. Questa soluzione verificherà la presenza di questo file.
  • Progettazione di database diviso con le tabelle in un file di database back-end e collegamenti a tale tabella nel database front-end. Il database front-end conterrà il codice che controlla l'esistenza del file a un intervallo impostato e quindi avvisa l'utente.

Creazione della cartella per l'applicazione di esempio

Creare una cartella nella directory radice dell'unità C e denominarla MyData.

Creazione del file di testo vuoto

  1. Creare un nuovo file di testo nella cartella MyData e denominarlo chkfile.txt.
  2. Rinominare il file di testo in modo che abbia un'estensione di ozx (chkfile.ozx). Quando viene richiesto, verificare di voler modificare l'estensione del file.

Creazione del database back-end

  1. Creare un nuovo database nella cartella C:\MyData e denominarlo Northwind_Be.mdb.
  2. Importare la tabella Customers dal database di esempio Northwind nel database Northwind_Be.mdb. Per impostazione predefinita, Northwind si trova in C:\Programmi\Microsoft Office\Office10\Samples.
  3. Chiudere il database.

Creazione del database front-end

  1. Creare un altro nuovo database e denominarlo Northwind_Fe.mdb.
  2. Collegare la tabella Customers dal database Northwind_Be.mdb al nuovo Northwind_Fe.mdb
  3. Creare una maschera automatica basata sulla tabella Customers collegata e salvarla come frmCustomers. Chiudere il modulo.

Creazione del modulo con codice che verifica l'esistenza del file

  1. Creare un modulo non associato e salvarlo con il nome frmAppShutDown. In un database di produzione, questo modulo in genere è sempre aperto ma non visibile. Per questo esempio, può essere lasciato aperto come di consueto.
  2. Impostare la proprietà TimerInterval della maschera su 60000 millisecondi. Questo è uguale a un minuto. (Per la propria soluzione, è possibile aumentare o defunre questo intervallo di tempo.
  3. In Microsoft Office Access 2003 o nelle versioni precedenti di Access, nella visualizzazione Progettazione del modulo frmAppShutDown fare clic su Codice dal menu Visualizza . In Microsoft Office Access 2007, nella visualizzazione Progettazione del modulo frmAppShutDown, fare clic sulla scheda Progettazione e quindi su Visualizza codice nel gruppo Strumenti . Digitare o incollare il codice seguente:
Option Explicit
Dim boolCountDown As Boolean
Dim intCountDownMinutes As Integer

Private Sub Form_Open(Cancel As Integer)
    ' Set Count Down variable to false
    ' on the initial opening of the form.
    boolCountDown = False
End Sub

Private Sub Form_Timer()
On Error GoTo Err_Form_Timer
    Dim strFileName As String
    strFileName = Dir("c:\MyData\chkfile.ozx")
    If boolCountDown = False Then
        ' Do nothing unless the check file is missing.
        If strFileName <> "chkfile.ozx" Then
            ' The check file is not found so 
            ' set the count down variable to true and
            ' number of minutes until this session
            ' of Access will be shut down.
            boolCountDown = True
            intCountDownMinutes = 2
        End If
    Else
        ' Count down variable is true so warn
        ' the user that the application will be shut down
        ' in X number of minutes.  The number of minutes
        ' will be 1 less than the initial value of the
        ' intCountDownMinutes variable because the form timer
        ' event is set to fire every 60 seconds
        intCountDownMinutes = intCountDownMinutes - 1
        DoCmd.OpenForm "frmAppShutDownWarn"
        Forms!frmAppShutDownWarn!txtWarning = "This application will be shut down in approximately " & intCountDownMinutes & " minute(s).  Please save all work."
        If intCountDownMinutes < 1 Then
            ' Shut down Access if the countdown is zero,
            ' saving all work by default.
            Application.Quit acQuitSaveAll
        End If
    End If

Exit_Form_Timer:
    Exit Sub

Err_Form_Timer:
    Resume Next
End Sub

  1. Salvare e chiudere il modulo.

Creazione del modulo che servirà per avvisare l'utente

Nota

Non usare la funzione MsgBox per avvisare l'utente. La funzione MsgBox attenderà l'input dell'utente prima di eseguire qualsiasi codice. Ciò vanifica lo scopo della soluzione.

  1. Creare un modulo non associato e denominarlo frmAppShutDownWarn. Aggiungere il controllo casella di testo seguente:

    Name: txtWarning
    Type: Textbox
    
  2. Salvare e chiudere il modulo.

  3. Creare una macro che aprirà la maschera frmCustomer e la maschera frmAppShutDown all'avvio. Assegnare alla macro il nome autoexec.

  4. Chiudere e riaprire il database.

  5. Rinominare chkfile.ozx in chkfile.old.

Intervallo degli eventi della soluzione

Nota

Tutti i tempi seguenti sono approssimativi e iniziano dopo la ridenominazione di chkfile.ozx.

  • Un minuto o meno: Northwind_FE.mdb noterà che il file selezionato è mancante.
  • Due minuti: verrà aperto un modulo in Northwind_FE.mdb, che informa che il database verrà chiuso tra un minuto.
  • Tre minuti: Northwind_FE.mdb si chiuderà automaticamente e salverà tutto il lavoro.