Como desligar um aplicativo de acesso personalizado remotamente

Avançado: requer habilidades de codificação, interoperabilidade e multioperabilidade de especialistas.

Este artigo aplica-se apenas a um banco de dados do Microsoft Access (.mdb ou .accdb).

Resumo

Às vezes, você pode ter que executar tarefas de manutenção em um banco de dados do Microsoft Access, como compactar ou reparar, fazer cópias de backup ou fazer modificações de design. Muitas dessas operações exigem que todos os usuários saiam do banco de dados. No entanto, não há uma maneira interna de forçar os usuários a abandonar o Microsoft Access. E não é uma boa ideia apenas desconectar o usuário das soluções de rede. Isso pode fazer com que o banco de dados fique corrompido.

Este artigo mostra uma abordagem que você pode usar para desligar graciosamente um aplicativo de banco de dados do Access de front-end. Você também pode usar muitos desses conceitos para compactar ou reparar o banco de dados, fazer cópias de backup e assim por diante.

A Microsoft oferece exemplos de programação somente para ilustração, sem garantias expressas ou implícitas. Isso inclui, mas não está limitado a, as garantias implícitas de qualidade comercial ou conformidade para uma determinada finalidade. Este artigo supõe que você conhece a linguagem de programação que está sendo demonstrada e as ferramentas usadas nos processos de criação e depuração. Os engenheiros de suporte da Microsoft podem ajudá-lo, fornecendo a explicação da funcionalidade de determinado procedimento, mas não modificarão estes exemplos para fornecer funcionalidade adicional nem criarão procedimentos específicos para atender às suas necessidades específicas.

Mais informações

Como funciona a solução

A solução funciona da seguinte maneira. Em um servidor, há um arquivo em uma pasta. Esse arquivo pode ser nomeado qualquer coisa. Para essa solução, um arquivo chamado chkfile.ozx é usado. Quando esse arquivo é renomeado ou excluído, ele notifica o aplicativo de acesso de front-end que ele precisa fechar.

Um formulário é criado que é aberto quando os usuários iniciam o aplicativo de banco de dados front-end. Esse formulário verifica a existência do arquivo no servidor em um intervalo definido. Ele usa a propriedade TimerInterval e o evento OnTimer para fazer isso.

Se o arquivo for encontrado, nada acontecerá. Se o arquivo não for encontrado, o formulário exibirá outro formulário para avisar o usuário de que o banco de dados será fechado automaticamente em um período especificado.

Observação

Essa solução não usa a função MsgBox para avisar o usuário. A função MsgBox aguardará a entrada do usuário antes de executar qualquer código. Isso derrotaria o propósito da solução.

Para fechar normalmente as sessões do cliente, essa solução renomeia o arquivo que está sendo verificado. Quando tudo o que precisa ser feito é concluído, essa solução renomeia o arquivo de volta para o nome original. Isso permite que os usuários saibam que podem iniciar o banco de dados front-end novamente.

Esse processo também pode ser automatizado para fornecer operação autônoma usando um serviço agendado no servidor que renomeia chkfile.ozx em horários especificados.

Etapas para criar um cenário de exemplo

Para demonstrar como essa solução funciona, você terá que ter o seguinte:

  • Uma pasta no disco rígido com um caminho de C:\MyData.
  • Um arquivo vazio. Essa solução marcar para a presença deste arquivo.
  • Um design de banco de dados dividido com as tabelas em um arquivo de banco de dados de back-end e links para essa tabela no banco de dados front-end. O banco de dados front-end conterá o código que verifica a existência do arquivo em um intervalo definido e, em seguida, avisa o usuário.

Criando a pasta para o aplicativo de exemplo

Crie uma pasta no diretório raiz da unidade C e nomeie-a como MyData.

Criando o arquivo de texto vazio

  1. Crie um novo arquivo de texto na pasta MyData e nomeie-o chkfile.txt.
  2. Renomeie o arquivo de texto para que ele tenha uma extensão de ozx (chkfile.ozx). Quando você for solicitado, confirme se deseja alterar a extensão do arquivo.

Criando o banco de dados de back-end

  1. Crie um novo banco de dados na pasta C:\MyData e nomeie-o Northwind_Be.mdb.
  2. Importe a tabela Clientes do banco de dados de exemplo Northwind para o banco de dados Northwind_Be.mdb. (Por padrão, Northwind está localizado no C:\Program Files\Microsoft Office\Office10\Samples.)
  3. Close the database.

Criando o banco de dados front-end

  1. Crie outro novo banco de dados e nomeie-o Northwind_Fe.mdb.
  2. Vincular a tabela Clientes do banco de dados Northwind_Be.mdb ao novo Northwind_Fe.mdb
  3. Crie uma AutoForm com base na tabela Clientes vinculados e salve-a como frmCustomers. Feche este formulário.

Criando o formulário com código que verifica a existência do arquivo

  1. Crie um formulário de desvinculação e salve-o com o nome frmAppShutDown. Em um banco de dados de produção, esse formulário normalmente sempre estaria aberto, mas não visível. Para este exemplo, ele pode ser deixado aberto como de costume.
  2. Defina a propriedade TimerInterval do formulário como 60000 milissegundos. Isso é igual a um minuto. (Para sua própria solução, você pode aumentar ou falecer neste intervalo de tempo.)
  3. No Microsoft Office Access 2003 ou em versões anteriores do Access, na exibição Design do formulário frmAppShutDown, clique em Código no menu Exibir . No Microsoft Office Access 2007, na exibição Design do formulário frmAppShutDown, clique na guia Design e clique em Exibir Código no grupo Ferramentas . Digite ou cole o seguinte código:
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. Salve e feche o formulário.

Criando o formulário que servirá para avisar o usuário

Observação

Não use a função MsgBox para avisar o usuário. A função MsgBox aguardará a entrada do usuário antes de executar qualquer código. Isso derrotaria o propósito da solução.

  1. Crie um formulário desvinculado e nomeie-o como frmAppShutDownWarn. Adicione o seguinte controle de caixa de texto:

    Name: txtWarning
    Type: Textbox
    
  2. Salve e feche o formulário.

  3. Crie uma macro que abrirá o formulário frmCustomer e o formulário frmAppShutDown na inicialização. Nomeie a macro autoexec.

  4. Feche e reabra o banco de dados.

  5. Renomeie chkfile.ozx para chkfile.old.

Tempo de eventos de solução

Observação

Todos os horários a seguir são aproximados e começam após a renomeação de chkfile.ozx.

  • Um minuto ou menos: Northwind_FE.mdb observará que o arquivo que está sendo verificado está ausente.
  • Dois minutos: um formulário será aberto em Northwind_FE.mdb, notificando que o banco de dados fechará em um minuto.
  • Três minutos: Northwind_FE.mdb fechará automaticamente e salvará todo o trabalho.