Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

Implementação: Singleton - Design Pattern Delphi - Parte 2

Veja nesta Quick, um exemplo prático de Singleton em Delphi

Olá galera, nesta Quick Tips, irei mostrar a implementação dos métodos declarados no artigo anterior, aonde vimos como montar o Singleton.

 

Vamos as implementações :

 

class function TUsuario.Criptografar(const Value: string): string;

var

    xMD5: TIdHashMessageDigest5;

begin

    xMD5 := TIdHashMessageDigest5.Create;

    try

        Result := xMD5.HashStringAsHex(Value);

    finally

        xMD5.Free;

    end;

end;

 

class function TUsuario.ChangePassword(strOldPassword,

strNewPassword, strCheckPassword: String; xConexao : TSQLConnection): Boolean;

var

    xQry : TSQLQuery;

begin

    xQry := TSQLQuery.Create(Nil);

    xQry.SQLConnection := xConexao;

    if FSenha = Criptografar(strOldPassword) then

    begin

        if strNewPassword = strCheckPassword then

        begin

            try

                xQry.SQL.Add('UPDATE USUARIO SET SENHA =     

                '+QuotedStr(Criptografar(strNewPassword))+

                ' WHERE IDUSUARIO = '+ IntToStr(FID));

                xQry.ExecSQL;

                Result := True;

                FSenha := Criptografar(strNewPassword);

                MessageDlg('Senha alterada com sucesso !!!!',mtInformation,[mbOK],0);

            finally

                FreeAndNil(xQry);

            end;

        end

        else

            MessageDlg('As senhas não conferem !!!!',mtInformation,[mbOK],0);

   end

   else

      MessageDlg('A senha antiga não confere !!!!',mtInformation,[mbOK],0);

   end;

 

constructor TUsuario.Create;

begin

     raise Exception.Create('Para obter uma instância de TUsuario utilize     

                                                TUsuario.GetInstance !');

end;

 

constructor TUsuario.CreatePrivate;

begin

   inherited Create;

end;

 

class function TUsuario.GetInstance: TUsuario;

begin

   if not Assigned(FInstance) then

      FInstance := TUsuario.CreatePrivate;

   Result := FInstance;

end;

 

class function TUsuario.GetUsuarioLogado: String;

begin

   Result := FUsuario;

end;

 

class function TUsuario.Login(AUsuario, ASenha: String; xConexao: TSQLConnection): Boolean;

var

   xQry : TSQLQuery;

begin

   try

      xry := TSQLQuery.Create(Nil);

      xQry.SQLConnection := xConexao;

      xQry.SQL.Add('SELECT * FROM USUARIO WHERE DESCRICAO =       

      '+QuotedStr(AUsuario)+

      ' AND SENHA = '+QuotedStr(Criptografar(ASenha)));

      xQry.Open;

      if not xQry.IsEmpty then

      begin

         FID := xQry.Fields[0].AsInteger;

         FUsuario := xQry.Fields[1].AsString;

         FSenha := xQry.Fields[2].AsString;

         FNivel := xQry.Fields[3].AsInteger;

         Result := True;

   end

   else

      ShowMessage('Usuario ou senha inválidos');

 

   except

      on E : EXCEPTION do

            raise Exception.Create('ERRO NAO ESPERADO '+ E.Message +#13+

            E.ClassName + ' - - - ' + E.UnitName);

    end;

end;

end.

 

O que é interessante nestes métodos, é que podemos aproveitar eles para outros projeto, montados nesta uUsuario.pas

 

Fico por aqui ate à próxima Quick Tips, onde veremos como aplicar os métodos de Login, GetUsuario, ChangePassword.

 

Um abraço

 

 

Wesley Y

wyamazack@rwsolution.com.br





    1 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Tiago Silva
Não entendi o porque de ter que criar uma instância de TUsuario sendo que sempre terei apenas uma instância de informação para ele em todo o projeto.


em 6/10/2011 18:32 - Responder

 



Autor
Wesley Yamazack

Graduado em Analise de Sistemas, no ramo de desenvolvimento há mais de 6 anos, onde atuei em empresas de diversos seguimentos como financeiro, comercial, estacionamento, etc. Atualmente encontro-me como analista desenvolvedor terceirizado da Marinha do Brasil, além de desenvolver projetos particular...


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível somente para quem possui Créditos DevMedia. (Ele não está associado a nenhuma publicação DevMedia).


  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03