Jak vzdáleně vypnout vlastní aplikaci accessu

Pokročilé: Vyžaduje odborné kódování, interoperabilitu a víceuživatelské dovednosti.

Tento článek se týká pouze databáze aplikace Microsoft Access (.mdb nebo .accdb).

Souhrn

Někdy může být nutné provádět úlohy údržby databáze aplikace Microsoft Access, jako je komprimace nebo oprava, vytváření záložních kopií nebo úpravy návrhu. Mnoho z těchto operací vyžaduje, aby všichni uživatelé opustili databázi. Neexistuje však žádný předdefinovaný způsob, jak vynutit uživatele ukončit aplikaci Microsoft Access. A není vhodné odpojit uživatele od síťových řešení. To může způsobit poškození databáze.

Tento článek ukazuje jeden z přístupů, které můžete použít k řádnému vypnutí front-endové databázové aplikace Accessu. Mnoho z těchto konceptů můžete také použít ke komprimování nebo opravě databáze, vytváření záložních kopií atd.

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci, bez žádné záruky výslovně uvedené nebo odvozené, včetně, bez omezení, odvozených záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že uživatel je obeznámen s programovacím jazykem, který je předmětem ukázky, a s nástroji použitými pro vytvoření a ladění skriptu. Pracovníci technické podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo konstrukce podle konkrétních požadavků uživatele.

Další informace

Jak řešení funguje

Řešení funguje následovně. Na serveru je ve složce soubor. Tento soubor se dá pojmenovat libovolným způsobem. Pro toto řešení se používá soubor s názvem chkfile.ozx. Když se tento soubor přejmenuje nebo odstraní, upozorní aplikaci front-end Access, že se musí zavřít.

Vytvoří se formulář, který se otevře, když uživatelé spustí front-endovou databázovou aplikaci. Tento formulář zkontroluje existenci souboru na serveru v nastaveném intervalu. Používá k tomu vlastnost TimerInterval a událost OnTimer.

Pokud se soubor najde, nic se nestane. Pokud se soubor nenajde, formulář zobrazí jiný formulář, který uživatele upozorní, že databáze se v zadaném čase automaticky zavře.

Poznámka

Toto řešení nepoužívá funkci MsgBox k upozornění uživatele. Funkce MsgBox bude čekat na vstup uživatele před spuštěním libovolného kódu. To by zmařilo účel řešení.

Pro řádné zavření klientských relací toto řešení přejmenuje kontrolovaný soubor. Po dokončení všeho, co je třeba provést, toto řešení přejmenuje soubor zpět na původní název. Uživatelé tak můžou vědět, že můžou znovu spustit front-end databázi.

Tento proces lze také automatizovat, aby poskytoval bezobslužnou operaci pomocí naplánované služby na serveru, která v určených časech přejmenuje soubor chkfile.ozx.

Postup vytvoření ukázkového scénáře

Abyste si ukázali, jak toto řešení funguje, budete muset mít následující:

  • Složka na pevném disku s cestou C:\MyData.
  • Prázdný soubor. Toto řešení zkontroluje přítomnost tohoto souboru.
  • Návrh rozdělené databáze s tabulkami v souboru back-end databáze a odkazy na danou tabulku ve front-end databázi. Front-end databáze bude obsahovat kód, který zkontroluje existenci souboru v nastaveném intervalu a pak uživatele upozorní.

Vytvoření složky pro ukázkovou aplikaci

Vytvořte složku v kořenovém adresáři jednotky C a pojmenujte ji MyData.

Vytvoření prázdného textového souboru

  1. Ve složce MyData vytvořte nový textový soubor a pojmenujte ho chkfile.txt.
  2. Přejmenujte textový soubor tak, aby byl příponou ozx (chkfile.ozx). Po zobrazení výzvy potvrďte, že chcete změnit příponu souboru.

Vytvoření back-endové databáze

  1. Ve složce C:\MyData vytvořte novou databázi a pojmenujte ji Northwind_Be.mdb.
  2. Importujte tabulku Customers z ukázkové databáze Northwind do databáze Northwind_Be.mdb. (Ve výchozím nastavení se Northwind nachází ve složce C:\Program Files\Microsoft Office\Office10\Samples.)
  3. Zavřete databázi.

Vytvoření front-end databáze

  1. Vytvořte další novou databázi a pojmenujte ji Northwind_Fe.mdb.
  2. Propojení tabulky Customers z databáze Northwind_Be.mdb s novou Northwind_Fe.mdb
  3. Vytvořte automatický formulář založený na propojené tabulce Zákazníci a uložte ho jako frmCustomers. Zavřete tento formulář.

Vytvoření formuláře s kódem, který kontroluje existenci souboru

  1. Vytvořte nevázaný formulář a uložte ho s názvem frmAppShutDown. V produkční databázi by byl tento formulář obvykle vždy otevřený, ale nebyl viditelný. Pro tuto ukázku ji můžete nechat otevřenou jako obvykle.
  2. Nastavte vlastnost TimerInterval formuláře na 60000 milisekund. Tato hodnota je rovna jedné minutě. (V případě vlastního řešení můžete tento časový interval prodloužit nebo prodloužit.)
  3. V aplikaci Microsoft Office Access 2003 nebo ve starších verzích Accessu klikněte v návrhovém zobrazení formuláře frmAppShutDown v nabídce Zobrazení na tlačítko Kód. V aplikaci Microsoft Office Access 2007 klikněte v návrhovém zobrazení formuláře frmAppShutDown na kartu Návrh a potom klikněte na Zobrazit kód ve skupině Nástroje . Zadejte nebo vložte následující kód:
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. Uložte a zavřete formulář.

Vytvoření formuláře, který bude sloužit k upozornění uživatele

Poznámka

Nepoužívejte funkci MsgBox k upozornění uživatele. Funkce MsgBox bude čekat na vstup uživatele před spuštěním libovolného kódu. To by zmařilo účel řešení.

  1. Vytvořte nevázaný formulář a pojmenujte ho frmAppShutDownWarn. Přidejte následující ovládací prvek textového pole:

    Name: txtWarning
    Type: Textbox
    
  2. Uložte a zavřete formulář.

  3. Vytvořte makro, které při spuštění otevře formulář frmCustomer a formulář frmAppShutDown. Makro pojmenujte autoexec.

  4. Zavřete a znovu otevřete databázi.

  5. Přejmenujte chkfile.ozx na chkfile.old.

Načasování událostí řešení

Poznámka

Všechny následující časy jsou přibližné a začínají po přejmenování souboru chkfile.ozx.

  • Minutu nebo méně: Northwind_FE.mdb si všimne, že kontrolovaný soubor chybí.
  • Dvě minuty: V Northwind_FE.mdb se otevře formulář s oznámením, že se databáze za jednu minutu zavře.
  • Tři minuty: Northwind_FE.mdb se automaticky zavře a uloží se veškerá práce.