Criando uma InputBox com entrada para senha
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
A InputBox nativa do Access não tem recurso para esconder a senha digitada. Esta afirmação pode ser confirmada, se você abrir o VBA de seu aplicativo e na Janela Imediata (CTRL + G), digitar o comando abaixo e logo em seguida, dar <Enter>
? Inputbox("Entre com a senha...","Senha")
Ao digitar a senha, observe que a informação fica exposta:
Com um simples formulário e um pouco de programação é possível montar a nossa própria InputBox e incrementar o recurso de máscara para a digitação de senha.
Para alterar a máscara de um campo do formulário, pelo VBA, utilizamos a propriedade InputMask.
Me!txtValorDigitado.InputMask = "Password"
Com a configuração desta propriedade para Password (senha), são apresentados os asteriscos no lugar do valor digitado. Veja nesta imagem, o formulário personalizado:
É possível configurar o formulário InputBox com uma série de informações, tais como: mensagem, título, valor padrão e o tipo de máscara a ser usado no campo. Para isso, basta empregar a técnica do argumento OpenArgs, do comando Docmd.OpenForm. Observe abaixo, o código de abertura de um formulário:
DoCmd.OpenForm "frmTeste",,,,,,"Avelino Sampaio | João Henrique | 1234567"
O código pode ser também, escrito assim:
DoCmd.OpenForm "frmTeste",OpenArgs:="Avelino Sampaio | João Henrique | 1234567"
Agora, abra o formulário de teste e escreva a seguinte linha no evento "Ao abrir":
Private Sub Form_Open(Cancel As Integer) MsgBox Me.OpenArgs End Sub
Veja o resultado:
Observe que utilizei a barra vertical "|" para separar as informações. O Access possui uma função chamada de Split(), que usa uma "referência" para separar as informações numa cadeia. No nosso caso, vamos usar como referência a barra vertical "|". No evento "Ao abrir" do formulário de teste, utilize o seguinte código:
Private Sub Form_Open(Cancel As Integer) Dim k, strTexto As String
'-----------------------------------------------------------------
'Separa as informações, tendo como referência a barra vertical "|"
'----------------------------------------------------------------- k = Split(Me.OpenArgs, "|")
strTexto = "Nome Pai: " & k(0) & vbNewLine strTexto = strTexto & "Nome Filho: " & k(1) & vbNewLine strTexto = strTexto & "Código: " & k(2)
MsgBox strTexto End Sub
Ao rodar o comando Docmd.OpenForm acima, teremos o resultado conforme esta imagem:
O projeto
Leia com atenção os comentários da função InputBox2(), criada para chamar a caixa InputBox personalizada. Observe que os argumentos Mensagem, Título, Valor Padrão e Máscara pertencentes a função são passados para o formulário, através do OpenArgs.
Faça o login aqui para ter acesso ao código.
Ao ser aberto o formulário frmInputBox, os valores passados no argumento OpenArgs são distribuídos para os controles apropriados:
Private Sub Form_Open(Cancel As Integer) Dim k k = Split(Me.OpenArgs, "|") Me!txtMensagem = k(0) 'Recebe a mensagem Me.Caption = k(1) 'Recebe o título Me!txtValorDigitado = k(2) 'Recebe o valor padrão Me!txtValorDigitado.InputMask = k(3) 'Recebe a máscara End Sub
Baixe o arquivo e faça o teste:
Clique aqui e baixe o arquivo exemplo.
Abra a Janela Imediata (CTRL+G) do VBA, digite a linha exibida abaixo e dê <enter>:
? inputBox2("Entre com a senha...","Senha",,"PassWord")
A caixa InputBox é aberta com as informações que foram passadas. Digite uma senha qualquer e dê <enter>. O resultado digitado irá aparecer na Janela Imediata.
É possível ainda, utilizar a caixa InputBox para solicitar um outro tipo de informação. Vamos supor que eu queira solicitar que o usuário entre com uma determinada data. Veja como fica a função:
? inputBox2("Entre com a data de venda...","Data venda",,"00/00/000;0")
Observe o resultado:
Veja que no final da máscara, coloquei um ";0". Isso significa que o Access irá retornar a data digitada junto com a máscara. Sem isso, a data sairia no formato 10072016 e não no formato 10/07/2016.
Teste mais um exemplo, usando agora, uma máscara para a entrada de telefone celular:
? inputBox2("Celular de contato...","Celular",,"0-0000-0000;0")
Ao abrir o formulário frmClientes, a caixa InputBox personalizada é aberta e a senha de acesso, solicitada. O seguinte código foi utilizado no evento "ao abrir" do formulário:
Private Sub Form_Open(Cancel As Integer) Dim x As Variant x = InputBox2("Entre com a senha...", "Senha", , "password") If StrPtr(x) = 0 Then MsgBox "Você cancelou a entrada da senha...", vbInformation, "Aviso" Cancel = True 'impede a abertura do formulário Else If x <> "#456" Then MsgBox "Senha não confere...", vbInformation, "Aviso" Cancel = True 'impede a abertura do formulário End If End If End Sub
Basta passar para o seu projeto o formulário frmInputBox e o módulo mod_InputBox.
Sucesso!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Vídeo - Criando Ribbons parte 1 - Conhecendo a estrutura Xml
13 comentários Avelino Sampaio 06/11/2023 08:21:36 Antonio - faça um backup do seu projeto; - crie uma senha de acesso pela próprio Access; - passe a extensão de ACCDB para ACCDR; - utilize o meu aplicativo OPEN para dar partida no aplicativo, sem que o usuário tenha conhecimento da senha que vc criou; - quando então precisar ter acesso a estrutura, volte com a extensão para ACCDB e abra o seu aplicativo usando a senha criada. Para ter acesso ao OPEN é necessário ser nosso assinante. Aproveita que estamos com uma ótima promoção(Tudo por R$100,00) neste mês do Black Friday Veja o artigo do OPEN: http://www.usandoaccess.com.br/tutoriais/seguranca-microsoft-access-usando-o-open.asp?id=1#inicio E a página para adquirir a assinatura, caso esteja interessado. http://www.usandoaccess.com.br/tutoriais/aprenda-access-com-apostilas-videos-e-exemplos.asp?id=11#inicio Qualquer dúvida, não hesite em perguntar. ANTONIO FERREIRA DA SILVA NETO 06/11/2023 06:45:51 Bom dia, Avelino! Gostaria de saber como faço para criar uma senha de administrador para liberar acesso total a estrutura do meu banco de dados(Para poder fazer manutenção do sistema). Claudemir 10/10/2022 22:36:33 Muito bom Avelino, parabéns pelo sucesso em suas soluções! Paulo 07/10/2022 10:46:29 Nossa! quanto trabalho eu poderia ter poupado em alguns sistemas que não requeriam nada de sofisticado. Jose Baptista 06/10/2022 06:24:52 Grande Avelino! Obrigado por mais esta dica Abraço aan 04/10/2022 18:30:47 Uma sorte ter gurus neste forum. O meu muito o brigado. Alvaro Teixeira 04/10/2022 13:48:09 Obrigado pela partilha. Sempre aprender! Antonio Carlos 04/10/2022 11:45:21 Mestre Avelino Estava usando uma aqui com um monte de APIs. Muito mais simples essa sua. Valeu!!! Dr. Alessandro 04/02/2022 00:31:40 Bom dia, na verdade minha linha de comando foi essa: Private Sub Localizar_Sintomas_Click() Dim CaixaTexto Dim Sintoma VarCaixaTexto = InputBox("Digite os Sintomas", [Sintoma]) If VarCaixaTexto = Sintoma Then DoCmd.OpenForm "ePatologias", , , , , , Sintoma Private SubForm_Open (Cancel As Integer] - - - - - - - - >> ele não compilou isso, pediu ) DoCmd.OpenForm "ePatologias", OpenArgs:=Sintoma MsgBox Me.OpenArgs End Sub End If End Sub Dr. Alessandro 04/02/2022 00:31:39 Bom dia, na verdade minha linha de comando foi essa: Private Sub Localizar_Sintomas_Click() Dim CaixaTexto Dim Sintoma VarCaixaTexto = InputBox("Digite os Sintomas", [Sintoma]) If VarCaixaTexto = Sintoma Then DoCmd.OpenForm "ePatologias", , , , , , Sintoma Private SubForm_Open (Cancel As Integer] - - - - - - - - >> ele não compilou isso, pediu ) DoCmd.OpenForm "ePatologias", OpenArgs:=Sintoma MsgBox Me.OpenArgs End Sub End If End Sub Dr. Alessandro 04/02/2022 00:31:28 Bom dia, na verdade minha linha de comando foi essa: Private Sub Localizar_Sintomas_Click() Dim CaixaTexto Dim Sintoma VarCaixaTexto = InputBox("Digite os Sintomas", [Sintoma]) If VarCaixaTexto = Sintoma Then DoCmd.OpenForm "ePatologias", , , , , , Sintoma Private SubForm_Open (Cancel As Integer] - - - - - - - - >> ele não compilou isso, pediu ) DoCmd.OpenForm "ePatologias", OpenArgs:=Sintoma MsgBox Me.OpenArgs End Sub End If End Sub Dr. Alessandro 03/02/2022 23:45:28 Boa noite. Criei um humilde formulário de Doenças contendo: Causas (etiologia), sintomas, diagnóstico (se é R-x ou Exame de sangue, p.ex.), tratamento e doagem dos medicamentos (Posologia). Estou tentando criar uma caixa de pesquisa de algum sintoma ou sintomas (mesmo fora de ordem) que possa ser localizado no meu formulário, me indicando o nome da doença, o diagnóstico, o tratamento e a posologia uma TextBox, como você está fazendo, mas está apárecendo um erro de compilação ao clicar enter após entrar com um sintoma numa caixa que fiz Veja o que estou tentando fazer: Private Sub Localizar_Sintomas_Click() Dim CaixaTexto Dim Sintoma VarCaixaTexto = InputBox("Digite os Sintomas", [Sintoma]) If VarCaixaTexto = Sintoma Then DoCmd.OpenForm "ePatologias", , , , , , Sintoma Private SubForm_Open (Cancel As Integer] DoCmd.OpenForm "ePatologias", OpenArgs:=Sintoma MsgBox Me.OpenArgs End Sub End If End Sub Onde estou errando e como devo agir para conseguir isso? Forte abraço e parabéns pelo Fórum. Claudinei aparecido dos santos 26/10/2021 20:08:50 Mestre avelino! Tentei adptar par um relatorio, mas nao estou conseguindo, no caos eu precisava que comparece duas datas( o famoso ente... e...) Porem nao consigo fazer dar certo no evento ao abrir o relatorio. |