... Pague apenas R$67,00 uma única vez e tenha acesso por 1 ano aos vídeos e arquivos exemplos do site ...

Clique aqui e obtenha mais detalhes.


Impedindo a abertura de formulário pelo Painel de Navegação

Na maioria dos projetos é utilizado um formulário principal ou ribbons como uma forma de navegar pelo aplicativo, sem que o usuário tenha acesso ao Painel de Navegação.  Entretanto, há uma série de projetos, em que o acesso ao Painel de Navegação se faz necessário e em muitos casos é preciso restringir a abertura direta de certos formulários e relatórios; ou porque eles dependem de informações de outros formulários, para funcionarem corretamente; ou porque possuem dados sigilosos, que não podem ser acessados por qualquer usuário.

Isto é bem fácil de se programar.  Podemos passar, através do comando DOCMD, um valor qualquer para um formulário ou relatório , utilizando o argumento chamado OpenArgs.  De posse deste valor, o formulário ou o relatório pode usá-lo para várias situações e uma delas é a de impedir a sua abertura.

Se o usuário, então, tentar abrir o formulário diretamente pelo Painel de Navegação, a propriedade OpenArgs deste formulário estará com o valor nulo e aí programamos para que nesta situação não seja possível a abertura.

Veja o código do evento "ao abrir" do formulário como fica:

Private Sub Form_Open(Cancel As Integer)
If Nz(Me.OpenArgs, 0) = 0 Then Cancel = True
End Sub

A função Nz detecta se o valor do OpenArgs é nulo, substituindo-o pelo valor zero.  Na comparação temos 0=0 como condição verdadeira e o mecanismo de cancelamento é executado(cancel=true).

Para que seja possível a abertura do formulário nesta condição, temos que passar um valor qualquer diferente de zero para o OpenArgs.  E isto é feito através do comando DOCMD.  Veja o código abaixo:

DoCmd.OpenForm "NomeDoFormulário", , , , , , 3
 
Ou
 
DoCmd.OpenForm "NomeDoFormulário", OpenArgs:=3

O comando passará o valor 3 para a propriedade OpenArgs do formulário.  No evento "ao abrir" a condição IF se tornará falsa (3=0), permitindo a abertura do formulário.

Observe que qualquer valor diferente de nulo ou zero permitirá a abertura do formulário, possibilitando uma brecha na segurança.  Vamos fazer uma inversão no método: ao invés da abertura do formulário ser com qualquer valor, vamos permitir que ele seja aberto somente com valores específicos.

Veja o código modificado:

Private Sub Form_Open(Cancel As Integer)
Select Case Me.OpenArgs
  Case 3
    Exit Sub
  Case Else
    Cancel = True
End Select
End Sub

Significa que para qualquer valor diferente de 3, o formulário não se abrirá. Perceba que podemos utilizar outros "case" para atender às necessidades distintas na abertura do formulário.

Reforço na segurança

Transformando o seu aplicativo para extensão ACCDE e utilizando a programação descrita acima para impedir a abertura de certos formulários e relatórios, dificultará bastante o invasor, caso este entre no seu Painel de Navegação, sem a devida autorização.

Assista o vídeo e veja como isto funciona na prática.

Vídeo


 

Faça o login aqui para ter acesso ao vídeo.

 


 

 


2 comentário(s)

MARCIO MELO MARTINS   03/04/2010 11:33:00

Ótima solução encontrada, eu usava a função IsLoaded comparando quais forms poderiam ser abertos..., passar adotar a sua até porque mesmo quando usamos na prática o OpenArgs para levar algum valor já habilita a abertura do formulário. Bem que você poderia montar um curso de access aqui no RJ, nunca fiz um curso até porque quando tentei fazer só ensinavam a abrir o access e inserir dados na tabela, fui aprendendo na net com apostilas e hoje estou me reciclando com uma didática super moderna, parabéns mais uma vez... ainda nem instalei o access 2007, já adquiri seu MontaRibbons, estou para fechar negócio num notebook melhor para registrar definitivo, por isso ainda não informei..., o meu atual sinto que o access 2007 vai pesar um pouco... estou super ansioso para aplicar o que venho aprendendo aqui... Sou mais Brasil!

Jefferson Almeida   04/03/2013 20:16:30

E quando este form é um sub-formulário? Como eu defino OpenArgs sem abrir o form?


Envie seu comentário: