Een aangepaste Access-toepassing extern afsluiten

Geavanceerd: vereist professionele codering, interoperabiliteit en vaardigheden voor meerdere gebruikers.

Dit artikel is alleen van toepassing op een Microsoft Access-database (.mdb of .accdb).

Samenvatting

Soms moet u onderhoudstaken uitvoeren op een Microsoft Access-database, zoals comprimeren of herstellen, back-ups maken of ontwerpwijzigingen aanbrengen. Voor veel van deze bewerkingen moeten alle gebruikers de database verlaten. Er is echter geen ingebouwde manier om gebruikers af te dwingen Microsoft Access af te sluiten. En het is geen goed idee om de gebruiker los te koppelen van netwerkoplossingen. Hierdoor kan de database beschadigd raken.

In dit artikel wordt één benadering beschreven die u kunt gebruiken om een front-end Access-databasetoepassing probleemloos af te sluiten. U kunt veel van deze concepten ook gebruiken om de database te comprimeren of te herstellen, back-ups te maken, enzovoort.

Microsoft verstrekt programmeervoorbeelden alleen ter illustratie, zonder expliciete of impliciete garantie. daaronder mede begrepen, maar niet beperkt tot impliciete garanties met betrekking tot de verkoopbaarheid en/of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend bent met de programmeertaal VBScript, alsmede met de hulpprogramma's waarmee procedures worden gemaakt en waarmee fouten in procedures worden opgespoord. U kunt desgewenst contact opnemen met Microsoft Product Support Services voor uitleg over de functie van een bepaalde procedure. Microsoft Product Support Services is echter niet bereid de voorbeelden aan te passen om extra functies toe te voegen of om procedures te maken die aan uw specifieke eisen voldoen.

Meer informatie

Hoe de oplossing werkt

De oplossing werkt als volgt. Op een server bevindt zich een bestand in een map. Dit bestand kan van alles worden genoemd. Voor deze oplossing wordt een bestand met de naam chkfile.ozx gebruikt. Wanneer de naam van dit bestand wordt gewijzigd of verwijderd, wordt de front-end Access-toepassing gewaarschuwd dat het moet worden gesloten.

Er wordt een formulier gemaakt dat wordt geopend wanneer gebruikers de front-enddatabasetoepassing starten. Dit formulier controleert op het bestaan van het bestand op de server met een ingesteld interval. Hiervoor wordt gebruikgemaakt van de eigenschap TimerInterval en de gebeurtenis OnTimer.

Als het bestand wordt gevonden, gebeurt er niets. Als het bestand niet wordt gevonden, wordt in het formulier een ander formulier weergegeven om de gebruiker te waarschuwen dat de database binnen een opgegeven tijd automatisch wordt gesloten.

Opmerking

Deze oplossing maakt geen gebruik van de functie MsgBox om de gebruiker te waarschuwen. De functie MsgBox wacht op invoer van de gebruiker voordat code wordt uitgevoerd. Dit zou het doel van de oplossing teniet doen.

Als u clientsessies correct wilt sluiten, wijzigt deze oplossing de naam van het bestand dat wordt gecontroleerd. Wanneer alles wat moet worden bereikt, is voltooid, wijzigt deze oplossing de naam van het bestand in de oorspronkelijke naam. Hierdoor weten gebruikers dat ze de front-enddatabase opnieuw kunnen starten.

Dit proces kan ook worden geautomatiseerd om een bewerking zonder toezicht te bieden met behulp van een geplande service op de server die de naam chkfile.ozx op opgegeven tijdstippen wijzigt.

Stappen voor het maken van een voorbeeldscenario

Als u wilt laten zien hoe deze oplossing werkt, hebt u het volgende nodig:

  • Een map op de harde schijf met het pad C:\MyData.
  • Een leeg bestand. Deze oplossing controleert op de aanwezigheid van dit bestand.
  • Een gesplitst databaseontwerp met de tabellen in een back-enddatabasebestand en koppelingen naar die tabel in de front-enddatabase. De front-enddatabase bevat de code die met een ingesteld interval controleert op het bestaan van het bestand en vervolgens de gebruiker waarschuwt.

De map voor de voorbeeldtoepassing maken

Maak een map in de hoofdmap van station C en geef deze de naam MyData.

Het lege tekstbestand maken

  1. Maak een nieuw tekstbestand in de map MyData en noem het chkfile.txt.
  2. Wijzig de naam van het tekstbestand zodat het de extensie ozx (chkfile.ozx) heeft. Wanneer u hierom wordt gevraagd, bevestigt u dat u de bestandsextensie wilt wijzigen.

De back-enddatabase maken

  1. Maak een nieuwe database in de map C:\MyData en noem deze Northwind_Be.mdb.
  2. Importeer de tabel Klanten uit de voorbeelddatabase Northwind in de Northwind_Be.mdb database. (Northwind bevindt zich standaard in de C:\Program Files\Microsoft Office\Office10\Samples.)
  3. Sluit de database.

De front-enddatabase maken

  1. Maak nog een nieuwe database en noem deze Northwind_Fe.mdb.
  2. Koppel de tabel Klanten vanuit de Northwind_Be.mdb-database aan de nieuwe Northwind_Fe.mdb
  3. Maak een AutoForm op basis van de gekoppelde tabel Klanten en sla deze op als frmCustomers. Sluit dit formulier.

Het formulier maken met code die controleert op het bestaan van het bestand

  1. Maak een niet-afhankelijk formulier en sla dit op met de naam frmAppShutDown. In een productiedatabase is dit formulier normaal gesproken altijd geopend, maar niet zichtbaar. Voor dit voorbeeld kan het geopend blijven zoals u gewend bent.
  2. Stel de eigenschap TimerInterval van het formulier in op 60000 milliseconden. Dit is gelijk aan één minuut. (Voor uw eigen oplossing kunt u dit tijdsinterval verhogen of laten overlijden.)
  3. Klik in Microsoft Office Access 2003 of in eerdere versies van Access in de ontwerpweergave van het formulier frmAppShutDown op Code in het menu Beeld . Klik in Microsoft Office Access 2007 in de ontwerpweergave van het formulier frmAppShutDown op het tabblad Ontwerpen en klik vervolgens op Code weergeven in de groep Extra . Typ of plak de volgende code:
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. Sla het formulier op en sluit het.

Het formulier maken waarmee de gebruiker wordt gewaarschuwd

Opmerking

Gebruik de functie MsgBox niet om de gebruiker te waarschuwen. De functie MsgBox wacht op invoer van de gebruiker voordat code wordt uitgevoerd. Dit zou het doel van de oplossing teniet doen.

  1. Maak een niet-afhankelijk formulier en geef dit de naam frmAppShutDownWarn. Voeg het volgende besturingselement tekstvak toe:

    Name: txtWarning
    Type: Textbox
    
  2. Sla het formulier op en sluit het.

  3. Maak een macro waarmee het formulier frmCustomer en het formulier frmAppShutDown bij het opstarten worden geopend. Geef de macro de naam autoexec.

  4. Sluit de database en open deze opnieuw.

  5. Wijzig de naam van chkfile.ozx in chkfile.old.

Timing van oplossingsevenementen

Opmerking

Alle volgende tijden zijn bij benadering en beginnen na de naamswijziging van chkfile.ozx.

  • Eén minuut of minder: Northwind_FE.mdb ziet dat het bestand dat wordt gecontroleerd ontbreekt.
  • Twee minuten: er wordt een formulier geopend in Northwind_FE.mdb, met de melding dat de database over één minuut wordt gesloten.
  • Drie minuten: Northwind_FE.mdb wordt automatisch gesloten en al het werk wordt opgeslagen.