Como encerrar remotamente uma aplicação personalizada do Access
Avançado: requer codificação especializada, interoperabilidade e competências multiutilizadas.
Este artigo aplica-se apenas a uma base de dados do Microsoft Access (.mdb ou .accdb).
Resumo
Por vezes, poderá ter de realizar tarefas de manutenção numa base de dados do Microsoft Access, como compactar ou reparar, fazer cópias de segurança ou efetuar modificações de estrutura. Muitas destas operações exigem que todos os utilizadores saiam da base de dados. No entanto, não existe uma forma incorporada de forçar os utilizadores a abandonarem o Microsoft Access. E não é boa ideia desligar apenas o utilizador das Soluções de rede. Isto pode fazer com que a base de dados fique danificada.
Este artigo mostra-lhe uma abordagem que pode utilizar para encerrar corretamente uma aplicação de base de dados do Access de front-end. Também pode utilizar muitos destes conceitos para compactar ou reparar a base de dados, fazer cópias de segurança, etc.
A Microsoft fornece exemplos de programação apenas a título informativo, sem qualquer garantia expressa ou implícita, incluindo, sem limitações, as garantias implícitas de comercialização e/ou adequação a um fim específico. Este artigo pressupõe que o utilizador está familiarizado com a linguagem de programação demonstrada e as ferramentas utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às suas necessidades específicas.
Mais informações
Como Funciona a Solução
A solução funciona da seguinte forma. Num servidor, existe um ficheiro numa pasta. Este ficheiro pode ter o nome de qualquer coisa. Para esta solução, é utilizado um ficheiro com o nome chkfile.ozx. Quando este ficheiro é renomeado ou eliminado, notifica a aplicação do Access de front-end que tem de fechar.
É criado um formulário que é aberto quando os utilizadores iniciam a aplicação de base de dados de front-end. Este formulário verifica a existência do ficheiro no servidor num intervalo definido. Utiliza a propriedade TimerInterval e o evento OnTimer para o fazer.
Se o ficheiro for encontrado, nada acontece. Se o ficheiro não for encontrado, o formulário apresentará outro formulário para avisar o utilizador de que a base de dados será fechada automaticamente num determinado período de tempo.
Nota
Esta solução não utiliza a função MsgBox para avisar o utilizador. A função MsgBox aguardará pela entrada do utilizador antes de executar qualquer código. Isto iria derrotar o propósito da solução.
Para fechar corretamente as sessões de cliente, esta solução muda o nome do ficheiro que está a ser verificado. Quando tudo o que tem de ser realizado estiver concluído, esta solução muda o nome do ficheiro novamente para o nome original. Isto permite que os utilizadores saibam que podem iniciar novamente a base de dados de front-end.
Este processo também pode ser automatizado para fornecer uma operação autónoma através de um serviço agendado no servidor que muda o nome de chkfile.ozx em alturas especificadas.
Passos para Criar um Cenário de Exemplo
Para demonstrar como funciona esta solução, terá de ter o seguinte:
- Uma pasta no disco rígido com um caminho de C:\MyData.
- Um ficheiro vazio. Esta solução irá verificar a presença deste ficheiro.
- Uma estrutura de base de dados dividida com as tabelas num ficheiro de base de dados de back-end e ligações para essa tabela na base de dados de front-end. A base de dados de front-end irá conter o código que verifica a existência do ficheiro num intervalo definido e, em seguida, avisa o utilizador.
Criar a pasta para a aplicação de exemplo
Crie uma pasta no diretório de raiz da unidade C e dê-lhe o nome MyData.
Criar o ficheiro de texto vazio
- Crie um novo ficheiro de texto na pasta MyData e dê-lhe o nome chkfile.txt.
- Mude o nome do ficheiro de texto para que tenha uma extensão de ozx (chkfile.ozx). Quando lhe for pedido, confirme que pretende alterar a extensão do ficheiro.
Criar a base de dados de back-end
- Crie uma nova base de dados na pasta C:\MyData e dê-lhe o nome Northwind_Be.mdb.
- Importe a tabela Clientes da base de dados de exemplo northwind para a base de dados Northwind_Be.mdb. (Por predefinição, a Northwind está localizada em C:\Programas\Microsoft Office\Office10\Samples.)
- Feche a base de dados.
Criar a base de dados de front-end
- Crie outra nova base de dados e dê-lhe o nome Northwind_Fe.mdb.
- Ligar a tabela Clientes da base de dados Northwind_Be.mdb ao novo Northwind_Fe.mdb
- Crie um Formulário Automático com base na tabela Clientes ligada e guarde-o como frmCustomers. Feche este formulário.
Criar o formulário com código que verifica a existência do ficheiro
- Crie um formulário não vinculado e guarde-o com o nome frmAppShutDown. Numa base de dados de produção, este formulário normalmente estaria sempre aberto, mas não visível. Para este exemplo, pode ser deixado aberto como habitualmente.
- Defina a propriedade TimerInterval do formulário como 60 0000 milissegundos. Isto é igual a um minuto. (Para a sua própria solução, pode aumentar ou diminuir este intervalo de tempo.)
- No Microsoft Office Access 2003 ou em versões anteriores do Access, na vista Estrutura do formulário frmAppShutDown, clique em Código no menu Ver . No Microsoft Office Access 2007, na vista Estrutura do formulário frmAppShutDown, clique no separador Estrutura e, em seguida, clique em Ver Código no grupo Ferramentas . Escreva 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
- Guarde e, em seguida, feche o formulário.
Criar o formulário que servirá para avisar o utilizador
Nota
Não utilize a função MsgBox para avisar o utilizador. A função MsgBox aguardará pela entrada do utilizador antes de executar qualquer código. Isto iria derrotar o propósito da solução.
Crie um formulário não vinculado e dê-lhe o nome frmAppShutDownWarn. Adicione o seguinte controlo de caixa de texto:
Name: txtWarning Type: Textbox
Guarde e feche o formulário.
Crie uma macro que abra o formulário frmCustomer e o formulário frmAppShutDown no arranque. Dê o nome autoexec à macro.
Feche e reabra a base de dados.
Mude o nome chkfile.ozx para chkfile.old.
Temporização dos Eventos de Solução
Nota
Todas as horas seguintes são aproximadas e começam após o nome de chkfile.ozx.
- Um minuto ou menos: Northwind_FE.mdb irá reparar que o ficheiro que está a ser verificado está em falta.
- Dois minutos: será aberto um formulário no Northwind_FE.mdb, notificando-o de que a base de dados será fechada dentro de um minuto.
- Três minutos: Northwind_FE.mdb fechará automaticamente e guardará todo o trabalho.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários