Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 12 de Setembro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
142 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Controle de Usuarios com Contador de Tentativas (alterado)
Publicado por Borland_Linuxer : Terça, Fevereiro 21, 2006 - 12:13 GMT-3 (17028 leituras)
Comentários 7 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador  Olá amigos da ActiveDelphi esse e o meu primeiro artigo aqui no site espero que seja o primeiro de muitos!
Vamos falar nesse artigo sobre Controle de Usuários com um contador de tentativas, vamos abordar a criação de uma Banco de Dados no Sql Server e de tabela usando os comandos create table e database e inserir dados com o insert into.

Primeiro vamos criar o banco de dados abra o Query Analyser e conectar ao servidor, no meu caso e um servidor local e estou usando usuário padrão (sa).


 

Para criamos um banco, na opção DB escolha o banco de dados Master e rode o script abaixo.


CREATE DATABASE Activedelphi -- criando o banco de dados
ON
PRIMARY (NAME=ENGSOFTWARE_data,
FILENAME = 'c:\MSSQL7\DATA\Activedelphi.mdf',
SIZE = 10MB,
MAXSIZE = 15MB,
FILEGROWTH = 25%)
LOG ON
(NAME = ENGSOFTWARE_log,
FILENAME = 'c:\MSSQL7\DATA\Activedelphi.ldf',
SIZE = 4MB,
MAXSIZE = 6MB,
FILEGROWTH = 2MB)


Agora vamos criar a tabela TbSenha rodando o script abaixo.


 CREATE TABLE TBSENHA
(
COD_USER int not NULL,
USUARIO varchar(15) NULL,
Senha varchar(6) NULL
)

insert into TBSENHA (COD_USER,USUARIO,Senha) values (1,'Active','123456');
insert into TBSENHA (COD_USER,USUARIO,Senha) values (2,'Delphi','125478');
insert into TBSENHA (COD_USER,USUARIO,Senha) values (3,'Sergio','326587');


select * from tbsenha
 
Observe que usamos o comando insert into para inserir três registros na tabela.

Bom, uma vez criada o banco de dados, a tabela, e inserido os registros nesta, vamos criar uma aplicação no delphi. Vamos usar a versão 7 do delphi pois é o que eu ainda uso aqui (rs).

Crie uma nova aplicação no delphi.
Para fazer a conexão com o banco de dados, vamos usar os componentes da paleta ADO.
 

 

 Crie um datamodule (que vou chamar de FrmDM) e adicione um ADOConnection (que vou chamar de ADOLogin) e uma ADOQuery (que vou chamar de qrSenha).


ADOConnection:
Vamos se concetar ao banco de dados clicando na propriedade ConnectionString + Build + Microsft Ole DB Provider for Sql Server.
 

 Faça a configuração como na figura acima, depois teste a conexão, na propriedade LoginPrompt coloque como false, e na Connected como true.
 

ADOQuery
Na propriedade Connection coloque ADOLogin, e na Sql digite o seguinte comando: Select * from TbSenha.
No evento onCreate do FrmDM vamos abrir a query: “qrSenha.Open” e no onDestroy vamos fechar: “qrSenha.Close;”
 

Crie um Form Principal com o Name (FrmMenu), Position (poDesktopCenter), coloque no mesmo um statusbar e adicione neste, dois Panel.
 

Criando o Form Login.

Bom, criamos um FormPrincipal e deixamos o Form1 que é criado automaticamente ao iniciar uma aplicação (MainForm) no delphi sem utilização, pois será nosso formulário de Login. No Form1 altere as seguintes propriedades.

 

Caption Login... Nome exibido na barra de título
Name FrmLogin Nome do form
Position poDesktopCenter Posição do Form no desktop

 

 Deixe seu Form parecido com esse abaixo ou melhor (rs), adicionando os componentes necessários e dando os nomes para os mesmos.

 

 

Vamos mudar algumas propriedades das Edits.

Edit1: Name (EdtUsuario) CharCase (ecUpperCase).
Edit2: Name (EdtSenha) PasswordChar (*).
 
Vamos agora declarar a variável tentativas, na seção private do FrmLogin.

private
   tentativas : Smallint; {variavel usada para conta o numero de tentativas de acesso ao sistema.} 

 

No evento onclick no botão Confirmar adicione a rotina abaixo.
 

procedure TfrmLogin.BTConfirmarClick(Sender: TObject);
begin
  if (edtUsuario.Text = '') then //Verifica se o campo "usuario" foi preenchido
  begin
    Messagedlg('O campo "Usuario" deve ser preenchido!', mtInformation, [mbOk], 0);
    if edtUsuario.CanFocus then
      edtUsuario.SetFocus;
    Exit;
  end;
  if (edtSenha.Text = '') then //Verifica se o campo "Senha" foi preenchido
  begin
    Messagedlg('O campo "Senha" deve ser preenchido!', mtInformation, [mbOk], 0);
    if edtSenha.CanFocus then
      edtSenha.SetFocus;
    Exit;
  end;

  if (frmDm.qrSenha.Locate('Usuarios',edtUsuario.Text,[])) and
  (frmDm.qrSenha.FieldByname('Senha').asstring = edtSenha.Text) then
  begin
  //
    frmMenu.StatusBar1.Panels.Items[0].Text:=edtUsuario.Text;
    frmMenu.showmodal;
    // ou Application.CreateForm(TfrmMenu, frmMenu) //Cria a janela main
    FrmLogin.close;
  end

  else //Caso o login nao seja valido entao
    inc(tentativas); //Incrementa em 1 o valor da variavel tentativas
  if tentativas= 1 then
  begin
    MessageDlg(Format('Tentativa 1 de 3', [tentativas]), mtError, [mbOk], 0);
    if edtSenha.CanFocus then
      edtUsuario.SetFocus;
  end;
  if tentativas= 2 then
  begin
    MessageDlg(Format('Tentativa 2 de 3', [tentativas]), mtError, [mbOk], 0);
    if edtSenha.CanFocus then
      edtUsuario.SetFocus;
  end;
  if tentativas= 3 then
  begin
    MessageDlg(Format('O login ou senha estão errados! A aplicação será fechada!',
    [tentativas]) + #13 + 'Confira seu erro, abra e tente novamente!', mtError, [mbOk],   0);
    Application.Terminate; //Encerra a aplicação
  end;
end;

 

No evento onclick no botão Cancelar adicione a rotina abaixo.
 

procedure TfrmLogin.BTCancelarClick(Sender: TObject);
begin
  Application.Terminate;
end;

 

Testando a Aplicação
Rode a aplicação e teste. Verás como esta funcionando perfeitamente. Se digitar a senha errada três vezes, ele mostrará o erro e fechará a aplicação.
 

 

 Se não ele abrirá o FrmMenu e mostra o usuário logado no statusbar.


 Conclusão: Esse artigo teve como finalidade apresentar desde a criação de um banco de Dados no SQL Server até a conexão, usando os componentes da paleta ADO, e para ilustrar todo esse processo criamos um controle de acesso com um contador de tentativas.
 

Agradeço ao Kelver por essa oportunidade e a todos os meus amigos desse brilhante Fórum que é o da ActiveDelphi.
Qualquer duvida terei o maior prazer em responder: sergio-project@hotmail.com


Sérgio de Castro Guedes

Analista de Sistema da Mais Sistemas - Am, Programador Delphi Client/Server e Multicamadas, Atualmente trabalhando com Banco de Dados Sql Server, aprendendo Firebird e Interbase.



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: Andrehf : Fev 23, 2006 - 09:40
(Informações sobre o membro | Enviar uma mensagem) http://
É um código legal pra quem tá aprendendo, mas acho q tem If demais.

Poderiamos simplificar um pouquinho o trecho de contagem de tentativas reduzindo os Ifs.

if (frmDm.qrSenhas.Locate('Usuarios',edtUsuario.Text,[])) and (frmDm.qrSenhas.FieldByname('Senha').asstring = edtSenha.Text) then
//Application.CreateForm(TfrmMenu, frmMenu) //Cria a janela main
begin
frmMenu.StatusBar1.Panels.Items[0].Text:=edtUsuario.Text;
frmMenu.showmodal;
FrmSenha.close;
end
else //Caso o login não seja válido então
inc(tentativas); //Incrementa em 1 o valor da variável tentativas

//Parte alterada *************************
if tentativas < 3 then
begin
MessageDlg(Format('Tentativa ' + IntToStr(tentativas) + ' de 3', [tentativas]), mtError, [mbOk], 0);
if edtSenha.CanFocus then
edtUsuario.SetFocus;
end
Else
begin
MessageDlg(Format('O login ou senha estão errados! A aplicação será fechada!',
[tentativas]) + #13 + 'Confira seu erro, abra e tente novamente!', mtError, [mbOk], 0);
Application.Terminate; //Encerra a aplicação
end;

André Luiz


por: sylvio : Ago 28, 2006 - 09:59
(Informações sobre o membro | Enviar uma mensagem) http://http://
Não é crítica é apenas um comentário ok...

Eu acho válido controlar o número de tentativas apenas de você for bloquear o login, como acontece com os cartões de débito dos bancos onde após a terceira tentativa sem sucesso o cartão é bloqueado.
Se for para fechar o sistema e permitir ao usúario continuar "tentando descobrir" é melhor não controlar a quantidade de tentativas. ;-)


por: elidorio (edson.lidorio@gmail.com) : Jun 25, 2012 - 01:06
(Informações sobre o membro | Enviar uma mensagem) http://geocities.yahoo.com.br/elidorio
Olá Sérgio,

Como fazer para desabilitar os menus, conforme as permissões de acesso?
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados